[Armadillo:03365] Re: NAND上のファイルへのlsに時間がかかります

fukunaga email@hidden
2008年 9月 2日 (火) 15:34:12 JST


福長です。

SHOJIさん、ありがとうございます。
NANDをうまく使えるように工夫が必要ということですね。。。

皆様の助言により、NANDの使用にあたって、以下のような注意及び
回避方法を採用するようにしました。

・RAMに置けるファイルはRAMに置く
・プログラムでのファイル書込みはなるべく大きなバッファで書き出す
・繰返し書込みのあるファイルは、アンマウント前に(移動)する
・(移動)は
	mv test.csv test.orig
	cat test.orig > test.csv
	rm test.orig
 のように行い、一旦元ファイルが削除されるようにする。
 (play-back情報をクリアするため)
・NAND上の不要な一時ファイルなどはアンマウントの前に削除する


DBファイルなど、どうしてもRAMに置けないものもあるので
アンマウント前の(移動)で対応しようと思います。

動作検証のため、以下のテストを行いました。
100万回書いた後も、アンマウント前に(移動)すると2秒でls
できました。

ファイルサイズが大きい場合も最初のアクセスに時間がかかって
しまいますが、これは仕方ないですね。


-----------------------------------------------以下実験ログ

===============================================================
イレーズする。flash_eraseall
===============================================================
・はじめ
	[email@hidden (ttyAM0) /home/www-data/storage]# time mount -t jffs2 
/dev/mtdblock4 /mnt/nand
	real    0m 2.73s
	user    0m 0.01s
	sys     0m 2.72s

・test1 と release.tar.gz を /mnt/nand にコピーする。

<10万回  1回目>
・10万回書いてみる

・<移動>する
	[email@hidden (ttyAM0) /mnt/nand]# mv test.csv test.orig
	[email@hidden (ttyAM0) /mnt/nand]# cat test.orig > test.csv
	[email@hidden (ttyAM0) /mnt/nand]# rm test.orig

・アンマウントしてマウント
	[email@hidden (ttyAM0) /mnt/nand]# cd /;umount /mnt/nand
	[email@hidden (ttyAM0) /]# time mount -t jffs2 /dev/mtdblock4 /mnt/nand
	real    0m 5.00s
	user    0m 0.01s
	sys     0m 4.93s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5852      1798  76% /
	/dev/mtdblock4          262144      8876    253268   3% /mnt/nand
	[email@hidden (ttyAM0) /]# time ls -lhaR /mnt/nand/
	/mnt/nand/:
	drwxr-xr-x    3 root     root            0 Jan  1  1970 .
	drwxr-xr-x    3 root     root         1.0k Sep  2 13:03 ..
	-rwxr-xr-x    1 root     root         2.7M Sep  2 13:16 release.tar.gz
	-rw-rw-r--    1 root     root           10 Sep  2 13:20 test.csv
	-rwxr-xr-x    1 root     root         9.8k Sep  2 13:15 test1
	real    0m 3.19s
	user    0m 0.01s
	sys     0m 0.53s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5852      1798  76% /
	/dev/mtdblock4          262144      8812    253332   3% /mnt/nand

	をを!3秒だ。結構早いね。

<10万回  2回目>
・10万回書いてみる

・test.csvを削除する
	[email@hidden (ttyAM0) /mnt/nand]# rm test.csv

・アンマウントしてマウント
	[email@hidden (ttyAM0) /]# time mount -t jffs2 /dev/mtdblock4 /mnt/nand
	real    0m 4.77s
	user    0m 0.00s
	sys     0m 4.76s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5852      1798  76% /
	/dev/mtdblock4          262144      8800    253344   3% /mnt/nand
	[email@hidden (ttyAM0) /]# time ls -lhaR /mnt/nand/
	/mnt/nand/:
	drwxr-xr-x    3 root     root            0 Jan  1  1970 .
	drwxr-xr-x    3 root     root         1.0k Sep  2 13:03 ..
	-rwxr-xr-x    1 root     root         2.7M Sep  2 13:16 release.tar.gz
	-rwxr-xr-x    1 root     root         9.8k Sep  2 13:15 test1
	real    0m 2.22s
	user    0m 0.01s
	sys     0m 0.53s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5852      1798  76% /
	/dev/mtdblock4          262144      8752    253392   3% /mnt/nand

	ふむ。2秒。速いね。

