Estou tentando configurar o MD RAID1 (usando o mdadm) com a --write-mostly
opção para que um volume de rede (EBS) e uma unidade local sejam espelhos um do outro (a ideia é que a unidade local seja efêmera para minha instância, mas tenha melhor desempenho).
Para testar essa ideia, obtenho uma estimativa de desempenho básica da minha unidade usando os dois scripts a seguir.
fio -name=RandWrite -group_reporting -allow_file_create=0 \
-direct=1 -iodepth=128 -rw=randwrite -ioengine=io_uring -bs=32k \
-time_based=1 -ramp_time=10 -runtime 10 -numjobs=8 \
-randrepeat=0 -norandommap=1 -filename=$BENCHMARK_TARGET
# Read performance
fio -name=RandRead -group_reporting -allow_file_create=0 \
-direct=1 -iodepth=128 -rw=randread -ioengine=io_uring -bs=32k \
-time_based=1 -ramp_time=10 -runtime 10 -numjobs=8 \
-randrepeat=0 -norandommap=1 -filename=$BENCHMARK_TARGET
Resultados:
- Unidade de rede: 117 MiB/s de gravação, 117 MiB/s de leitura
- Unidade local: 862 MiB/s de gravação, 665 MiB/s de leitura
O problema surge quando introduzo o mdadm. Mesmo ao usar um trivial no-mirror "RAID1", o desempenho de gravação é severamente pior ao usar a unidade de rede.
mdadm --build /dev/md0 --verbose --level=1 --force --raid-devices=1 "$TARGET"
# mdadm --detail /dev/md0
/dev/md0:
Version :
Creation Time : Mon Sep 30 14:22:41 2024
Raid Level : raid1
Array Size : 10485760 (10.00 GiB 10.74 GB)
Used Dev Size : 10485760 (10.00 GiB 10.74 GB)
Raid Devices : 1
Total Devices : 1
State : clean
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
- Matriz RAID1 de 0 espelhos apoiada por unidade de rede: 69,9 MiB/s de gravação, 118 MiB/s de leitura
- Matriz RAID1 de 0 espelhos apoiada por unidade local: 868 MiB/s de gravação, 665 MiB/s de leitura
Como podemos ver aqui, o desempenho de gravação não mudou muito para a unidade local (MD-raid vs. acesso raw), mas é severamente prejudicado ao usar a unidade de rede via MD-raid. Por que isso acontece?