Andrey Borzenkov wrote:
� Fri, 06 Sep 2013 19:20:38 -0700 Linda Walsh <suse@tlinx.org> �����:
When you created your RAID disks, I know XFS has params for you to specify the Sunit size and it's width -- so you can have the I/O's lined up with the HW.
You need to raise this up on gdbm list/bug tracker.
Already attended to, but no response... Maybe its no longer supported? -------- Original Message -------- Subject: bug in 1.10: "optimal i/o size is *assumed* to be power of 2. This is not always true. Date: Wed, 04 Sep 2013 23:09:35 -0700 To: bug-gdbm@gnu.org In gdbmopen.c, ~ lines 235-242 we can see the dir size starting off with 8 'datums' of size (off_t), which it says take 3 bits to store. Fine. Then it loops on dir_size < block_size and uses a leftshift on size, and +1 on bits until dir_size >= blocksize. Using a 12-data disk RAID of 64KB/segment, => 768K = 1 fullwidth stripe on the RAID -- which is exactly what is returned from "stat" when asked for the blocksize. When dirsize becomes > 768K, it will have jumped from 512K->1M. Following that at line 244, is a check: /* Check for correct block_size. */ if (dbf->header->dir_size != dbf->header->block_size) { gdbm_close (dbf); gdbm_errno = GDBM_BLOCK_SIZE_ERROR; return NULL; } ---- But dir block size Cannot be equal to the desired block size, to the way it is calculated by powers of 2. Either the prog needs to use dir_size/(sizeof(off_t)) to get dir entries, or if power of 2 is needed for other reasons, then 256K needs to be "allocated" to padding after the dir_block_size gets to 512K -- thus causing further DB writes to be aligned. The above was detected using the SuSE factory source rpm for what will be "13.1" of opensuse. Note -- it is also the case that because of this bug, perl won't build and pass it's DB tests on some machines (like mine) because of this error. ----- Also, a bit of oddness -- I know that several places use a hard-coded '31' as top end for number of bits.. Might this cause problems on 64-bit machines? (bucket.c being the main offender) -- To unsubscribe, e-mail: opensuse-factory+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-factory+owner@opensuse.org