[Lustre-devel] 2 primitives for the NRS
Alex Lyashkov
Alexey.Lyashkov at Sun.COM
Sat Jan 5 04:19:42 PST 2008
On Fri, 2008-01-04 at 13:37 +0000, Eric Barton wrote:
> Any suggestions for improving the API appreciated...
>
> #ifndef __LIBCFS_BHEAP_H__
> #define __LIBCFS_BHEAP_H__
>
> /* Auto-array
> * A sparse 1D contiguous array of pointers which uses single, double and
> * triple indirection maps and avoids allocating large contiguous memory.
> *
> * FIXME: CAA_SHIFT should be defined automatically so that
> */
>
> #define CAA_SHIFT 10
> #define CAA_SIZE (1 << CAA_SHIFT) /* # ptrs per level */
> #define CAA_MASK (CAA_SIZE - 1)
> #define CAA_NOB (CAA_SIZE * sizeof(void *))
>
> typedef struct
> {
> void ****aa_3d; /* Triple indirect */
> void ***aa_2d; /* double indirect */
> void **aa_1d; /* single indirect */
> } cfs_autoarray_t;
>
> void cfs_aa_init(cfs_autoarray_t *aa); /* setup */
> void cfs_aa_fini(cfs_autoarray_t *aa); /* free all allocated mem */
>
> /* effectively &aa[idx] but you MUST know &aa[idx] exists */
> void **cfs_aa_index(cfs_autoarray_t *aa, unsigned int idx);
>
> /* effectively &aa[idx] - return NULL if &aa[idx] doesn't exist and 'grow' is
> * FALSE */
> void **cfs_aa_lookup(cfs_autoarray_t *aa, unsigned int idx, int grow);
>
why not move obdclass/class_hash into libcfs and use for lnet also ?
now it really generic code and can be easy moved info libcfs.
also if lookup algorithm in class_hash not good for work with 10^6
elements, this need to be adjusted for all usages.
--
Alex Lyashkov <Alexey.lyashkov at sun.com>
Lustre Group, Sun Microsystems
More information about the lustre-devel
mailing list