http://ossmpedia.org/messages/linux/2.6.9-34.EL/482.ja

 物理ページの確保に失敗した。要求したサイズと確保時に指定した空きページの探索方法を表示する。

 物理メモリが不足している場合に発生する。また,空きメモリが充分であっても,物理メモリが断片化し要求サイズ分の物理ページが連続して確保できない場合は発生する。



うーむ、この説明だと普通のときは出ないメッセージであるかのように書いてあるが、んなこたーない。
ネットワーク系のドライバだとパケット受け取った時に、そのデータを格納する用のメモリ確保を行うことが多いのだが、そのときに使われる関数 netdev_alloc_skb() は __GFP_NOWARN を立てない。

かつ、Linuxはメモリ管理哲学としてぎりぎりまでメモリを開放せずにキャッシュとして使い続け、メモリ確保要求が来てから開放する仕組みをとっているが、割り込みの延長からはロックの都合上この開放処理がおこなえないので、通常よりかなり高い確率でメモリ確保は失敗する。

なので、ある種のネットワークカード(特にe1000とtg3)は高負荷時にしばしばpage allocation failureのメッセージを出すが、これは高負荷だったので、パケット1つ捨てたよーーん。という意味でしかなく、どうせ流れてるのはTCP/IPだろうからACKしなきゃ再送してくるっしょ。という意味であり、特に対処は必要ない。

先日Andrew Mortonがe1000にだけスペシャルなハックいれてワーニングを回避しようとしていたので、tg3で起きるよーん。ジェネリックなレイヤで直そうぜーというメールを書いてみたのだが、Dave Millerのお気にめさなかったらしく、物理連続なメモリを要求するハードなんて腐ってるぜー、そんなもののために対応したくないぜー。と却下されてしまった。

# 加えて、古いLinuxのドライバはエラー対応が腐ってるドライバが多いので
# デフォルトをNOWARNにするのはありえないらしい

よって、この問題は技術的な問題ではないので、直る見込みがない。
e1000ユーザは枕を涙で濡らしてください。

#あ、TG3はIOMMUがあるのにドライバが使ってないだけなので、ドライバメンテナが
#ドライバ書き直す宣言をしているので、将来的に直るらしい


BTW: ところで、メッセージペディアの書き込み権限ってどうやったら手に入るのかいね?
こういうの気になるんだけど