Flash disks and FFS layout heuristics

Matthew Dillon dillon at apollo.backplane.com
Tue Apr 1 15:26:06 PDT 2008


:>     64MB is tiny.  None of the problems with any of the=20
:> approachs we've discussed even exist with devices that small in an=20
:> embedded system.
:
:It is fairly clear that you're not familiar with NAND devices on
:embedded systems, as you've just said that well known problems do not
:exist.
:
:> To be clear, because I really don't understand how you=20
:> can possibly argue that the named-block storage layer is bad in a=20
:> device that small...
:
:Yes, your lack of understanding is very apparent.

    What complete bullshit.  If you want to argue technical merits, be
    my guest.  So far you haven't made one single technical point in
    any of your postings.  You've posted about your experience with NAND
    flash in embedded systems, very clearly with SMALL flash devices and
    simple filesystems, and that's fine, it's similar to my flash filesystem
    experience (which, yes, was primarily on NOR devices but, no, that
    doesn't magically make you an expert on NAND and me an idiot about it). 
    Considering I've pretty much spent my entire life working with hardware
    that is about as ridiculous an assertion as you could make, but clearly
    you believe it.

    But then you generalized to the entire market and that's not fine.

    Real filesystems are far more sophisticated then what you will ever see
    in the embedded flash product, and consequently real filesystems tend
    to broken down into more abstract terms so the higher layers can actually
    implement the filesystem functions without it taking 10 man years of
    programming.  My interest is squarely with real filesystems targetted
    to mass storage, these days.

    I didn't start out smearing people, but if you are going to start
    acting like an asshole then I have no problem ratcheting it up
    to your level.

:> It's seriously a non-issue.  You are making too many=20
:> assumptions about how named blocks would be used, particularly
:> if the filesystem is flash-aware.
:
:Now you're moving your goal posts. You came into this suggesting that
:the file system not be flash-aware. If I make the file system flash
:aware than many of the problems become managable.  That *was* my
:starting thesis, after all.

    More bullshit.  My first posting was not addressing performance issues,
    it was specifically addressing FFS and ZFS and the (bad) idea of making
    them more flash aware.  ZFS on a 2G flash device?  What the hell would
    be the point of that?  We're talking about two completely different
    things.

    It used a NOR flash translation table by way of example.  I sure as hell
    would never say that a flash-unaware filesystem would perform better
    then a flash-aware one.  Duh!

    You have seriously misread the meaning behind that posting and you
    clearly didn't read any of the other postings.  I suggest you go back
    and READ THE POSTINGS and maybe you'll start to understand the issues
    being addressed.

    Since you don't understand my position, let me lay it out for you
    in simple terms:

    * There's no point trying to adapt a flash-unaware filesystem to
      become flash-aware.  It is a complete waste of time.  You might as
      well write a new filesystem.  If you want to use a flash-unaware
      filesystem you use a translation layer, eat any performance issues,
      and be done with it.  MAYBE spend a few days optimizing the one
      or two critical paths you want to eek a little more performance out
      of.

      This has nothing to do with having to use translation tables and
      everything to do with the fact that the existance and use of those
      REQUIRED translation tables are not integrated into the flash-unaware
      filesystem, so inefficiencies are compounded rather then reduced.
      It's like jamming a square peg into a round hole.

    * Just because flash-unaware filesystems HAVE To use a translation layer
      doesn't mean that a translation layer is bad for a flash-aware
      filesystem.

    * A named-block translation layer can be an extremely valuable abstraction
      for use in filesystem designs which directly integrate its features
      (that is, the filesystem NAMES the block instead of ALLOCATES the
      block).

      There is absolutely NOTHING inherently bad about the model from a 
      performance point of view, particularly if your storage media requires
      relocation (as NAND does).  The key point is that a named-block layer
      takes over the functionality of all the indirect pointers that would
      normally have to be manipulated by higher layers in the filesystem.
      If you can integrate that into the physical storage requirements then
      you kill two birds with one stone and get major performance benefits
      from doing so.

    You are welcome to debate the points, but you'll get burned if you try
    to take some sort of moral highground stand based on a few piddly flash
    filesystems written over the course of a few years.  Coding at that
    level is fun and interesting but ultimately not very difficult.


:Feel free to implement it and see for yourself.
:
:The only point I had wished to make is that you get performance wins out
:of making the file system flash aware. Now that you've agreed to that,
:feel free to experiment with any of a number of ways of making it flash
:aware.

     Right now my work is with HAMMER.  It's fun to theorize how I could
     make HAMMER into a flash-aware filesystem but I have no intention of
     actually doing so any time soon, or ever.

     Frankly, if I wanted to write a ground-up flash filesystem I could,
     it would not be difficult... certainly not more difficult then HAMMER
     and HAMMER is probably the most sophisticated filesystem that exists
     in the open source world today.  But I have no desire to do that at
     this juncture and the lack of desire certainly does not invalidate my
     comments on the matter.

     It's kinda like saying a person has no right to comment about how to
     cut an european apples if their focus in life is cutting american ones.
     NAND is different from NOR but the differences can be explained pretty
     much in two paragraphs and most of the same concepts apply.  You can't
     byte-write, you have auxillary information, you need to add a little ECC,
     and scrub.  It isn't rocket science.

     I am a very technical person.  If you are going to argue merit, then
     you damn well better say WHY something doesn't work, in detail,
     instead of simply stating that someone random other entity couldn't
     make it work some point in the past so therefor it is bad.  If you do
     not know the WHY, precisely, then good $#%$#%$#% luck designing
     anything that's actually sophisticated.

					-Matt
					Matthew Dillon 
					<dillon at backplane.com>


More information about the freebsd-arch mailing list