Re: crush multiweight implementation details

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 10 Apr 2017, Loic Dachary wrote:
> On 04/10/2017 04:11 PM, Sage Weil wrote:
> > On Mon, 10 Apr 2017, Loic Dachary wrote:
> >> 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.
> > 
> > Allowing overrides of the bucket items too makes me nervous (do we have a 
> > use for that yet?), 
> 
> Maybe I misunderstood what you were after with bucket_id in http://pad.ceph.com/p/crush-multiweight around here ?
> 
> struct crush_bucket_weight_set {
>   __u32 bucket_id;  /* used as input to hash in place of bucket id */
>   __u32 num_positions, num_items;
>   __u32 *data; // index like [item*num_items+pos]
> };

It's just the bucket id that matters; the members of the bucket don't need 
to change.  I'm not sure that the __u32 *ids above is needed for 
anything... unless I'm misunderstanding something?

sage

 
> > but otherwise this looks reasonable!
> 
> Cool :-)
> 
> -- 
> Loïc Dachary, Artisan Logiciel Libre
> 
> 

[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux