CLOVER🍀

That was when it all began.

Linuxのカーネルパラメーターの説明って、どこを見たらいい?

Linuxにはたくさんのカーネルパラメータがあります。

manでシステムコールの説明を見たり、調べ物をしたりした時に、Linuxのカーネルパラメーターの変更を勧められたり、その意味が説明されて
いたりすることがあると思います。

なんですけど、そもそもその意味ってどうやって知ったらいいんでしょうか?

例えば、手元の環境。Ubuntu Linux 18.04 LTS、カーネルは4.15です。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:    18.04
Codename:   bionic


$ uname -srvmpio
Linux 4.15.0-54-generic #58-Ubuntu SMP Mon Jun 24 10:55:24 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

カーネルパラメーターは、1885個あるようです。

$ sudo sysctl -a | wc -l
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.br-9be47a5bd20b.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.docker0.stable_secret"
sysctl: reading key "net.ipv6.conf.enp7s0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0-nic.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr1.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr1-nic.stable_secret"
sysctl: reading key "net.ipv6.conf.wlp8s0.stable_secret"
1885

「net.core.somaxconn」の値。

$ sudo sysctl -a 2>&1 | grep maxconn
net.core.somaxconn = 128

で、この意味は…というと…。

Linuxソースコードの、ドキュメントを見ると良さそうな気がします。
※GitHubとkernel.orgの両方のリンクを書いておきます

https://github.com/torvalds/linux/tree/v4.15/Documentation

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation?h=v4.15

例えば、ネットワーク関連のパラメーターだと、このあたりを見る感じになりそうです。

https://github.com/torvalds/linux/blob/v4.15/Documentation/networking/ip-sysctl.txt

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/networking/ip-sysctl.txt?h=v4.15

https://github.com/torvalds/linux/blob/v4.15/Documentation/sysctl/net.txt

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/sysctl/net.txt?h=v4.15

先ほどの「net.core.somaxconn」の説明は、こちら。

somaxconn - INTEGER
Limit of socket listen() backlog, known in userspace as SOMAXCONN.
Defaults to 128. See also tcp_max_syn_backlog for additional tuning
for TCP sockets.

https://github.com/torvalds/linux/blob/v4.15/Documentation/networking/ip-sysctl.txt#L196-L199

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/networking/ip-sysctl.txt?h=v4.15#n196

どんなパラメーターがあるのか、sysctlである程度階層分けして確認しつつ、Documentディレクトリ内を見ていくのがいいのかもしれませんね。

$ sudo sysctl -a 2>&1 | perl -wp -e 's!^(([^.]+\.?){1}).+!$1!' | grep -v 'reading key' | sort | uniq -c | grep -Ev '^ +1 '
      2 debug.
     40 dev.
     38 fs.
    337 kernel.
   1413 net.
      9 user.
     45 vm.


$ sudo sysctl -a 2>&1 | perl -wp -e 's!^(([^.]+\.?){2}).+!$1!' | grep -v 'reading key' | sort | uniq -c | grep -Ev '^ +1 '
     29 dev.cdrom.
      2 dev.i915.
      3 dev.mac_hid.
      2 dev.parport.
      2 dev.raid.
      3 fs.inotify.
      5 fs.mqueue.
      8 fs.quota.
      6 kernel.keys.
      3 kernel.pty.
      7 kernel.random.
    208 kernel.sched_domain.
      2 kernel.seccomp.
      2 kernel.usermodehelper.
      6 net.bridge.
     32 net.core.
    610 net.ipv4.
    705 net.ipv6.
     58 net.netfilter.


$ sudo sysctl -a 2>&1 | perl -wp -e 's!^(([^.]+\.?){3}).+!$1!' | grep -v 'reading key' | sort | uniq -c | grep -Ev '^ +1 '
      3 dev.cdrom.info =
      2 dev.parport.default.
     26 kernel.sched_domain.cpu0.
     26 kernel.sched_domain.cpu1.
     26 kernel.sched_domain.cpu2.
     26 kernel.sched_domain.cpu3.
     26 kernel.sched_domain.cpu4.
     26 kernel.sched_domain.cpu5.
     26 kernel.sched_domain.cpu6.
     26 kernel.sched_domain.cpu7.
    341 net.ipv4.conf.
    144 net.ipv4.neigh.
     15 net.ipv4.route.
    528 net.ipv6.conf.
    144 net.ipv6.neigh.
      9 net.ipv6.route.
     13 net.netfilter.nf_log.

今度から、リポジトリ内のドキュメントの情報も見てみることにしましょう。

ちょっとしたメモでした。

そういや、調べている過程でLinuxカーネルドキュメントがあることも知り。

Linux Kernel Documentation

このあたりの情報、全然知らないなぁと…。