<10万回  3回目>
・10万回書いてみる

・コピーする
	[email@hidden (ttyAM0) /mnt/nand]# cp test.csv test.orig
	[email@hidden (ttyAM0) /mnt/nand]# rm test.csv
	[email@hidden (ttyAM0) /mnt/nand]# mv test.orig test.csv

・アンマウントしてマウント
	[email@hidden (ttyAM0) /]# time mount -t jffs2 /dev/mtdblock4 /mnt/nand
	real    0m 5.56s
	user    0m 0.00s
	sys     0m 5.54s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5852      1798  76% /
	/dev/mtdblock4          262144      8920    253224   3% /mnt/nand
	[email@hidden (ttyAM0) /]# time ls -lhaR /mnt/nand/
	/mnt/nand/:
	drwxr-xr-x    3 root     root            0 Jan  1  1970 .
	drwxr-xr-x    3 root     root         1.0k Sep  2 13:03 ..
	-rwxr-xr-x    1 root     root         2.7M Sep  2 13:16 release.tar.gz
	-rw-rw-r--    1 root     root           10 Sep  2 13:34 test.csv
	-rwxr-xr-x    1 root     root         9.8k Sep  2 13:15 test1
	real    0m 1.82s
	user    0m 0.01s
	sys     0m 1.75s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5852      1798  76% /
	/dev/mtdblock4          262144      8820    253324   3% /mnt/nand

	はやいね。

<10万回  4回目>
・10万回書いてみる

・<移動するだけ>
	[email@hidden (ttyAM0) /mnt/nand]# mv test.csv test.orig
	[email@hidden (ttyAM0) /mnt/nand]# mv test.orig test.csv

・アンマウントしてマウント
	[email@hidden (ttyAM0) /]# time mount -t jffs2 /dev/mtdblock4 /mnt/nand
	real    0m 5.40s
	user    0m 0.01s
	sys     0m 5.38s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5852      1798  76% /
	/dev/mtdblock4          262144     10996    251148   4% /mnt/nand
	[email@hidden (ttyAM0) /]# time ls -lhaR /mnt/nand/
	/mnt/nand/:
	Command terminated by signal 2
	real    1m 14.55s
	user    0m 0.01s
	sys     1m 12.68s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5852      1798  76% /
	/dev/mtdblock4          262144      8768    253376   3% /mnt/nand

	途中でCTRL+C?を押してしまって、lsが途中でとまったが、
	それでも1分14秒かかっている。やはり、mvだけではだめなんだ。

===============================================================
イレーズする。flash_eraseall
===============================================================
・test1 と release.tar.gz を /mnt/nand にコピーする。

<50万回  1回目>
・50万回書いてみる

・<移動>する
	[email@hidden (ttyAM0) /mnt/nand]# mv test.csv test.orig
	[email@hidden (ttyAM0) /mnt/nand]# cat test.orig > test.csv
	[email@hidden (ttyAM0) /mnt/nand]# rm test.orig

・アンマウントしてマウント
	[email@hidden (ttyAM0) /]# time mount -t jffs2 /dev/mtdblock4 /mnt/nand
	real    0m 8.08s
	user    0m 0.01s
	sys     0m 8.07s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5852      1798  76% /
	/dev/mtdblock4          262144      8820    253324   3% /mnt/nand
	[email@hidden (ttyAM0) /]# time ls -lhaR /mnt/nand/
	/mnt/nand/:
	drwxr-xr-x    3 root     root            0 Jan  1  1970 .
	drwxr-xr-x    3 root     root         1.0k Sep  2 13:03 ..
	-rwxr-xr-x    1 root     root         2.7M Sep  2 13:45 release.tar.gz
	-rw-rw-r--    1 root     root           10 Sep  2 13:54 test.csv
	-rwxr-xr-x    1 root     root         9.8k Sep  2 13:44 test1
	real    0m 1.83s
	user    0m 0.01s
	sys     0m 1.69s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5852      1798  76% /
	/dev/mtdblock4          262144      8820    253324   3% /mnt/nand

	マウント時間が8秒は長いけど、その後のlsは1.8秒でいけてるのでOK。

===============================================================
イレーズする。flash_eraseall
===============================================================
・test1 と release.tar.gz を /mnt/nand にコピーする。

