BTRFS raid-1: какое устройство получает чтение? - PullRequest
1 голос
/ 29 марта 2019

У меня есть raid-1 со следующей конфигурацией:

$ btrfs fi show
Total devices 2 FS bytes used 203.31GiB
        devid    1 size 224.00GiB used 206.03GiB path /dev/sda
        devid    2 size 224.00GiB used 206.03GiB path /dev/mmcblk0p4

/dev/mmcblk0p4 быстро и /dev/sda медленно

Что определяет, какое устройство получит IO читает иесть ли способ контролировать это?

1 Ответ

1 голос
/ 29 марта 2019

Начиная с версии 5.0 ядра Linux, существует код для определения, какая часть зеркального массива будет использоваться. Для выбора одной из доступных полос используется pid процесса:

https://elixir.bootlin.com/linux/v5.0/source/fs/btrfs/volumes.c

static int find_live_mirror(struct btrfs_fs_info *fs_info, ...
{ ...
    if (map->type & BTRFS_BLOCK_GROUP_RAID10)
        num_stripes = map->sub_stripes;
    else
        num_stripes = map->num_stripes;

    preferred_mirror = first + current->pid % num_stripes;

Существует дополнительная логика для изменения предпочтения, когда замена данных активна. Но текущий код не имеет «SSD» над «вращательной» логикой выбора.

Тимофей Титовец предложил патч для реализации поиска ssd, чтобы использовать его по своему усмотрению в 2017 и 2018 годах, но он все еще не принят:

Btrfs: enchanse raid1 / 10 эвристика баланса для невращающихся устройств Тимофей Титовец. Ср, 27 декабря 2017

В настоящее время запросы балансировки btrfs raid1 / 10 балансировки к зеркалам, на основе pid% числа зеркал. ...

Если одно из зеркал не вращается, тогда все запросы на чтение будут перемещены на не вращающееся устройство. ...

P.S. Вдохновленный балансировкой чтения md-raid1

https://www.spinics.net/lists/linux-btrfs/msg80033.html [PATCH V5] Btrfs: эвристический баланс enchanse raid1 / 10, 7 июля 2018

https://patchwork.kernel.org/patch/10681671/ [V8] Btrfs: улучшение эвристики баланса raid1 / 10, 14 ноября 2018

...