If you would like to protect more pages, smaller values are effective. The minimum value is 1 (1/1 -> 100%). The value less than 1 completely disables protection of the pages.
保護を最大するなら値は最小値の1だとマニュアルに書かれていますが、なぜ30にされているのでしょうか?
Normal zoneが充分に大きい場合、
Normal zone page size * (1 / 30) > MDA32 zone page sizeになるので、30も1も同義になるから30にしているのでしょうか。
Discussion
保護を最大するなら値は最小値の1だとマニュアルに書かれていますが、なぜ30にされているのでしょうか?
Normal zoneが充分に大きい場合、
Normal zone page size * (1 / 30) > MDA32 zone page sizeになるので、30も1も同義になるから30にしているのでしょうか。
swapイン・アウトしてる最中に対象のプロセスだけ止められれば良いのでしょうけど、異なるプロセスの仮想メモリ空間上に書かれた同じ内容のメモリは省メモリ化の為に物理メモリ上では共有されており、異なる内容が書かれて初めて別の物理メモリが割り当てられます。swapもそれに準じていたり、メモリが潤沢にあっても参照頻度の低いメモリはswapアウトされたり、断片化した物理メモリを仮想メモリ空間上では連続している様にみせたりと、メモリ管理は複雑なのでkswapdがスワップイン・アウト中はユーザプロセスが全停止しているのかもですね。長時間稼働させ尚且つ集中的なswapイン・アウトでプロセスが一時停止するのが問題になるのであればswappinessを10や5にする、絶対にメモリが不足しないのであれば0やswapoffしてもいいかもしれません。
この辺はカーネルの問題というより、走らせる側のアプリケーションに応じたカーネルのチューニングの話なので不具合と言うと、多分リーナスに怒られます(笑)
swapではありませんが、メモリ管理を自前で行う必要のない高級言語のガベージコレクションも地味に重い処理なので、ミリ秒単位で止まると困るゲーム開発でもたまに話題になってますね。
おそらくですが、lowmem_reserve_ratioの値はドライバなどの行うメモリ割当の一部の割当先なども変更したと思います、そしてswapプロセスが動くということはメモリ割当できない状況かつタイミングを考えると新たなメモリ割当要求(kmalloc,mallocなど)が動いた結果だと考えられます。問題のLidarを接続しているときに発生するということであれば、データの読み出し頻度が遅かったり読み出し切れていないなどの問題でドライバなどの用意しているバッファにデータがたまり続けている(バッファが肥大化し続けている)のではないでしょうか。
swapが走るということはどこかでHeap領域などのメモリが確保され続けているのだと思うので現状は2GBで2時間だった時限爆弾が60GBで100時間以上になっただけではないでしょうか?
どこで問題が起きているかは使用メモリが増え続けているプロセスがないかを調べるのがてっとり速いと思うのでそれをおすすめします。
組み込みLinux といってもこういうことが起きるのですね。複雑な組み込みシステムで、こういった脇役が起こす問題発見は相当しんどいですね。まだ問題を起こしそうなkswapdが心配ですね。
結論から申し上げます。
組み込みLinuxは制御システムの為に作られたものではありません。
制御システムを構築しない限り解決する問題ではありません。
オペレーティングシステムはオペレーションの為に作られました。
メインフレームと呼ばれていた大型コンピュータのメインメモリは
僅か128Kバイトと少なく、多くのジョブを走らせる為にMMUが
必要だった。MMU(メモリマネジメントユニット)は外部記憶装置
(HDD)にメモリのイメージを作成してメインメモリとのスワップを
して大きなタスクを実行していました。
RTOSもオペレーションの為に作られました。
小さなメモリと遅いCPUと遅いI/Oの入出力を効率よくする為に
タスクスイッチの機能であるタスク管理システムを構築しました。
このタスク管理システムが問題を引き起こしてたまにタスク実行の
順番を間違える事が起き、根本原因の解決には至っておりません。
面白そうな話で興味深いです。
昔Linuxカーネル開発者をやっていたときのことを久しぶりに思い出しました。自分がやっていたきはkernelSharkなんてものもなかったので、ひたすら大量の出力とにらめっこでした。
テックブログも楽しみにしています。
興味深い記事をありがとうございます。私はkswapdの動作には詳しくないのですが、本当に全てのプロセスが停止してしまうようなロックが長時間確保されるなんてことが起こりうるのでしょうか。実際にスワップイン・アウトする瞬間なら分かるのですが、いつ終わるか分からないページ探索中に、全てのプロセスに影響を与えるようなロックを確保し続けるというのは直感的に納得できません。もし具体的なロックの名前が分かっていたら教えていただきたいです。
こういうシステムでも動的にメモリを確保解放してるんだな…
複雑なシステムだからやむを得ないのだろうけど、そうなると常に不確定要素が付きまとうな。