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://github.com/torvalds/linux/blob/v4.15/Documentation/sysctl/net.txt
先ほどの「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
どんなパラメーターがあるのか、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カーネルドキュメントがあることも知り。
このあたりの情報、全然知らないなぁと…。