[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 メーリングリストの案内