単一の「rcu_sched検出CPU停止」警告がシステムログに表示される原因は何ですか?

単一の「rcu_sched検出CPU停止」警告がシステムログに表示される原因は何ですか?

環境:Linux [ホスト名] 3.2.0-4-amd64#1 SMP Debian 3.2.96-2 x86_64 GNU / Linuxハードウェア:AMD Opteron(tm)プロセッサ6344、6x2MiB L2、2x8MiB L3、6コアht(論理コア12)犬))))

今日のシステムログに次の警告が表示されました。

Feb 28 09:58:53 amalthea kernel: [4367033.060016] INFO: rcu_bh detected stall on CPU 10 (t=0 jiffies)
Feb 28 09:58:53 amalthea kernel: [4367033.060018] sending NMI to all CPUs:

以下はCPUステータスダンプです。ログには、この問題を引き起こす「悪い」内容がないようです。

サーバーはまだ実行中であり(明らかに)停止したプロセスなどがなく、警告が発生してから1時間ほど再発生しませんでした。

少し探しました。RCUストール検出器に関する情報(私にとってはあまりにも技術的です。本物わかります) 以下を見ることができます。

  1. CPUが停止しました。t=0 jiffies
  2. CPUが「検出されない」

ファイルには、これが偽の肯定である可能性があることを示す説明があります。

["ステータスダンプが開始される前に停止が終了しました"]はまれですが、実際には発生します。道路ゼロファストストールフラグ指定可能この場合、停止警告と猶予期間の初期化がどのように相互作用するかによって異なります。この種の問題には、不要なstop_machine()などのメソッドを使用せずにこの誤った肯定を完全に削除することは不可能であることに注意してください。

(強調は私のもの)

「ステータスダンプの開始前に停止」というメッセージは表示されませんが、上記の2つのログ行の後に表示される大規模なCPUダンプ以外は、診断方法で他の情報を取得できないようです。

役に立つ場合は、CPUダンプでより多くの情報を投稿できます。専門家ではありませんが、何も見つかりませんでした。

この問題の原因は何ですか?t=0 jiffiesログに追加の診断情報を印刷せずに、データポイントのみに基づいて偽の肯定を得ることはできますか?

(この質問は次のように異なります。rcu_sched が CPU 停止を検出しました。、これは「実際の問題」を示すようです。 )

答え1

これは、次の3つの理由のいずれかが原因で発生する可能性が高くなります。

  1. トリガーしにくいカーネルのバグです。しかし、RCUはカーネルのコアなので、ほとんど誰もがバグに直面する可能性が高いので、これは可能ではないと思います。
  2. 悪い記憶。不良メモリモジュールによるメモリ破損により、このような奇妙なことが容易に発生する可能性があります。
  3. メモリ自体以外の理由で発生する一時的なメモリエラーです。上記と似ていますが、再び起こる可能性はありません。これはECCメモリが防止しようとするタイプです(ただし、ECCロジックで問題が完全に可能であるため、完全ではありません)。

このようなことが再発しない限り、おそらくこれがケース3であると仮定して続行することができます。このようなことが再発した場合は、周辺カーネルメッセージで類似点を検索するか、RAMを確認してください。

答え2

NVidia Jetsonボードでこのエラー(CPU停止)が発生しました。

NVidiaと会話してJetsonを調査した後、一部のカードがBluetoothデバイスを介してのみ1秒あたり80,000の割り込みを受信して​​いることがわかりました。このデバイスに対応するモジュールを無効にすると、CPUが停止するのを防ぎます。

受信中の割り込みの数を確認するには、/proc/interruptsを確認してください。 RJ45も使用されるため、中断が発生し、割り込みが多すぎてLinuxカーネルデッドロックが発生します(これはカーネル自体ではないかもしれませんが、Bluetoothを処理するドライバに注意してください)。およびRJ45)。

以下は、「net」または「ip」を参照するいくつかの関数を見ることができる例です。また、el1_irqIRQが処理中であるというメッセージも表示されます。

したがって、Austinのリストに基づいて(1)で定義された問題があります。

