On Mon, 9 Feb 2009, Michael Schmidt wrote:
> Jim Jackson wrote:
>> On Mon, 9 Feb 2009, Alan Dayley wrote:
>>> The wear-leveling behavior you described here is known as "dynamic
>>> wear-leveling."
........
>>> As of a few years ago, a better algorithm has been deployed by most
>>> flash controller makers. This is known as "static wear-leveling" and
>>> includes ALL flash blocks, including those with static data. In
>>> static wear-leveling the writes are moved all around the flash media,
>>> even moving around previously written blocks of user data. This
>>> obviously improves the spread out of the wear on the flash.
>>
>> Thanks for this, I'd not come across static wear-leveling, but google
>> provides :-)
>>
>> It does of course imply added time for writes where there is lots of static
>> data.
>
> Well at first I was going to say that it would also seem to imply
> reduced overall flash lifetime, as internally the wear-leveler is doing
> additional erases and writes on blocks that otherwise would be left
> alone. But after running a simple thought experiment I can't see how it
> would even provide any better wear-leveling.
I thought that at first, but then I read this explanation...
http://www.storagesearch.com/siliconsys-art1.html
If a block holds Static data and hence hasn't been used much, the static
data is moved to a well used block and the data written to the
underused block. This moving spreads out the writes over the whole flash
device. However there is a penalty in increased writes overall, so it's a
trade off.
> For example, suppose you had a flash with only 4 blocks, and each has a
> lifetime of 10 writes. If 3 blocks are in use, then if you repeatedly
> re-write the 4th block it will wear out faster. Specifically, you will
> get 10 writes before the 4th block is worn out and (since there are only
> 4 blocks) the device is declared unusable. But if you erase other
> blocks does it really help? No, because whatever block you erase to
> write the 4th block, you now have to write into the 4th block. Now
> after 10 writes, two blocks will be bad instead of one.
>
> If only 2 blocks are in use, then alternating between blocks 3 and 4
> will give a total of 20 writes until the flash is full. But if you
> repeatedly erase block 1 or 2 in order to put the new block, you still
> have to put the contents of that block somewhere, either block 3 or 4.
> So now you get 30 writes, but 10 of those are writes required to move a
> block.
>
> Hopefully the above description of how this works either has been
> simplified and is missing the key to what makes it work, or else whoever
> designed this algorithm is better/more rigorous at their math than me. ;-)
>
>
>
> ______ Best Regards,
> |__ __/ Michael Schmidt
> || Software Engineer
> ||echnologic Systems (EmbeddedARM.com)
> || (480) 16525 East Laser Drive
> |/ 837-5200 Fountain Hills, AZ 85268
> http://oz.embeddedarm.com/~michael
>
------------------------------------
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/ts-7000/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/ts-7000/join
(Yahoo! ID required)
<*> To change settings via email:
<*> To unsubscribe from this group, send an email to:
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|