/ proc / sys vs / sys / modules / mod / parameter

10

Saya telah bertanya-tanya selama beberapa hari terakhir bagaimana tepatnya cara kerjanya. Kita dapat mengatur parameter runtimes kernel menggunakan sysctl atau echo boolen 1> /proc/sys/module/exactParametertetapi di /sys/modules/module/parameters/parameterkita juga dapat mengatur nilai.

Apakah parameter untuk modul /proc/sys/hanya terkait dengan hard yang memenuhi kernel? atau mungkin ada parameter untuk Modul Kernel yang Dapat Dimuat juga?

LKM setelah dimuat ke dalam menjalankan Kernel mengungkapkan parameter mereka di /sys/modules/module/paraeter/params. Apakah ini berarti, bahwa tidak ada parameter untuk modul yang dikompilasi ke dalam Kernel?

Apa perbedaan antara kedua direktori.

ast
sumber

Jawaban:

5

Ada sedikit hubungan antara /proc/sysdan /sysselain fakta bahwa keduanya adalah antarmuka kernel dan kebetulan nama.

/proc/sysadalah antarmuka ke sysctl , yang merupakan parameter konfigurasi kernel. Membaca atau memodifikasi /proc/sys/foo/barsetara dengan mendapatkan atau mengatur foo.barsysctl. Nilai-nilai Sysctl diatur oleh kategori semantik, nilai-nilai tersebut tidak secara intrinsik terkait dengan struktur kernel. Banyak nilai sysctl adalah pengaturan yang ada pada setiap sistem Linux terlepas dari driver atau fitur apa yang dikompilasi; beberapa terkait dengan fitur opsional (misalnya protokol jaringan tertentu) tetapi tidak pernah ke perangkat keras tertentu.

/sys/moduleadalah, seperti namanya, antarmuka ke modul kernel. Setiap direktori terkait dengan satu modul kernel. Anda dapat membaca, dan terkadang memodifikasi, parameter modul foodengan menulis /sys/module/foo/parameters/*.

Komponen yang dimuat di kernel membaca parameter mereka dari baris perintah kernel. Parameter ini tidak dapat ditetapkan pada saat runtime (setidaknya tidak melalui antarmuka yang dibuat secara otomatis seperti /sys/module: komponen dapat mengekspos antarmuka khusus untuk ini).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Jadi untuk modul yang dikompilasi ke dalam Kernel, saya hanya dapat menambahkan parameter melalui baris perintah kernel (seperti: / proc / cmdline). Tidak ada cara lain untuk mengubahnya saat runtime? Apakah saya mengerti benar? Jadi apa sebenarnya parameter kernel (konfigurasi) ini? Saya pikir mereka adalah parameter yang bisa diubah dari beberapa modul yang dikompilasi ke dalam Kernel
ast
@ast Parameter sysctl didokumentasikan dalam Documentation/sysctl/*.txtdokumentasi kernel Linux. Ini adalah seperangkat parameter yang sebagian besar berlaku terlepas dari fitur dan driver mana yang dikompilasi ke dalam kernel tertentu.
Gilles 'SANGAT berhenti menjadi jahat'
terima kasih banyak, saya berusaha untuk sepenuhnya memahami hubungan ini dan menghabiskan 3 hari membaca banyak hal untuk menemukan jawaban.
ast
3

Makalah " The sysfs Filesystem " oleh Patrick Mochel akan memberi Anda gambaran yang jauh lebih baik dari tujuan dan sejarah /sysdaripada yang akan cocok dalam kotak ini. Mengutip abstrak:

sysfs adalah fitur dari kernel Linux 2.6 yang memungkinkan kode kernel untuk mengekspor informasi ke proses pengguna melalui sistem memori di-memori. Organisasi hirarki direktori sistem file ketat, dan berdasarkan organisasi internal struktur data kernel. File yang dibuat dalam file adalah (kebanyakan) file ASCII dengan (biasanya) satu nilai per file. Fitur-fitur ini memastikan bahwa informasi yang diekspor akurat dan mudah diakses, menjadikan sysfs salah satu fitur yang paling intuitif dan berguna dari kernel 2.6.

Sebagai jawaban atas pertanyaan spesifik Anda, "Apakah modul kernel yang dapat dimuat mendapatkan representasi /sys?" jawabannya adalah "ya, jika pembuat modul menyediakan antarmuka". Ini dapat dengan mudah ditunjukkan dengan menunjukkan berapa banyak modul yang dimuat memiliki entri yang sesuai/sys/module

$ lsmod | awk '{print $1}' | sort > /tmp/lsmod
$ cd /sys/module ; ls > /tmp/sysmodule
$ comm -12 /tmp/lsmod /tmp/sysmodule
ahci
arc4
ath
ath9k
ath9k_common
ath9k_hw
bluetooth
bnep
cfg80211
…

yang pada sistem saya menunjukkan bahwa 73 dari 73 modul yang dapat dimuat memiliki entri yang sesuai di /sys/module.

msw
sumber
Saya menemukan informasi terutama tentang / sys / modules /, bahwa selalu ada setiap LKM dan module_param (nama, tipe, perm) memengaruhi penampilan parameter direktori. Tetapi saya masih memiliki pertanyaan tentang sysctl dan / proc / sys, di mana kita dapat mengatur Parameter Kernel Runtime. Mengapa tidak mungkin menggunakan / sys / modules? Dan di mana kita mengatur parameter untuk modul yang dikompilasi Kernel (/ sys / modules / atau di / proc / sys / juga)? Mungkin saya mencampur opsi kernel dengan parameter modul (saya pikir mereka sama) sehingga dengan menggunakan sysctl saya harus mengatur parameter modul atau beberapa fungsionalitas kernel
ast