Yes.

The ZFS block allocator has three independent layers: device selection,
metaslab selection (within the chosen device), and block selection
(within the chosen metaslab).

Device selection is currently round-robin to provide dynamic striping,
with weighting for load balance.  Many other policies are possible.

Metaslab selection is based on the metaslab's weight, as computed by
metaslab_weight().  This considers the recording zone, locality, and
other factors.  Again, the weight function could literally be anything.

Finally, block selection is determined by the space map ops vector.
We currently have just one (a modified first-fit allocator), but we
have a couple of new ones in the works.  It should be straightforward
to test-drive your own using metaslab_ff_alloc() as an example.
(The current first-fit allocator is just 70 lines of code.)

Jeff

On Mon, Mar 23, 2009 at 01:25:12PM -0700, David Dew wrote:
> Hello,  looking to see if it is possible to change the allocation strategy to 
> a "best-fit" or "fill, spill" model.  In looking into the current code and 
> blog entries, there seems to have been some of this flexibility in mind.  My 
> current thoughts are this should be attempted in metaslab.c in the 
> metaslab_alloc_dva function, but curious if anyone else has attempted this.
> 
> Thanks
> -- 
> This message posted from opensolaris.org
> _______________________________________________
> zfs-code mailing list
> zfs-code at opensolaris.org
> http://mail.opensolaris.org/mailman/listinfo/zfs-code

Reply via email to