jffs2 copy too long after mounting
hi All
my kernel is 2.6.16
after mounting the nand flash with jffs2 partition, the first copy operation for a 15M file(from jffs2 partition to jffs2 partition) take 9 minutes,but the
second copy operation takes 1 minutes.
the disk usage(df result) is over 85%.
I wonder is there any patch ported to such old kernel?
Thanks
B.R.
Jia
Quoted 10 lines · hejianet
hi All
my kernel is 2.6.16
after mounting the nand flash with jffs2 partition, the first copy operation for a 15M file(from jffs2 partition to jffs2 partition) take 9 minutes,but the
second copy operation takes 1 minutes.
the disk usage(df result) is over 85%.
I wonder is there any patch ported to such old kernel?
Thanks
Quoted 8 lines
B.R.
Jia______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
besides, how to search all the archives of linux-mtd?
http://lists.infradead.org/pipermail/linux-mtd/ is a link, but it couldn't be searched totally by date. I have review all pages month by month :(
Quoted 10 lines · hejianet
hi All
my kernel is 2.6.16
after mounting the nand flash with jffs2 partition, the first copy operation for a 15M file(from jffs2 partition to jffs2 partition) take 9 minutes,but the
second copy operation takes 1 minutes.
the disk usage(df result) is over 85%.
I wonder is there any patch ported to such old kernel?
Thanks
Quoted 10 lines
B.R.
Jia______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
Is there anyway to show the summary result of jffs2's fragmentation? Is there anyway to manually make defragmentation?
Thanks
Jia
Quoted 4 lines · hejianet
besides, how to search all the archives of linux-mtd?
http://lists.infradead.org/pipermail/linux-mtd/ is a link, but it couldn't be searched totally by date. I have review all pages month by month :(
You can do a search of this particular archive using a third-party search engine, although you may not get results sorted by date. For example, with Google, just include the following in your search term:
site:lists.infradead.org/pipermail/linux-mtd
Also, there are other archives that track the same mailing list. For example, gmane has a pretty good interface for search or threaded browsing:
http://dir.gmane.org/gmane.linux.drivers.mtd
(Try "search the list" or browse with the various options, like "On the web, using frames and threads")
Hope that helps.
Brian
Quoted 2 lines · hejianet
Is there anyway to show the summary result of jffs2's fragmentation? Is there anyway to manually make defragmentation?
I'm not a JFFS2 expert, but I don't believe fragmentation really is an issue in quite the same way as in spinning-disk, block storage filesystems like FAT. Access time to all blocks on an MTD is uniform.
Also, I quite doubt there is a tool that displays the low-level details of file/block mapping.
Regards,
Brian
Thanks, Brian
Here is my latest investigation on the copy_too_long_time issue:
I defined the log level of jffs2 as "noisy",and inserted timestamp for each jffs2 printk log.
I watched that, there are more lines of such printk compared to good case.(bad case is first copy, takes 9 minutes, good case is second copy, takes 1 minute)
1344387878.230899000:<7>Check potential deletion dirent at 0081aad8 1344387878.233899000:<7>Check potential deletion dirent at 00819960 1344387878.236899000:<7>Check potential deletion dirent at 00819388 1344387878.239899000:<7>Check potential deletion dirent at 00818d5c 1344387878.242899000:<7>Check potential deletion dirent at 00818a7c 1344387878.245899000:<7>Check potential deletion dirent at 008141d0 1344387878.248899000:<7>Check potential deletion dirent at 0080e9a0 1344387878.251899000:<7>Check potential deletion dirent at 0080defc 1344387878.254899000:<7>Check potential deletion dirent at 0080dc8c
Thanks for any suggestions or instructions.
kernel version:2.6.16
attached the full logs.
Quoted 18 lines · Brian Norris
Quoted 2 lines · hejianet
Is there anyway to show the summary result of jffs2's fragmentation? Is there anyway to manually make defragmentation?
I'm not a JFFS2 expert, but I don't believe fragmentation really is an issue in quite the same way as in spinning-disk, block storage filesystems like FAT. Access time to all blocks on an MTD is uniform.
Also, I quite doubt there is a tool that displays the low-level details of file/block mapping.
Regards,
Brian______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
Quoted 8 lines · hejianet
hi All
my kernel is 2.6.16
after mounting the nand flash with jffs2 partition, the first copy operation for a 15M file(from jffs2 partition to jffs2 partition) take 9 minutes,but the
second copy operation takes 1 minutes.
the disk usage(df result) is over 85%.
I wonder is there any patch ported to such old kernel?
His is because how JFFS2 is designed. When the mount operation is finished, JFFS2 does not really finish mounting. There is the background process which keeps working - it basically reads all files in the system and checks the CRC, which is needed to find out which nodes are new and which are obsolete.
So what happens is that you mount JFFS2, the background thread keeps working (see 'top' for example).
While the background thread works, you can read files. But you cannot write - writes will be blocked. Well, it is a bit more complex - you can write a little, but from some point your writes will be blocked until the background thread finishes. Then the write will continue and finish.
In you case, you mount, start writing your 15MiB file, write gets blocked, waits for the background thread, then continues write. The background thread takes ages to finish on big partitions.
The second write is fast because you do not wait for the background thread any longer.
Signature · 2 lines
Best Regards, Artem Bityutskiy
Hi Artem, thanks for your reply
Now I can reproduce it after 2-3 days stress tests:
1.just do lots of small writing(4k bytes each time) radomly in one of 1000
thousand file
2.remove the 1000 files,now the jffs2 fs is *very* dirty.
3.I dynamically increase the threshold nr_free_blocks to trigger the gc in jffs2_thread_should_wake():
if (c->nr_free_blocks + c->nr_erasing_blocks < c->resv_blocks_gctrigger &&
(dirty > c->nospc_dirty_size))
ret = 1;4. I watched after a while, there were tens of thousands of lines (I enable the jffs2 log level to be 1)
Check potential deletion dirent at 008ddd24
Check potential deletion dirent at 008ddcf4
Check potential deletion dirent at 008ddcc4
Check potential deletion dirent at 008ddc68
Check potential deletion dirent at 008dca34
Check potential deletion dirent at 008dca04
Check potential deletion dirent at 0088d77c
Check potential deletion dirent at 0088d74c
Check potential deletion dirent at 0088d71c
Check potential deletion dirent at 0088d6ec
Check potential deletion dirent at 0088d6bc
Check potential deletion dirent at 0088c648
Check potential deletion dirent at 0088c618
Check potential deletion dirent at 0088c2a8
Check potential deletion dirent at 0088c278
Check potential deletion dirent at 0088c248
Check potential deletion dirent at 0088c218
Check potential deletion dirent at 0088c1e8
Check potential deletion dirent at 00886b50
Check potential deletion dirent at 00885388
Check potential deletion dirent at 00885358
Check potential deletion dirent at 008852a8
Check potential deletion dirent at 00885278
5. I did find that the free blocks number of jffs2 is very slowly increased
So could you give me any ideas, it is normal or abnormal? Thanks a lot
Quoted 30 lines · Artem Bityutskiy
Quoted 8 lines · hejianet
hi All
my kernel is 2.6.16
after mounting the nand flash with jffs2 partition, the first copy operation for a 15M file(from jffs2 partition to jffs2 partition) take 9 minutes,but the
second copy operation takes 1 minutes.
the disk usage(df result) is over 85%.
I wonder is there any patch ported to such old kernel?His is because how JFFS2 is designed. When the mount operation is finished, JFFS2 does not really finish mounting. There is the background process which keeps working - it basically reads all files in the system and checks the CRC, which is needed to find out which nodes are new and which are obsolete.
So what happens is that you mount JFFS2, the background thread keeps working (see 'top' for example).
While the background thread works, you can read files. But you cannot write - writes will be blocked. Well, it is a bit more complex - you can write a little, but from some point your writes will be blocked until the background thread finishes. Then the write will continue and finish.
In you case, you mount, start writing your 15MiB file, write gets blocked, waits for the background thread, then continues write. The background thread takes ages to finish on big partitions.
The second write is fast because you do not wait for the background thread any longer.
Quoted 2 lines · hejianet
Hi Artem, thanks for your reply
Now I can reproduce it after 2-3 days stress tests:
You should use perf or oprofile and find out where the kernel actually spends time. Logs is not the best source of information in this case.
Signature · 2 lines
Best Regards, Artem Bityutskiy