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カーネルドキュメントがあることも知り。
このあたりの情報、全然知らないなぁと…。