March 2007

あんまりエントリにするほどの分量はないんだけど、現時点でのオイラのオススメ値を貼っとく

overcommit_memory=2
overcommit_ratio=0
swapパーティションのサイズ: 物理メモリ量x80%

overcommit_ratio=0 にすることで、全プロセスの仮想メモリ量がスワップサイズを超えなくなるので、カーネルによほど負荷をかけないかぎりスワップしなくなる。
んで、スワップを0にしたときと違って、カーネルに負荷をかけるようなスゲー使いかたをしたときでもスワップが発生するだけでOOM-killerは発生しない。

欠点は、ほぼ使わないと想定しているスワップに結構なディスク量をとられることだけである。

あ、あと、80%というのはかなり適当に決めた値なのでシステムによっては90%とかでもいけると思う。


注意1: この設定は組み込みでは全然使えません。なぜならサーバー系みたいに数Gのメモリを積む世界では、glibc mallocやpthreadがアドレス空間予約のために発行するmmap(PROT_NONE)な空間なんてゴミですが、全体メモリが16Mとか32Mの世界ではスタックの1スレッドあたり2Mの予約量がバカに出来ません。
たぶん、組み込みではovercommit_memoryで制御なんて思わないほうが懸命。組み込みなんだから自分でメモリ量ぐらい把握しろ。と(←出来たら苦労しねーよ)

注意2: 上記の設定は/etc/sysctl.confに設定してはいけません
大半のディストリで、sysctl.confの読み込みはswapのmountよりも前に行われるので、OSが起動しなくなります。
rc.localとかlocal.rc とか、すごーく、最後のほうに走るスクリプトがあると思うので、そのへんに
sysctl -w vm.overcommit_memory=2
のように、sysctlコマンドを使って設定するのがオヌヌメ


あと、最後に残された課題は、このほとんど使わないことが確定なスワップ領域をなんとかして、圧縮できないのかって事。
ext3ってファイルの圧縮とか出来ないんだよねー。
むむむ

過去エントリはこちら
Linuxでのovercommit_memory制御の勘所
tmpfsとstrict non-overcommit mode


まあ、結論の歯がゆさにイライラした人は↓でも見て癒されろ


待ちたまえ君たち.jpg
そんな結論でええんかい! ランキング!

このエントリーをはてなブックマークに追加

http://mkosaki.blog46.fc2.com/blog-entry-280.html

追記:
ごめん、見直したら、tmpfsはなんかちゃんとカウントしてるっぽげ。
これは追試テストをして、結果を書きます。



と書いてそのまま忘れ去っていた。
誰も覚えてないと思うけど続きを書く。

まず結論から書くと、tmpfsはstrict non-overcommit modeの時にカウントされている。
ただしクセがあって、ちょっと使いにくい。

まず、どこでカウントされているのかを見ていくと、これはtmpfs本体の場所でソースコード的には以下

linux/mm/shmem.c の shmem_acct_block(), shmem_acct_size()
ただし、実質、shmem_acct_block()だけしか使ってない。

まあ、mmapの場所でカウントしてなかったら、他にありそうな場所はshmem.cぐらいしかないから、
想像はつくと思うけど(^^;


さて、ここで話を続ける前に余談を2つ、3ついれてみる。

余談1

mm/shmem.c のコードは tmpfs, shmfs(/dev/shm つまり、POSIX共有メモリ用), /dev/zeroのMAP_SHAREDなmmap
の3通りに使われている。
なので、以下の話は実はtmpfsに限らない



余談2
Unixなファイルシステムは普通どれもHoleとかSparseとかよばれる特殊なファイル状態をサポートしている。
これがどういうものかというと、あるファイルについてoffset 0-1023の範囲の1024byteにはデータがあり、
次の1024-2047にはデータがなく、さらに次の2048-3071にはデータがある。という状態のときに、
0-1023, 2048-3071の部分だけをディスクに書き込み、ファイルをエディタで開いたときは3072byteのファイルに
見えるが実際にはディスク容量を2048byte分しか消費していない。という事を可能にするFSの機能である。
(ディスクに記録されていない部分はエディタなどで開くと0が書かれているかのように見える)




んで、やっかいなことに、余談2で説明したスパースなファイルをmmapし、オフセット1500にメモリライトすると、その時点でディスク容量の確保が行われる。
で、この時、ディスク容量が足りなかったとしてもエラーを通知する方法は存在しないし、そんなエラーがおきたときに対処が出来るプログラムは存在しない。

アタリマエだ。メモリライトが失敗するとか思っていたらまともなアプリケーションは書けない。


で、さらにこまった事にtmpfsではファイル書き込みに必要なのはディスクじゃなくメモリなわけで、
こういう状況でOOM-killer以外に何が出来るか。
という状況なのよ。

で、現在のLinux kernelでは当該プロセスをSIGBUSで殺すという方針にしてるみたい。
前述の shmem.c#shmem_acct_block()のコメントを引用すると


/*
* ... whereas tmpfs objects are accounted incrementally as
* pages are allocated, in order to allow huge sparse files.
* shmem_getpage reports shmem_acct_block failure as -ENOSPC not -ENOMEM,
* so that a failure on a sparse tmpfs mapping will give SIGBUS not OOM.
*/



と書いてある(し、実際のコードもそうなっている)
他人が死ぬぐらいなら、自爆スイッチ押すぜ!ってわけだね。
ううむ、ブシドーだね。


という訳で、ここまで理由をかくと、まあ、分からんでもないな。となるのであるが、
実際の運用を考えるとSIGBUSで死なれて嬉しい状況なんて無いわけでかなり注意しないと
overcommit_memory=2 の時はtmpfsは使わずにrdデバイスに普通のFS作ったほうが
安心度が高まるかもしれない。

という、話でした。まる


自爆スイッチ
ポチっとな! ランキング!

このエントリーをはてなブックマークに追加

Amazon様からもらったアフィリ料金でブログスフィアでよくネタにされている涼宮ハルヒの憂鬱を読んでみた(1巻だけ)
なんか、普通のラノベ・・・
何が人気なのか理解できないまま読了。

ところで、作中では朝比奈みくるが萌えキャラとして勧誘されてきたと書かれているのに、ブログで人気なのは長門有希が大人気なのは何故なんだぜ?

誰か作品とか、キャラとかの魅力を解説してorz


涼宮ハルヒの憂鬱
涼宮ハルヒの憂鬱
  • 発売元: 角川書店
  • レーベル: 角川書店
  • スタジオ: 角川書店
  • メーカー: 角川書店
  • 価格: ¥ 540
  • 発売日: 2003/06
  • 売上ランキング: 126
  • おすすめ度 4.0

このエントリーをはてなブックマークに追加

↑このページのトップヘ