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