LF Japan Jamboree #63

2017年12月1日のまとめ。
0
まさみさんboosted @mhiramat

NoMMU環境でOOM killerが発生したという報告が来ないからOOM reaperは導入されていない。 #celfjp

2017-12-01 14:30:11
まさみさんboosted @mhiramat

Linux v4.6でOOM reaperというのが導入され、OOM killerで殺されるプロセスが死ぬ前にそのプロセスのメモリを強制的に刈り取る仕組みが出来た。 #celfjp

2017-12-01 14:28:57
まさみさんboosted @mhiramat

timeoutベースのやり方では問題を根本解決しないということで、どういう条件でHangupするかというのを洗い出したら、更に多くの問題が発見された #celfjp

2017-12-01 14:27:44
まさみさんboosted @mhiramat

これを起こすには簡単で、OOM killerが動くときにファイルIOを行っていたら、システムがハングアップする。これは偶然起きてしまう。 #celfjp

2017-12-01 14:25:29
まさみさんboosted @mhiramat

lwn.net/Articles/62741… ここに問題が書いてある。32KB以下のメモリ割り当て要求は内部で無限にリトライをしているが、限界ギリギリのところでこれが起きると、OOM killerも先に動かない #celfjp

2017-12-01 14:24:06
まさみさんboosted @mhiramat

メモリ割り当てとファイル書き込みを両方共同時に動かした→実際にシステムがハングアップした #celfjp

2017-12-01 14:22:00
まさみさんboosted @mhiramat

まずいのは、GFP_KERNEL/GFP_NOFS/GFP_NOIOの全部が同じメモリ不足の制限値を使っている。つまりGFP_KERNELがメモリ不足になったのでGFP_NOFSで回収処理を走らせると、これも止まってしまって全部とまる #celfjp

2017-12-01 14:21:23
まさみさんboosted @mhiramat

そこでOOM killerがプロセスを殺す際には、予約メモリを使ってもいいことにしていた。 #celfjp

2017-12-01 14:18:52
まさみさんboosted @mhiramat

何か処理をするときには、メモリ割り当て要求が必要になる場合が多い。OOM killerがプロセスを殺そうとしたら、その殺す処理にもメモリの一時割当が必要になる。#celfjp

2017-12-01 14:18:18
まさみさんboosted @mhiramat

GFP_NOIOやGFP_NOFSなど、カーネル内部で処理するIO関係の処理で使われるメモリ割り当て要求は、OOM killerが発動しないはず。何故ならIOが止まってしまうとメモリ回収が先に進まなくなる可能性があるため。#celfjp

2017-12-01 14:16:34
まさみさんboosted @mhiramat

カーネルのGFPフラグは使い方を間違えるとデッドロックする。しかも使い方を間違っているところもよくある。そして色んな所でメモリ割り当てが失敗することを想定していない #celfjp

2017-12-01 14:14:41
まさみさんboosted @mhiramat

kmemcgでの緩和策が、実は対策できていなかった。メタデータだけを管理していて、パイプのデータバッファメモリは管理してなかった。 #celfjp

2017-12-01 14:10:17
まさみさんboosted @mhiramat

ローカルな非特権ユーザが再現でき、有限の負荷で問題を発現させることにした→もっと闇が出てきた #celfjp

2017-12-01 14:08:39
まさみさんboosted @mhiramat

システムがDoS攻撃を受けているんだったら再起動しろ、と言われた #celfjp

2017-12-01 14:07:33
まさみさんboosted @mhiramat

RHEL7で試してみたら、OOMkillerが動く前にシステムフリーズしたりすることが分かった #celfjp

2017-12-01 14:06:56
まさみさんboosted @mhiramat

kmemcgを使えば緩和できるはずだが、古いカーネルでは使えない。#celfjp

2017-12-01 14:04:45
まさみさんboosted @mhiramat

パイプサイズを一つ辺り1MBまで増やせる→1プロセス辺り1K個のパイプ作れる→プロセス1つ辺り1GBまでパイプバッファ作れる→プロセスを増やすと一般ユーザでもメモリを使い尽くす #celfjp

2017-12-01 14:04:10
まさみさんboosted @mhiramat

OOM killerを発生させるには、メモリを割り当てて(オーバコミットして)、memsetしてしまえばいい #celfjp

2017-12-01 14:01:12
まさみさんboosted @mhiramat

組み込み用途でなければOOMは起きないから関心を惹かない #celfjp

2017-12-01 13:55:31
まさみさんboosted @mhiramat

まず問題が起きてもメモリ管理周りで問題が起きたということがない限り対応しない #celfjp

2017-12-01 13:55:08
まさみさんboosted @mhiramat

メモリ管理開発者の間では、問題が発生するまでは修正しない、ストレステストで発見したものについても対応しない、という考え方とのこと。#celfjp

2017-12-01 13:54:00
まさみさんboosted @mhiramat

mallocでシステムをハングアップさせるだって??つまりガチャピン先生が現れるわけですね #celfjp

2017-12-01 13:52:39
吉田@板橋 @koedoyoshida

#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