web-dev-qa-db-ja.com

Linux Kernel.orgがカーネルパニックについて誤解を招く

私は常に/proc/sys/kernel/panic0に設定しています。 kernel.org でこのオプションの説明を見ると、次のことがわかります。

パニック:

このファイルの値は、パニック時に再起動する前にカーネルが待機する秒数を表します。ソフトウェアウォッチドッグを使用する場合、推奨設定は60です。

ここから、0は再起動前の待機0秒-即時再起動であると結論付けることができます。
しかし proc MANページは次のように述べています:

/ proc/sys/kernel/panic
このファイルは、カーネル変数panic_timeoutへの読み取り/書き込みアクセスを提供します。これがゼロの場合、カーネルはパニックでループします。ゼロ以外の場合は、この秒数後にカーネルが自動再起動する必要があることを示します。ソフトウェアウォッチドッグデバイスドライバーを使用する場合、推奨設定は60です。

ここで0は正反対のものを意味します-再起動しないでください。

では、なぜこのような信頼できるソースがこのような誤解を招く情報を提供するのでしょうか。またはMANページが不正確ですか?

追伸panic_on_oopsセクションのヒントから(たまたまこれを読んだ場合)、MANページが正しいことを推測できます。または、カーネルソースで何かを調査するのに十分な技術力がある場合コード。

4
red0ct

信頼できるソースはカーネルの実装なので、最初にそれを見てみましょう。

panicsysctlエントリ panic_timeoutと呼ばれるカーネル変数に対応 。これは 符号付き整数 で、次のように パニック時の動作を制御 に使用されます。

  • panic_timeoutが厳密に正の場合、カーネルはパニック後にpanic_timeout秒間待機します。
  • panic_timeoutがゼロ以外の場合、カーネルはパニック後(必要に応じて待機した後)にリブートします。
  • カーネルが再起動していない場合、メッセージが出力され、永久にループします。

したがって、マンページは正しく、カーネル自体のドキュメントは不完全でした。しかし sysctl/kernel.rstpanicをより詳細に文書化するようになりました。これは カーネルのバージョン5.7-rc1で修正されました です。

13
Stephen Kitt

では、なぜsuch信頼できるソースがsuchに誤解を与える情報を与えるのでしょうか?

まず、それは誤解よりも少し誤解を招くだけです-あなたはむしろあなたの結論にジャンプします-。 kernel.orgは特殊なケース「0」を無視していると思います。

kernel.orgの詳細はわかりませんが、本質的には公式カーネルDocumentation/(Web形式、グループ化)といくつかの追加情報が混在しています。最良の例は、ブートparamsリストです。これは、さまざまな場所から「収集」されたものです。

「kernel.org」には、「その他のリソース」の下にある「ドキュメント」リンクがリストされています。 doc/html/latest/に移動します。 /docの下には、リンクの混合バッグもあります。

最初に、(スフィンクスでフォーマットされた)ドキュメントには次のように書かれています:

カーネルのドキュメントは、カーネル自体と同様、非常にa 作業中;です。多くの分散ドキュメントを首尾一貫した全体に統合しようとするとき、それは特に当てはまります。ドキュメントの改善点はようこそ; ...であることに注意してください。

man 5 procman-pagesプロジェクト(またはパッケージ)の一部であり、それを管理しているbook-to-stun-an-oxを持つこの人がいます。これらのページはすべて、最後にサブタイトル(セクション)として "COLOPHON"があります。また、それらは異種であり、一部は収集されたばかり(すべてのPOSIX "1p"ページ)、および一部はギャップを埋めるために書かれています。

man7.orgでは、Kerrisk氏の作品を直接目にします-彼は良い仕事をしていて、彼の本を売っていますが、オープンソースのmanページのコレクションを維持しています。

私はこの場合、彼はより正確です。もちろん、どちらも関連しているように見えます(「いつ…デバイスドライバー... 60」).


私たち統合する作業私たち散在する多数のドキュメントを一貫した全体に統合します。

これは中途半端な意味があります。誰の文書がばらばらにされたか、そして誰によって?


私の疑似コードは次のようになります:

if timeout > 0   then loop for 'timeout' seconds
if timeout != 0  then reboot
loop for ever

つまり、負の値は即時の再起動であり、正の値は両方の場合に真です。そして、ゼロは直接最終ループにつながります。

2
rastafile