[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
JFFS2 problems
Hi, all.
We are evaluating for JFFS2 to apply to Consumer Electric
Appliances. We use Innovator as a reference model. Please
see below for informations of the Innovator HW spec.
CPU :168MHz
Mem :32MB
TC :98MHz
F-ROM :32MB (NOR, Intel)
JFFS2 :linux/fs/jffs2/TODO - v 1.9
(I'm not sure the version, because files are
only discribed cvs versions...)
Especially, we are testing about Wareleveling for JFFS2. As
a result of these evaluations, we found some problems
described below.
*** 1. Mount time ***
<problem>
- It's important for Consumer Electric Appliances to
reduce boot time. Mount time is one of them. JFFS2
spends a lot of time, because of scanning these
all partitions.
<sujestion>
+ To avoid scanning all partitions, all data which
are related to JFFS2 on RAM are backuped to ROM
only when the OS halted correctly. Otherwise, when
the OS halted unuseally, scanning all JFFS2
partitions occur, like the current JFFS2.
*** 2. GC algorithm ***
<problem>
- The block which will be garbage collected, depends
on probability, which is defined by
jffs2_find_gc_block(), like following.
<probability> <selected list>
50/128 erasable_list
60/128 very_dirty_list
16/128 dirty_list
otherwise clean_list
dirty_list
...
If erasable_list, very_dirty_list and dirty_list
are almost empty, it is difficult to get a
erasable block even if writable regions are existing
on the partition. For this case, the function almost
selects clean_list. This means the GC can't make a
erasable block and this leads the write throughput
fall.
<sujestion>
+ I think jffs2_find_gc_block() should not touch the
clean_list. This function concentrates on
increasing erasable blocks. Rotating, like moving a
clean block to an other block, should be processed
by the init process on some other timing, for
example.
*** 3. Difficulty of estimating the avalable size ***
<problem>
- It is difficult to evaluate if the specification
of a CE appliance equipment is sufficient, because
writing size is different case by case , although
same contents files are written to a JFFS2
partition. This is caused by following reasons.
# All nodes include inode information and we
can't care about how many nodes are made. We
can't estimate how many same inodes are needed
in the ROM, because the number of nodes for the
file can't be predicted.
# If we have situations like overwriting files
partially, overlapped region is created between
the previous node and the new node. The region
of the previous node can't be used as a writable
region, because that node is not completely
obsolete.
<suggestion>
+ Node size is defined constantly, for example 512B.
So we don't need to care about obsolete nodes,
don't need fraglist struct and we can estimate the
size we need when a data is written.
I hope I'll get some opinions of this JFFS2 community.
regards.
To unsubscribe from this list: send the line "unsubscribe jffs-dev" in
the body of a message to majordomo@xxxxxxx.com