NoMMU環境でOOM killerが発生したという報告が来ないからOOM reaperは導入されていない。 #celfjp
2017-12-01 14:30:11Linux v4.6でOOM reaperというのが導入され、OOM killerで殺されるプロセスが死ぬ前にそのプロセスのメモリを強制的に刈り取る仕組みが出来た。 #celfjp
2017-12-01 14:28:57timeoutベースのやり方では問題を根本解決しないということで、どういう条件でHangupするかというのを洗い出したら、更に多くの問題が発見された #celfjp
2017-12-01 14:27:44これを起こすには簡単で、OOM killerが動くときにファイルIOを行っていたら、システムがハングアップする。これは偶然起きてしまう。 #celfjp
2017-12-01 14:25:29lwn.net/Articles/62741… ここに問題が書いてある。32KB以下のメモリ割り当て要求は内部で無限にリトライをしているが、限界ギリギリのところでこれが起きると、OOM killerも先に動かない #celfjp
2017-12-01 14:24:06まずいのは、GFP_KERNEL/GFP_NOFS/GFP_NOIOの全部が同じメモリ不足の制限値を使っている。つまりGFP_KERNELがメモリ不足になったのでGFP_NOFSで回収処理を走らせると、これも止まってしまって全部とまる #celfjp
2017-12-01 14:21:23何か処理をするときには、メモリ割り当て要求が必要になる場合が多い。OOM killerがプロセスを殺そうとしたら、その殺す処理にもメモリの一時割当が必要になる。#celfjp
2017-12-01 14:18:18GFP_NOIOやGFP_NOFSなど、カーネル内部で処理するIO関係の処理で使われるメモリ割り当て要求は、OOM killerが発動しないはず。何故ならIOが止まってしまうとメモリ回収が先に進まなくなる可能性があるため。#celfjp
2017-12-01 14:16:34カーネルのGFPフラグは使い方を間違えるとデッドロックする。しかも使い方を間違っているところもよくある。そして色んな所でメモリ割り当てが失敗することを想定していない #celfjp
2017-12-01 14:14:41kmemcgでの緩和策が、実は対策できていなかった。メタデータだけを管理していて、パイプのデータバッファメモリは管理してなかった。 #celfjp
2017-12-01 14:10:17パイプサイズを一つ辺り1MBまで増やせる→1プロセス辺り1K個のパイプ作れる→プロセス1つ辺り1GBまでパイプバッファ作れる→プロセスを増やすと一般ユーザでもメモリを使い尽くす #celfjp
2017-12-01 14:04:10OOM killerを発生させるには、メモリを割り当てて(オーバコミットして)、memsetしてしまえばいい #celfjp
2017-12-01 14:01:12セキュキャンの資料があります。i-love.sakura.ne.jp/The_OOM_CTF.ht… #celfjp
2017-12-01 13:57:57メモリ管理開発者の間では、問題が発生するまでは修正しない、ストレステストで発見したものについても対応しない、という考え方とのこと。#celfjp
2017-12-01 13:54:00#CELFJP 1MBストレージでLinuxを動かすネタについて質問が多く出ていた。 LinuxCon North America: Running Linux on Tiny Peripherals – by Marcel Holtmann • Got Linux to around 1MB for IOT sensor project 回答は詳しくはMarcelに聞いてねとのこと
2017-12-01 11:21:23