BeOS was designed from the ground up to be "The Media OS," so BFS,
the Be File System was, in turn, designed to be "The Media File
System." It's design makes streaming and manipulation of very large files as
efficient as possible. However, it also incorporates modern filesystem
features such as journaling and the unprecendented ability to associate an
unlimited number of attribute/value pairs to each file, which are indexed
to make searching very speedy.
BFS performs exceptionally well in streaming i/o benchmarks, as a
result of bypassing the system cache and performing DMA directly.
However, in metadata-intensive benchmarks (ie. creation and deletion of
large numbers of small files), BFS takes a severe performance hit, due to
both journaling and having to update the index it keeps of attributes.
The attribute system is a wonder to behold. I observed its effects
first-hand one day when I wrote a short document in BeOS's default text
editor. I added some formatting information, making some text different
sizes and colors, and saved it. I then opened it with VIM, expecting
to see HTML, or some arbitrary markup Be dreamed up, and I was
astonished to see that there was nothing there but plain text!
That's because the editor stored all the markup in attributes.
Of course, that's just one possible use. Even more exciting is the
ability to do queries (this is why some people refer to BFS as a
database). Imagine being able to issue a query like
name == "main.c"
size < 10000
...and have it run in O(lg n)!
This is thanks to BFS storing indices
for attributes in B+tree
s. No more running updatedb
every night, to be sure.
Note the distinction between the Be File System and the Unixware Boot File System, which ambiguously both use the acronym BFS (though people sometimes call the Be File System BeFS to create a distinction). The Unixware Boot File System is a very simple, bare-bones file system designed for loading and booting a Unixware kernel.
Sources: The book Practical Filesystem Design with the Be File System, the Filesystem HOWTO: http://www.linuxdoc.org/HOWTO/Filesystems-HOWTO.html