Re: JFFS3 & performance

Jörn Engel
2004-12-16T19:49:42Z

On Thu, 16 December 2004 20:15:00 +0100, Jörn Engel wrote:
>
> PS: Now you've done it. I'll implement crc24 and crc16 and benchmark
> them against adler32. Darn you!

Testcase going through 45MB of data in chunks of 4k. Machine is
PIII-1166 with warm caches.

Doing three runs and discarding the fastest and slowest ones:

crc32:
real 0m0.214s
user 0m0.133s
sys 0m0.076s

adler32:
real 0m0.128s
user 0m0.061s
sys 0m0.066s

crc24:
real 0m0.969s
user 0m0.882s
sys 0m0.073s

crc16:
real 0m0.382s
user 0m0.312s
sys 0m0.061s

Looks like those cold hard numbers beat the crap out of my previous
argument. So unless someone can seriously optimize below functions,
just pick adler32.

uint32_t crc24(uint32_t crc, const void *_s, size_t len)
{
const char *s = _s;
uint32_t ret = crc;
strlen(s);
for (; len; len--,s++) {
ret <<= 8;
ret += *s;
ret %= 0xfffffd;
}
return ret;
}

uint32_t crc16(uint32_t crc, const void *_s, size_t len)
{
const uint16_t *s = _s;
uint32_t ret = crc;
for (; len>1; len-=2,s++) {
ret <<= 16;
ret += *s;
ret %= 65521;
}
return ret;
}

Just in order to be complete, here is a variant of reiserfs' r5 hash.
Noone should seriously use it for error detection, but the results are
nice for comparison:
real 0m0.207s
user 0m0.134s
sys 0m0.067s

Jörn

--
"Translations are and will always be problematic. They inflict violence
upon two languages." (translation from German)