Após algum tempo (ou quantidade de dados gravados) após a reinicialização do servidor, a velocidade de gravação cai para menos de 1 MB / s. Isto é independente de qual sistema de arquivos (também partição bruta) e independente de HDD (HW RAID) ou SSD (SW RAID com SSD conectado a portas AHCI da placa-mãe, não a placa de ataque). Estamos testando com o comando dd if=/dev/zero of=tst bs=1M oflag=dsync
(eu tentei também 1k
e também sem dsync
, mas o desempenho não foi melhor).
A única coisa estranha que notei foi que o avgrq-sz
é apenas 8 na saída do iostat (em outros servidores testados era mais de 600) e que o req / s é de cerca de 100 (também no SSD). A execução de mais dd
em paralelo deu a cada um deles 1 MB / s e cada um deles cerca de 100 req / s.
Amostra iostat -xN 1
output:
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 0.00 125.00 0.00 500.00 8.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 0.00 124.00 0.00 496.00 8.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 3.00 0.00 128.00 0.00 524.00 8.19 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 6.00 0.00 124.00 0.00 728.00 11.74 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 0.00 125.00 0.00 500.00 8.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 3.00 0.00 128.00 0.00 524.00 8.19 0.00 0.00 0.00 0.00 0.00 0.00
Saída Iostat com 8x dd
em execução:
sdc 0.00 64.00 0.00 959.00 0.00 7560.00 15.77 0.00 0.00 0.00 0.00 0.00 0.00
A saída
lsblk -O
é consistente com outros servidores, que não têm esse problema (como MIN-IO, RQ-SIZE, LOG-SEC). O kernel atual é o 4.9.16-gentoo, mas o problema começou com o kernel antigo. A execução de dd
com oflag=direct
é rápida.
EDITAR: Com base na resposta do shodanshok, vejo agora que as solicitações são realmente pequenas, mas a pergunta é por que o io scheduler não as mescla em solicitações maiores? Eu tentei os agendadores cfq
e deadline
. Existe alguma coisa que eu possa verificar (ou comparar com outros servidores)?
Saída ao executar com oflag=direct
(a velocidade é boa):
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 2.00 649.00 8.00 141312.00 434.16 2.78 4.26 2.00 4.27 1.53 99.60
sdc 0.00 0.00 0.00 681.00 0.00 143088.00 420.23 2.71 3.99 0.00 3.99 1.46 99.20
sdc 0.00 0.00 2.00 693.00 8.00 146160.00 420.63 2.58 3.71 0.00 3.72 1.42 98.80
sdc 0.00 49.00 2.00 710.00 8.00 146928.00 412.74 2.68 3.76 22.00 3.71 1.39 99.20
sdc 0.00 0.00 1.00 642.00 4.00 136696.00 425.19 2.43 3.79 60.00 3.71 1.42 91.60
O servidor é o Dell PowerEdge R330 com 32 GB de RAM, controlador LSI MegaRAID 3108 com HDDs, SSDs conectados ao SATA onboard e CPU Intel E3-1270. Sistema de arquivos ext3, mas o mesmo acontece com dd
para partição bruta.
Saída de lsblk
(sdc é HW RAID HDD, sda / sdb SW RAID SSDs):
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 223.6G 0 disk
|-sdb4 8:20 0 1K 0 part
|-sdb2 8:18 0 140G 0 part
| '-md1 9:1 0 140G 0 raid1 /
|-sdb5 8:21 0 25G 0 part
| '-md2 9:2 0 25G 0 raid1 /var/log
|-sdb3 8:19 0 1G 0 part
|-sdb1 8:17 0 70M 0 part
| '-md0 9:0 0 70M 0 raid1 /boot
'-sdb6 8:22 0 57.5G 0 part
'-md3 9:3 0 57.5G 0 raid1 /tmp
sr0 11:0 1 1024M 0 rom
sdc 8:32 0 3.7T 0 disk
'-sdc1 8:33 0 3.7T 0 part /home
sda 8:0 0 223.6G 0 disk
|-sda4 8:4 0 1K 0 part
|-sda2 8:2 0 140G 0 part
| '-md1 9:1 0 140G 0 raid1 /
|-sda5 8:5 0 25G 0 part
| '-md2 9:2 0 25G 0 raid1 /var/log
|-sda3 8:3 0 1G 0 part
|-sda1 8:1 0 70M 0 part
| '-md0 9:0 0 70M 0 raid1 /boot
'-sda6 8:6 0 57.5G 0 part
'-md3 9:3 0 57.5G 0 raid1 /tmp
Com oflag=direct
, a velocidade está boa, mas o problema é que os aplicativos não usam o io direto, por isso mesmo o cp
está lento.
/sys/block/sdc/queue/hw_sector_size : 512
/sys/block/sdc/queue/max_segment_size : 65536
/sys/block/sdc/queue/physical_block_size : 512
/sys/block/sdc/queue/discard_max_bytes : 0
/sys/block/sdc/queue/rotational : 1
/sys/block/sdc/queue/iosched/fifo_batch : 16
/sys/block/sdc/queue/iosched/read_expire : 500
/sys/block/sdc/queue/iosched/writes_starved : 2
/sys/block/sdc/queue/iosched/write_expire : 5000
/sys/block/sdc/queue/iosched/front_merges : 1
/sys/block/sdc/queue/write_same_max_bytes : 0
/sys/block/sdc/queue/max_sectors_kb : 256
/sys/block/sdc/queue/discard_zeroes_data : 0
/sys/block/sdc/queue/read_ahead_kb : 128
/sys/block/sdc/queue/discard_max_hw_bytes : 0
/sys/block/sdc/queue/nomerges : 0
/sys/block/sdc/queue/max_segments : 64
/sys/block/sdc/queue/rq_affinity : 1
/sys/block/sdc/queue/iostats : 1
/sys/block/sdc/queue/dax : 0
/sys/block/sdc/queue/minimum_io_size : 512
/sys/block/sdc/queue/io_poll : 0
/sys/block/sdc/queue/max_hw_sectors_kb : 256
/sys/block/sdc/queue/add_random : 1
/sys/block/sdc/queue/optimal_io_size : 0
/sys/block/sdc/queue/nr_requests : 128
/sys/block/sdc/queue/scheduler : noop [deadline] cfq
/sys/block/sdc/queue/discard_granularity : 0
/sys/block/sdc/queue/logical_block_size : 512
/sys/block/sdc/queue/max_integrity_segments : 0
/sys/block/sdc/queue/write_cache : write through