[Armadillo:03348] Re: NAND上のファイルへのlsに時間がかかります
fukunaga
email@hidden
2008年 8月 28日 (木) 15:21:41 JST
福長です。(長文ですみません)
At 18:20 08/08/27, yashi wrote:
>上記だと、秒間10回書けないみたいです。100万回書くにはCじゃなきゃだめか
>な? C版だとどれくらいで 1万回書けました?
1万回は計測していませんが、10万回を1分30秒くらいで書きました。
(本当にNANDにフラッシュしているのかちょっと疑問。。)
>どこまでファイルが必要か、わかりませんか?たとえば大きなファイルがある
>とファイル一枚でもだめとか。なぜこんな質問をするかと言うと、
>100万回という書き込み回数の場合、wear-levellingのアルゴリズムが動くの
>ではないかと思っているからです。
昨日は複雑なディレクトリ構成で行ったのですが、今日は単に
2つのファイルのみある状態でやってみました。
すると、昨日と同様の現象が確認されました。(下記実験ログ参照)
ディレクトリ構成は不要で、2.7M程度のファイルがあると再現しました。
テストファイル(test1)のみおいて実行しても再現しないので、ある程度
大きなファイルが必要なようです。
>もしかすると、完全にGCされていないんじゃないでしょうか?
>test.csvを移動すると、どうなります?移動のときに mvではなくて以下のコ
>マンドで移動してみてください。
>
> $ mv test.csv test.orig
> $ cat test.orig > test.csv
> $ rm test.orig
>
>この後に lsするとどうなりますか?
実行しました。するとGCが働くのか、マウント直後のUsedサイズが小さくなり、
52秒だったlsが3秒になりました!!
ただ、その後アンマウント・マウントを繰り返しても変化はありませんでした。
書き込んだことでGCが動作起動されたように見えます。
また、上記<移動>操作を再度行ったのですが、その後はあまり変わりませんでした。
> > ちなみにループを100万回実行すると、1時間かかってもlsが返って
> > こなくなりました。
>
>100万回の書き換えって、なかなか厳しいですね。(^^;
渡辺さんにも指摘されたように、消去回数を考えると問題ですが、
とりあえず、原因究明のためということで。。。
---------------------------------------以下、実験のログ 2008.08.28
メーリングリストのyoshiさんからアドバイスを実行してみる。
・まず電源投入後、/mnt/nandを作成してマウント。
[email@hidden (ttyAM0) /]# time mount -t jffs2 /dev/mtdblock4 /mnt/nand
real 0m 4.90s
user 0m 0.02s
sys 0m 4.88s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5850 1800 76% /
/dev/mtdblock4 262144 11076 251068 4% /mnt/nand
[email@hidden (ttyAM0) /]# time ls -lhaR /mnt/nand/
(中略)
real 0m 52.02s
user 0m 0.16s
sys 0m 49.06s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5850 1800 76% /
/dev/mtdblock4 262144 9228 252916 4% /mnt/nand
昨日と変わらず。マウント後のlsには52秒かかる。
・yoshiさんに言われた<移動>をやってみる。
[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 4.81s
user 0m 0.01s
sys 0m 4.80s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5850 1800 76% /
/dev/mtdblock4 262144 9308 252836 4% /mnt/nand
[email@hidden (ttyAM0) /]# time ls -lhaR /mnt/nand/
(中略)
real 0m 3.70s
user 0m 0.16s
sys 0m 2.45s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5850 1800 76% /
/dev/mtdblock4 262144 9228 252916 4% /mnt/nand
なんと、3秒でいけた。マウント直後のUsedも小さくなっている。
書込みを行ったことで、GCが行われた?
・再度アンマウントしてマウントしてみる。
[email@hidden (ttyAM0) /mnt/nand]# cd /;umount /mnt/nand
[email@hidden (ttyAM0) /]# time mount -t jffs2 /dev/mtdblock4 /mnt/nand
real 0m 4.81s
user 0m 0.00s
sys 0m 4.81s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5850 1800 76% /
/dev/mtdblock4 262144 9308 252836 4% /mnt/nand
[email@hidden (ttyAM0) /]# time ls -lhaR /mnt/nand/
(中略)
real 0m 3.68s
user 0m 0.16s
sys 0m 2.40s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5850 1800 76% /
/dev/mtdblock4 262144 9228 252916 4% /mnt/nand
Usedは変化なし。
・再度<移動>をやってみる。
[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) /]#
[email@hidden (ttyAM0) /]# time mount -t jffs2 /dev/mtdblock4 /mnt/nand
real 0m 4.63s
user 0m 0.00s
sys 0m 4.63s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5850 1800 76% /
/dev/mtdblock4 262144 9312 252832 4% /mnt/nand
[email@hidden (ttyAM0) /]# time ls -lhaR /mnt/nand/
(中略)
real 0m 3.69s
user 0m 0.16s
sys 0m 2.46s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5850 1800 76% /
/dev/mtdblock4 262144 9232 252912 4% /mnt/nand
今度はls前後のUsedが共に若干増えている。
===============================================================
イレーズする。flash_eraseall
===============================================================
・テストプログラムとtarファイル(2.7M)をコピー
[email@hidden (ttyAM0) /mnt/nand]# time ls -l
-rwxr--r-- 1 1003 1004 2783203 Aug 28 14:00 release.tar.gz
-rwxr-xr-x 1 1003 1004 9990 Aug 26 17:11 test1
real 0m 0.03s
user 0m 0.01s
sys 0m 0.02s
<10万回>
・10万回書いてみる
・実行直後のlsは速い
[email@hidden (ttyAM0) /mnt/nand]# time ls -lhaR /mnt/nand/
/mnt/nand/:
drwxr-xr-x 3 root root 0 Aug 28 14:32 .
drwxr-xr-x 3 root root 1.0k Aug 28 13:41 ..
-rwxr--r-- 1 1003 1004 2.7M Aug 28 14:00 release.tar.gz
-rw-rw-r-- 1 root root 10 Aug 28 14:33 test.csv
-rwxr-xr-x 1 1003 1004 9.8k Aug 26 17:11 test1
real 0m 0.03s
user 0m 0.01s
sys 0m 0.02s
・アンマウントして再度マウント
[email@hidden (ttyAM0) /]# time mount -t jffs2 /dev/mtdblock4 /mnt/nand
real 0m 4.85s
user 0m 0.01s
sys 0m 4.84s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5851 1799 76% /
/dev/mtdblock4 262144 10980 251164 4% /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 Aug 28 13:41 ..
-rwxr--r-- 1 1003 1004 2.7M Aug 28 14:00 release.tar.gz
-rw-rw-r-- 1 root root 10 Aug 28 14:33 test.csv
-rwxr-xr-x 1 1003 1004 9.8k Aug 26 17:11 test1
real 1m 14.19s
user 0m 0.00s
sys 1m 12.53s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5851 1799 76% /
/dev/mtdblock4 262144 8824 253320 3% /mnt/nand
lsするのに1分以上かかった。
ディレクトリはなくてもファイルがあるだけで、遅くなる。
昨日は10万回では14秒だったが、これはマウントとlsを連続して
行わなかったので、その分小さな値となったと思われる。
・再度アンマウントしてマウントする。
[email@hidden (ttyAM0) /]# cd /;umount /mnt/nand
[email@hidden (ttyAM0) /]# time mount -t jffs2 /dev/mtdblock4 /mnt/nand
real 0m 3.91s
user 0m 0.01s
sys 0m 3.90s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5851 1799 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 Aug 28 13:41 ..
-rwxr--r-- 1 1003 1004 2.7M Aug 28 14:00 release.tar.gz
-rw-rw-r-- 1 root root 10 Aug 28 14:33 test.csv
-rwxr-xr-x 1 1003 1004 9.8k Aug 26 17:11 test1
real 0m 2.26s
user 0m 0.01s
sys 0m 2.24s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5851 1799 76% /
/dev/mtdblock4 262144 8824 253320 3% /mnt/nand
mount直後のUsedが前回より小さくなっており、lsの時間も2秒になった。
昨日と同じ傾向。
・再度アンマウントしてマウントする。
[email@hidden (ttyAM0) /]# cd /;umount /mnt/nand
[email@hidden (ttyAM0) /]# time mount -t jffs2 /dev/mtdblock4 /mnt/nand
real 0m 3.91s
user 0m 0.01s
sys 0m 3.90s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5851 1799 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 Aug 28 13:41 ..
-rwxr--r-- 1 1003 1004 2.7M Aug 28 14:00 release.tar.gz
-rw-rw-r-- 1 root root 10 Aug 28 14:33 test.csv
-rwxr-xr-x 1 1003 1004 9.8k Aug 26 17:11 test1
real 0m 2.71s
user 0m 0.02s
sys 0m 1.06s
[email@hidden (ttyAM0) /]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 8059 5851 1799 76% /
/dev/mtdblock4 262144 8824 253320 3% /mnt/nand
前回と変わりなし。これも昨日と同じ傾向。
---------------------------------------実験のログ ここまで
armadillo メーリングリストの案内