Feb  1 08:53:16 ve5 kernel: [ 1459.074481] INFO: rcu_preempt self-detected stall on CPU
Feb  1 08:53:16 ve5 kernel: [ 1459.074646]      0-...: (8 GPs behind) idle=ea9/140000000000001/0 softirq=32059/32059 fqs=2112 
Feb  1 08:53:16 ve5 kernel: [ 1459.074794]       (t=5250 jiffies g=10249 c=10248 q=48)
Feb  1 08:53:16 ve5 kernel: [ 1459.074906] Task dump for CPU 0:
Feb  1 08:53:16 ve5 kernel: [ 1459.074926] ksoftirqd/0     R  running task        0     3      2 0x00000002
Feb  1 08:53:16 ve5 kernel: [ 1459.074943] Call trace:
Feb  1 08:53:16 ve5 kernel: [ 1459.074963] [<ffffff800808bdb8>] dump_backtrace+0x0/0x198
Feb  1 08:53:16 ve5 kernel: [ 1459.074972] [<ffffff800808c37c>] show_stack+0x24/0x30
Feb  1 08:53:16 ve5 kernel: [ 1459.074983] [<ffffff80080ecf70>] sched_show_task+0xf8/0x148
Feb  1 08:53:16 ve5 kernel: [ 1459.074991] [<ffffff80080efc70>] dump_cpu_task+0x48/0x58
Feb  1 08:53:16 ve5 kernel: [ 1459.075001] [<ffffff80081c1acc>] rcu_dump_cpu_stacks+0xb8/0xec
Feb  1 08:53:16 ve5 kernel: [ 1459.075012] [<ffffff8008132450>] rcu_check_callbacks+0x728/0xa48
Feb  1 08:53:16 ve5 kernel: [ 1459.075020] [<ffffff8008138cac>] update_process_times+0x34/0x60
Feb  1 08:53:16 ve5 kernel: [ 1459.075030] [<ffffff800814a218>] tick_sched_handle.isra.5+0x38/0x70
Feb  1 08:53:16 ve5 kernel: [ 1459.075037] [<ffffff800814a29c>] tick_sched_timer+0x4c/0x90
Feb  1 08:53:16 ve5 kernel: [ 1459.075044] [<ffffff80081399e0>] __hrtimer_run_queues+0xd8/0x360
Feb  1 08:53:16 ve5 kernel: [ 1459.075051] [<ffffff800813a330>] hrtimer_interrupt+0xa8/0x1e0
Feb  1 08:53:16 ve5 kernel: [ 1459.075061] [<ffffff8008bffe98>] arch_timer_handler_phys+0x38/0x58
Feb  1 08:53:16 ve5 kernel: [ 1459.075071] [<ffffff8008126f10>] handle_percpu_devid_irq+0x90/0x2b0
Feb  1 08:53:16 ve5 kernel: [ 1459.075078] [<ffffff80081214f4>] generic_handle_irq+0x34/0x50
Feb  1 08:53:16 ve5 kernel: [ 1459.075085] [<ffffff8008121bd8>] __handle_domain_irq+0x68/0xc0
Feb  1 08:53:16 ve5 kernel: [ 1459.075092] [<ffffff8008080d44>] gic_handle_irq+0x5c/0xb0
Feb  1 08:53:16 ve5 kernel: [ 1459.075099] [<ffffff8008082c28>] el1_irq+0xe8/0x194
Feb  1 08:53:16 ve5 kernel: [ 1459.075108] [<ffffff8008231de4>] kmem_cache_alloc+0x114/0x2c0
Feb  1 08:53:16 ve5 kernel: [ 1459.075118] [<ffffff8008db94a4>] dst_alloc+0x6c/0xb0
Feb  1 08:53:16 ve5 kernel: [ 1459.075127] [<ffffff8008df6a2c>] rt_dst_alloc+0x74/0xe8
Feb  1 08:53:16 ve5 kernel: [ 1459.075134] [<ffffff8008df7ca0>] ip_route_input_noref+0x3c0/0x8f8
Feb  1 08:53:16 ve5 kernel: [ 1459.075144] [<ffffff8008e34a00>] arp_process+0x3e8/0x708
Feb  1 08:53:16 ve5 kernel: [ 1459.075152] [<ffffff8008e34e70>] arp_rcv+0x118/0x1a8
Feb  1 08:53:16 ve5 kernel: [ 1459.075161] [<ffffff8008da9c20>] __netif_receive_skb_core+0x3b8/0xad8
Feb  1 08:53:16 ve5 kernel: [ 1459.075169] [<ffffff8008dad010>] __netif_receive_skb+0x28/0x78
Feb  1 08:53:16 ve5 kernel: [ 1459.075175] [<ffffff8008dad08c>] netif_receive_skb_internal+0x2c/0xb0
Feb  1 08:53:16 ve5 kernel: [ 1459.075182] [<ffffff8008dadcb4>] napi_gro_receive+0x15c/0x188
Feb  1 08:53:16 ve5 kernel: [ 1459.075192] [<ffffff800894dd90>] eqos_napi_poll_rx+0x358/0x430
Feb  1 08:53:16 ve5 kernel: [ 1459.075199] [<ffffff8008daf2e4>] net_rx_action+0xf4/0x358
Feb  1 08:53:16 ve5 kernel: [ 1459.075206] [<ffffff8008081054>] __do_softirq+0x13c/0x3b0
Feb  1 08:53:16 ve5 kernel: [ 1459.075215] [<ffffff80080baf38>] run_ksoftirqd+0x48/0x58
Feb  1 08:53:16 ve5 kernel: [ 1459.075225] [<ffffff80080e07c8>] smpboot_thread_fn+0x160/0x248
Feb  1 08:53:16 ve5 kernel: [ 1459.075232] [<ffffff80080dbe64>] kthread+0xec/0xf0
Feb  1 08:53:16 ve5 kernel: [ 1459.075239] [<ffffff80080838a0>] ret_from_fork+0x10/0x30

関連情報