<100万回  1回目>
・100万回書いてみる

・<移動>する
	[email@hidden (ttyAM0) /mnt/nand]# mv test.csv test.orig
	[email@hidden (ttyAM0) /mnt/nand]# cat test.orig > test.csv
	[email@hidden (ttyAM0) /mnt/nand]# rm test.orig

	[email@hidden (ttyAM0) /mnt/nand]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5852      1798  76% /
	/dev/mtdblock4          262144      8808    253336   3% /mnt/nand

・アンマウントしてマウント
	[email@hidden (ttyAM0) /mnt/nand]# cd /;umount /mnt/nand
	[email@hidden (ttyAM0) /]# time mount -t jffs2 /dev/mtdblock4 /mnt/nand
	real    0m 12.74s
	user    0m 0.01s
	sys     0m 12.73s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5852      1798  76% /
	/dev/mtdblock4          262144      8932    253212   3% /mnt/nand
	[email@hidden (ttyAM0) /]# time ls -lhaR /mnt/nand/
	/mnt/nand/:
	drwxr-xr-x    3 root     root            0 Jan  1  1970 .
	drwxr-xr-x    3 root     root         1.0k Sep  2 13:03 ..
	-rwxr-xr-x    1 root     root         2.7M Sep  2 13:59 release.tar.gz
	-rw-rw-r--    1 root     root           10 Sep  2 14:17 test.csv
	-rwxr-xr-x    1 root     root         9.8k Sep  2 13:59 test1
	real    0m 2.27s
	user    0m 0.02s
	sys     0m 0.51s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5852      1798  76% /
	/dev/mtdblock4          262144      8808    253336   3% /mnt/nand

	をを、すばらしい2秒だわ!! マウントには12秒かかるけど。


===============================================================
大きなファイルがある場合のテスト
===============================================================
===============================================================
イレーズする。flash_eraseall
===============================================================
・test1 と big_file_160M を /mnt/nand にコピーする。

	[email@hidden (ttyAM0) /mnt/nand]# time cp /home/www-data/storage/big_file_160M ./
	real    7m 16.35s
	user    0m 0.32s
	sys     7m 7.70s

	コピーするのに7分もかかった。(コピー元はUSB)

・コピー直後
	[email@hidden (ttyAM0) /mnt/nand]# time ls -lhaR /mnt/nand/
	/mnt/nand/:
	drwxr-xr-x    3 root     root            0 Sep  2 14:23 .
	drwxr-xr-x    3 root     root         1.0k Sep  2 13:03 ..
	-rwxr-xr-x    1 root     root       159.6M Sep  2 14:30 big_file_160M
	-rwxr-xr-x    1 root     root         9.8k Sep  2 14:22 test1
	real    0m 0.03s
	user    0m 0.02s
	sys     0m 0.02s

	[email@hidden (ttyAM0) /mnt/nand]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5853      1797  77% /
	/dev/mtdblock4          262144    167432     94712  64% /mnt/nand

・アンマウントしてマウント

	[email@hidden (ttyAM0) /mnt/nand]# cd /;umount /mnt/nand
	[email@hidden (ttyAM0) /]# time mount -t jffs2 /dev/mtdblock4 /mnt/nand
	real    1m 7.10s
	user    0m 0.00s
	sys     1m 6.94s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5853      1797  77% /
	/dev/mtdblock4          262144    167548     94596  64% /mnt/nand
	[email@hidden (ttyAM0) /]# time ls -lhaR /mnt/nand/
	/mnt/nand/:
	drwxr-xr-x    3 root     root            0 Jan  1  1970 .
	drwxr-xr-x    3 root     root         1.0k Sep  2 13:03 ..
	-rwxr-xr-x    1 root     root       159.6M Sep  2 14:30 big_file_160M
	-rwxr-xr-x    1 root     root         9.8k Sep  2 14:22 test1
	real    3m 7.63s
	user    0m 0.01s
	sys     3m 7.19s
	[email@hidden (ttyAM0) /]# df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/ram0                 8059      5853      1797  77% /
	/dev/mtdblock4          262144    167428     94716  64% /mnt/nand

	マウントに1分7秒、lsに3分7秒もかかる。
	大きなファイルがあると、どうしても遅くなるのはしかたないらしい。

以上 




armadillo メーリングリストの案内