Linux 4.5 から MADV_FREE が登場してた

てっきりLinuxにはMADV_DONTNEEDがあるからMADV_FREEは実装されないものだと思ってたら、Linux 4.5で登場してた。この辺に詳しい。 Volatile ranges and MADV_FREE

ぱっと見た感じ、MADV_DONTNEEDはcallされると即座にinvalidateされるのに対し、MADV_FREEはcallされてもshrinkerから追い出されるまでは必ずしもinvalidateされるわけではない、という感じっぽい。どちらも、ユーザランドからkernelにmmapした領域をもうイラネと通知するための仕組み。invalidateされると、その後はじめてアクセスするタイミングでAnonymousページだとゼロフィルされたページが再度割り当てられる。backendがある場合(ファイルをmmapしたなど)は再度データを読み込んだページを割り当てる。

・・・みたいな感じのことをmadvise(2)のmanを見るだけでユーザはちゃんと理解できるんだろうか、とか思わなくもない・・・

VMとFilesystem回りのパフォーマンスチューニングは難しくて、メモリをいっぱい使いたいんだけどOOM Killerが走るほどは使いたくない、みたいな微妙なラインをユーザランドも意識したい場合とか、ポリシー策定がめんどいよなぁ。とりあえず使いこなすのが難しいSyscall類などなど、mmap, munmap, msync, readahead, posix_fadvise, madvise, mprotect, mlock, mlockall 最終的な環境がわからずにこれら使ってチューニングするとたいていは逆に悪化するような気がする。

このブログ記事について

このページは、らるるが2016年6月20日 03:42に書いたブログ記事です。

ひとつ前のブログ記事は「letsencrypt使って無料でHTTPS対応」です。

次のブログ記事は「SSD時代のデータ完全消去」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.9.0