sysctlのデフォルト値を調べますか? (再起動は不要)

sysctlのデフォルト値を調べますか? (再起動は不要)

net.core.rmem_maxwithの値を修正したので、sysctlこれをデフォルト値にリセットしたいと思います。

再起動するとnet.core.rmem_maxデフォルトに戻ります(上書きされていないため/etc/sysctl.conf)、再起動せずにこの値がわかりますか?

理想的には、値を変更する前に実行して値を読み取る必要がありますsysctl net.core.rmem_max

答え1

これは通常不可能です。カーネルは元の値を保持しません(少なくともLinuxではそうではなく、おそらく他のUNIXバリアントでも同じです)。設定値は変数に保存されます。設定を変更すると、その変数を含むメモリが元に戻せないように更新されます。

ほとんどの設定では、変数の初期値はコンパイル時に決定され、カーネルバイナリに格納される定数です。したがって、原則としてカーネルバイナリをチェックしてデフォルト値を見つけることができます。興味のある設定に対応するシンボルを見つけ、カーネルバイナリでそのシンボルのアドレスを追跡する必要があります。仮想マシンでカーネルを起動すると、作業負荷が軽減されます。

ほとんどの設定ではカーネルソースコードを見ることができます。kernel/sysctl.cその他の文書。次の定義が表示されます。

    {
            .procname       = "rmem_max",
            .data           = &sysctl_rmem_max,
    },

(存在するnet/core/sysctl_net_core.c)、ここで初期化を追跡できます。sysctl_rmem_max変える。これは定数で初期化されますが、拡張するにはCコードをたくさん読む必要があります。

答え2

私のOpenBSDシステムでは、/etc/sysctl.confにいくつかのデフォルトのsysctl値がリストされていますが、このリストはすべてではありません。

おそらく最良の方法は、sysctlコードを読むか、同じOSを実行している友人に彼の値を尋ねることです:)

関連情報