All of lore.kernel.org
 help / color / mirror / Atom feed
* crush multiweight implementation details
@ 2017-04-10 14:04 Loic Dachary
  2017-04-10 14:11 ` Sage Weil
  0 siblings, 1 reply; 7+ messages in thread
From: Loic Dachary @ 2017-04-10 14:04 UTC (permalink / raw)
  To: Sage Weil; +Cc: Ceph Development

Hi Sage,

We could have:

struct crush_choose_arg {
  __u32 bucket_id;
  __u32 num_items;
  __u32 *ids; // override the bucket items for placement
  __u32 num_positions;
  __u32 *weights; // size is num_positions*num_items
};
 
struct crush_choose_arg_map {
  struct crush_choose_arg *args;
  __u32 size;
};

and

void crush_init_workspace(const struct crush_map *m, struct crush_choose_arg_map *arg_map, void *v) {
...
if (m->buckets[b]->id == arg_map[b]->bucket_id)
   w->work[b]->arg = arg_map[b];
...
}

with

struct crush_work_bucket {
    __u32 perm_x; /* @x for which *perm is defined */
    __u32 perm_n; /* num elements of *perm that are permuted/defined */
    __u32 *perm;  /* Permutation of the bucket's items */
    struct crush_choose_arg *arg;
};

There would be no need to change the code path since crush_bucket_choose already is given the crush_work_bucket. And crush_init_workspace already has logic that is algorithm dependent. And all the sanity checks could be done in crush_init_workspace so that the choose function only does what's absolutely necessary.

What do you think ?

Cheers

-- 
Loïc Dachary, Artisan Logiciel Libre


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-04-11 13:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-10 14:04 crush multiweight implementation details Loic Dachary
2017-04-10 14:11 ` Sage Weil
2017-04-10 14:39   ` Loic Dachary
2017-04-10 14:44     ` Sage Weil
2017-04-10 14:53       ` Loic Dachary
2017-04-11  6:49         ` Loic Dachary
2017-04-11 13:31           ` Sage Weil

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.