From: "Jared Hulbert" <jaredeh@gmail.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: Linux-kernel@vger.kernel.org, linux-embedded@vger.kernel.org,
linux-mtd <linux-mtd@lists.infradead.org>,
"Jörn Engel" <joern@logfs.org>,
tim.bird@am.sony.com, cotte@de.ibm.com, nickpiggin@yahoo.com.au
Subject: Re: [PATCH 03/10] AXFS: axfs.h
Date: Thu, 21 Aug 2008 15:40:50 -0700 [thread overview]
Message-ID: <6934efce0808211540p237f2c52pd71c2b955b3f54a8@mail.gmail.com> (raw)
In-Reply-To: <200808211424.31966.arnd@arndb.de>
> This bytetable stuff looks overly complicated, both the data structure and
> the access method. It seems like you are implementing your own custom Huffman
> compression with this.
>
> Is the reasonn for the bytetable just to pack numbers efficiently, or do you
> have a different intention?
It looks more complicated than it is. I need a data structure that is
64bit capable, easily read-in-place (remember this is designed to be
an XIP fs), and highly space efficient. Because it's XIP I didn't
want something that required a lot of calculation nor something that
made you incur a lot of cache misses. So yes I just want to pack
numbers in an easily read-in-place fashion.
If I have an array of u64 numbers tracking small numbers (a[0] = 1;
a[1] = 2;) just throwing that onmedia is a big waste.
(0x0000000000000001; 0x0000000000000002) Having different array types
for different images such as arrays of u8,u16,u32,u64 becomes less
efficient for 3,5,6 and 7 byte numbers, 3 bytes was a particularly
interesting size for me.
All I'm doing is removing the totally unnecessary zeros and aligning by bytes.
Take an array of u64 like this :
0x0000000000000005
0x0000000000001001
0x00000000000a0000
I strip off the unneeded leading zeros:
0x000005
0x001001
0x0a0000
Then pack them to byte alignment:
0x0000050010010a0000
Sure it could be encoded more but that would make it harder to extract
the data. This way I can read the data in one, maybe two, cache
misses. A couple of shifts to deal with the alignment and endianness
and we are done.
> Did you see a significant size benefit over simply storing all metadata as
> uncompressed data structures like in cramfs?
Yes. For some modest values of significant. In terms of the amount of
space required to track the metadata it is more dramatic. For a small
rootfs I can fit many of the data structures in an u8 array, while
maintaining u64 compatibility. Compared to dumping u64 arrays onmedia
that's an 8X savings. But it's an 8X savings of a smallish percentage
of the image size. The difference is more pronounced on a smaller
(2MB) filesystem I tested but it was only ~5% if memory serves me
correct.
> Have you considered storing simple dentry/inode data in node_type==Compressed
> nodes?
Yes, I thought a lot about that. But I choose against it because I
wanted read-in-place data structures for minimum RAM usage in the XIP
case and I figure the way I do it would stat() faster.
next prev parent reply other threads:[~2008-08-21 22:40 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-21 5:45 [PATCH 03/10] AXFS: axfs.h Jared Hulbert
2008-08-21 7:51 ` Carsten Otte
2008-08-21 11:31 ` Arnd Bergmann
2008-08-21 20:05 ` Jared Hulbert
2008-08-21 12:24 ` Arnd Bergmann
2008-08-21 22:40 ` Jared Hulbert [this message]
2008-08-22 11:27 ` Arnd Bergmann
2008-08-22 12:04 ` Geert Uytterhoeven
2008-08-22 18:12 ` Jared Hulbert
2008-08-21 13:10 ` Daniel Walker
2008-08-21 20:07 ` Jared Hulbert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6934efce0808211540p237f2c52pd71c2b955b3f54a8@mail.gmail.com \
--to=jaredeh@gmail.com \
--cc=Linux-kernel@vger.kernel.org \
--cc=arnd@arndb.de \
--cc=cotte@de.ibm.com \
--cc=joern@logfs.org \
--cc=linux-embedded@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=nickpiggin@yahoo.com.au \
--cc=tim.bird@am.sony.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).