#blog2navi()
*Linuxでファイル追記は徐々に遅くなるって本当? [#bbd9ba58]
** Linuxでファイル追記は遅くなるといううわさ [#ccc26ffc]
某所で議論中にlinuxでファイル追記は徐々に遅くなるという話を聞いた。へーそーいうこともあるのかとその場では思ったが、あんまり納得感が無かったので、実験することにした。
実験環境は、、EC2スモール環境。pythonのlogger.info("hoge")みたいな感じで、ログイン後をファイルに書き出す(追記する)形で実験を行った。OSはCentOS6.3,ファイルシステムは、ext4を使用した。
*** 遅くなるの根拠 [#ec443e0e]
最初、遅くなるって言った根拠で考えたのは、linuxのメモリー管理で、cache(ファイルをメモリーにキャッシュしている)ページを使い果たすので、遅くなるのかなって言う根拠だった。
*** 実験結果 [#t8253bcd]
pythonでloggingモジュールを使って、4億行、12GB程度書き込んでみた。メモリーサイズは、1.5GB程度。その際の10万行書き込みごとの書き込み時間を比較した。
&ref(./test.png,70%);
大体、24秒で、安定していた。
平均、24.422,中央値24.356,標準偏差 0.28だった。
*** cache使い果たしても、速度低下は無い? [#o85b545c]
vmstatでメモリーの使用量を追ってみた。
linuxでcacheをクリアして、 # sysctl -w vm.drop_caches=3 して、cacheが徐々に増えてどうなるか観察した。cacheが徐々に増え、freeが減って、15mb位になった後は一定であった。
----------memory---------- -
swpd free buff cache
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
0 15 41 1456
最初のシナリオ、cacheの量に拠って、書き込みに速度低下が起こると言う原因は無くなった。
** 結論 [#f6079e96]
Linuxでファイル書き込みに量が増えると遅くなると言う現象は遭遇しなかった。
** 検証用のソースコード [#sb7164a8]
検証用のソースコードは、githubに上げている。以下のコードで検証した。
https://github.com/shibacow/misc_gocha/blob/master/linux_write_test/log_test.py
* 追記-logging.infoではなく、file.writeを使ってみた。 [#g1f8d60a]
元同僚から、fsyncが、遅くなることがあるのかと言う指摘を頂いたので調べてみた。
logging.info(msg)をlogging_file.write(msg);logging_file.flush()に変えて実験(要は、毎write毎に、flushさせるようにした。)
&ref(./test02.png,70%);
loggingに比べて、日付けを入れたりする処理が無くなったのか、だいぶ早くなった。日付けが無い分、logのファイルサイズも小さくなって、4GB程度になった。
10万行の処理に、平均、2.11,中央値2.06,標準偏差0.15の処理になった。
最後まで、遅くなることは無かった。
毎回flushしているので、ファイルサイズが巨大だからと言って、fsyncが遅くなることはなさそうだ。
修正箇所は、以下
https://github.com/shibacow/misc_gocha/commit/25638c8e31339d3bbaa83bca72215471d185b9eb#linux_write_test
RIGHT:Category: [[[UNIX>日記/Category/UNIX]]] - 17:49:21
----
RIGHT:&blog2trackback();
- 計測時間=ディスクに書き込んだ時間になっていますかね? logging.info(msg) のあとに、fsyncできてないのでは -- [[adachi_c]] &new{2012-10-20 (土) 21:26:45};
- あくまで、logging.info(msg)に書いた時間になってます。fsyncの時間は取ってないです。そこはライブラリにお任せしてました。 -- [[shibacow]] &new{2012-10-20 (土) 22:23:04};
#comment(above)
#blog2navi()