[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秒以内にする方法)
をご存知の方がおられましたらご教授願えないでしょうか?