On 3/22/19 12:26 AM, Steven Davies wrote:
On 2019-03-19 10:00, Anand Jain wrote:
RFC patch as of now, appreciate your comments. This patch set has
been tested.
Function call chain __btrfs_map_block()->find_live_mirror() uses
thread pid to determine the %mirror_num when the mirror_num=0.
The pid based mirror_num extrapolation has following disadvantages
. A large single-process read IO will read only from one disk.
. In a worst scenario all processes read accessing the FS could have
either odd or even pid, the read IO gets skewed.
. There is no deterministic way of knowing/controlling which copy will
be used for reading.
. May see performance variations for a given set of multi process
workload ran at different times.
So we need other types of readmirror policies.
This patch introduces a framework so that we can add more policies, and
converts the existing %pid into as a configurable parameter using the
property. And also provides a transient readmirror mount option, so that
this property can be applied for the read io during mount and for
readonly FS.
Is it possible to set this property at mkfs time?
Possible.
For example:
btrfs property set <mnt> readmirror pid
btrfs property set <mnt> readmirror ""
btrfs property set <mnt> readmirror devid<n>
mount -o readmirror=pid <mnt>
mount -o readmirror=devid<n> <mnt>
This is an edge case but should we be allowed to set more than one
device as a read mirror in a 3+ device array? In theory there could be
two fast disks and one slow disk where all stripes are guaranteed to be
on at least one fast disk.
Right. We need to evolve the device grouping part to get this.
I'll test these patches out when I have some spare time over the next
few weeks. Do you have a tree I can pull / what are the patches based on?
Thanks for the tests. Sure will upload and send the link.
Way beyond this patch series, considering a 3+ device raid1 array with
mixed fast and slow disks perhaps there could also be a write preference
for disks to fill up the fast disks first.
Right.
Thanks
Anand
Steven Davies