2011-01-21 6 views
3

__alloc_pages_slowpath()の呼び出しは、__alloc_pages_slowpath()を呼び出したデバイス割り込みにも生き残ることができますか?または、2番目の呼び出しが最初の呼び出しを破損しますか?__alloc_pages_slowpath()はリエントラントセーフなのですか?

私は、XFSファイルシステム上の通常のファイルのread(2)プログラムコールを見ています。カーネルスタックトレースは、最終的に__alloc_pages_slowpath()が呼び出され、e1000e IRQが発生し、最終的に__alloc_pages_slowpath()を呼び出すと、すぐにログメッセージ "fooprog:page allocation failure。order:0、mode:0x4020"が発生します。

全体のスタックトレースはここで見ることができます:https://gist.github.com/790577

答えて

1

「fooprog:ページの割り当てに失敗順:0、モード:0x4020」のe1000eドライバの問題が原因です。 vm.min_free_kbytesを現在の値を2倍に設定すると、それらを防ぐことができます。 __alloc_pages_slowpath()はおそらくリエントラントセーフです。

更新:(1)ネットワークデバイスドライバがページを割り当てようとしたときにLinuxカーネルのシステムログに大きなスタックトレースが印刷されて、それが見つからない場合、「通常の動作」です。 (2)誰かがパッチを提出し、6ヶ月間、パッチを入手してフォローアップするように丁寧に尋ねるまで無視されました。その後、VMがメモリ不足になったときにKVM/qemu virtioネットワークがロックを止めました。 (3)Linuxへの代替手段は、私が本当の仕事をするのに悲しいほど悪いことです。

+1

回答を「回答」として受け入れることをお勧めします。この質問は未回答の質問のリストから削除されています。 :) – sarnold

関連する問題