[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:50571] SH4 Linux : kswapdがアプリケーションを長時間ブロック
西原と申します。
SH4用のカーネルを使用しております。
kswapdがアプリケーションを長時間ブロックして困っております。
CPU :SH7780 CPUクロック400MHz バスクロック100MHz
カーネル:linux-sh 2.6.20.10
32bit拡張モード設定を有効にしてメモリを256Mbyteを実装
(Support 32-bit physical addressing through PMB = y)
アドレス0x0800000-0x0FFFFFFFの128Mbyteを
カーネルメモリに設定。
32bit拡張モードで更に実装した残りの128Mbyte
(0x50000000-0x57FFFFFF) は前の128Mbyteと
アドレスがつながっていないので
直接256Mbyteのカーネルメモリとして認識させる事ができなかった。
この後ろ側128MbyteをMTDを用いて64M×2のRAMドライブを構築
この64M×2のRAMドライブをswapとしてカーネルに追加。
カーネルには実メモリ128M+swap128M=計256Mbyteを認識させ
swapを使用することが可能なtmpfsで220MbyteのRAMdiskを構築しました。
このRAMdisk対して、150ms毎に64kbyteの書き込みを続けます。
64kbyte/150msの書き込みを1時間につき30分間連続で行います。
ファイルはRAMdiskが溢れない様に随時削除しています。
この状態で1ヶ月間連続運転を行うとkswapdがアプリケーションを
6秒間ブロックする現象が発生します。
アプリケーションは外部割込みで150ms毎に64kbyteのデータを取得し
古いファイルを削除しながらRAMdiskへの格納を延々と続けるものです。
現在割り込み処理で64kbyte×32個のバッファリングを行っているので
アプリケーションがブロックされる時間が4.8秒以内なら対応可能なのですが
6秒間ブロックされるとデータの取りこぼしが発生して困っております。
220MのRAMdiskを使用しているため、バッファリングエリアを今以上
増やすことができません。
この現象の回避方法、あるいはkswapdによるブロック時間を短縮する方法
(こまめにswapoutして1回のブロック時間を4.8秒以内にする方法)
をご存知の方がおられましたらご教授願えないでしょうか?