mlock()

Linux 上で、「リアルタイム優先度で動いて欲しい」アプリがあるのですが、どうもときどき、ALSA のバッファー・オーバーランがおきます。デカいファイル(15GB くらいかな?)を unlink() しないように注意したり、sched_setscheduler() で FIFO スケジューリングしたりしているのですが、やっぱり数日に一回くらいはオーバーランします。本当は、ALSA をよく調べてハードウェアバッファのサイズを工夫できれば良いのですが、ALSA のドキュメントって整備されていなくて(doxygenAPI リファレンスだけじゃ、設計の背景とか良く分からない)、困っています。
今日、何気なく JACK の FAQを読んでいたら、JACK のデーモンを動かす方法が説明されていました。スケジューリングの設定だけでなく、仮想記憶を物理メモリにロックダウンすることができるようです。mlockall() というシステムコールを見つけて組み込んでみました。エラーが出ていないのでうまく動いていると思うのですが、ps コマンドや top コマンドで見ても、よく分かりません。しかし、/proc/N/status を見てみたところ、

VmSize:    17732 kB
VmLck:     17740 kB

ということで、無事にロックダウンされていることが分かりました。これで、少し様子を見てみます。