A operação em um disco sobrecarrega outros discos

0

Estou usando o Ubuntu 15.04 com MD RAID1, LVM e LXC como um servidor web. Eu tenho carga normal média de cerca de 1-2, e tudo está funcionando bem até que eu perfrom qualquer operação de IO em massa. O estranho é que estou fazendo essas operações em discos não utilizados. Então, por exemplo, sdc e sdd estão em RAID1 usados pelo servidor web e eu estou fazendo dd if = / dev / zero de / dev / sdb, ou simplesmente rodando du. Após alguns segundos, a carga média salta para 10 e mais e o sistema ficou quase inutilizável. Nmon mostra que todos os discos ficaram sobrecarregados e, se eu não parasse a operação, a sobrecarga continuaria a crescer.

Estou anexando capturas de tela de nmon. Sobrecarga com dd if = / dev / zero de = / dev / sdb .

Saída do uname:

... 3.19.0-39-generic #44-Ubuntu SMP Tue Dec 1 14:39:05 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

ATUALIZAÇÃO:

Alterei a configuração do disco, substituí os discos do sistema por um HGST mais robusto. Aliases do disco do sistema foram alterados após a reinicialização do sistema.

Saída do lsblk:

NAME                     FSTYPE              SIZE MOUNTPOINT
sda                                          1,8T 
├─sda1                                         1M 
├─sda2                   linux_raid_member    50G 
│ └─md0                  LVM2_member          50G 
│   ├─system-swap        swap                 10G [SWAP]
│   └─system-root        ext4                 40G /
└─sda3                   linux_raid_member 881,5G 
  └─md1                  LVM2_member       881,4G 
    ├─lxc-hosting        ext3                450G 
    ├─lxc-ns1-real                             1G 
    │ ├─lxc-ns1          ext3                  1G 
    │ └─lxc-ns1--snap6   ext3                  1G 
    └─lxc-ns1--snap6-cow                       1G 
      └─lxc-ns1--snap6   ext3                  1G 
sdb                                          1,8T 
├─sdb1                                         1M 
├─sdb2                   linux_raid_member    50G 
│ └─md0                  LVM2_member          50G 
│   ├─system-swap        swap                 10G [SWAP]
│   └─system-root        ext4                 40G /
├─sdb3                   linux_raid_member 881,5G 
│ └─md1                  LVM2_member       881,4G 
│   ├─lxc-hosting        ext3                450G 
│   ├─lxc-ns1-real                             1G 
│   │ ├─lxc-ns1          ext3                  1G 
│   │ └─lxc-ns1--snap6   ext3                  1G 
│   └─lxc-ns1--snap6-cow                       1G 
│     └─lxc-ns1--snap6   ext3                  1G 
└─sdb4                   ext4              931,5G 
sdc                      linux_raid_member 931,5G 
└─md2                    LVM2_member       931,4G 
  └─reserve-backups      ext4              931,4G /var/backups/mounted
sdd                      linux_raid_member 931,5G 
└─md2                    LVM2_member       931,4G 
  └─reserve-backups      ext4              931,4G /var/backups/mounted

Saída do lsscsi:

[0:0:0:0]    disk    ATA      HGST HUS726020AL W517  /dev/sda 
[1:0:0:0]    disk    ATA      HGST HUS726020AL W517  /dev/sdb 
[2:0:0:0]    disk    ATA      WDC WD1002FBYS-0 0C06  /dev/sdc 
[3:0:0:0]    disk    ATA      WDC WD1002FBYS-0 0C06  /dev/sdd 

Eu fiz um novo teste com pv (consulte Carregar com pv < / dev / zero > / dev / md2 ). Agora a situação é melhor. A operação nos discos sdc e sdd ainda afeta o desempenho de sda, mas a média de carga continua em 6-7 e o sistema não está sobrecarregado. E acho que agora entendo qual pode ser o motivo do problema. Como sda e sdb (como partes do RAID) são usados para o servidor da Web, eles têm fluxo constante de solicitações paralelas. Os discos rígidos precisam constantemente mover suas cabeças, reduzindo assim o desempenho do IO, mas o cache do IO do sistema (acredito que o linux usa toda a memória livre para esse propósito) ajuda a minimizar o número de acessos ao disco. Quando começo a usar intensivamente outros discos, o cache fica cheio de novos dados, por isso isso aumenta a carga nos discos principais. Se eu estiver certo, aumentar a quantidade de RAM ajudará. Agora são apenas 16 GB.

    
por stant 23.12.2015 / 16:45

2 respostas

1

O mais provável é que os discos estejam todos no mesmo controlador e o controlador é o gargalo. Ou seja, há um limite para a taxa de transferência da soma total de io para todos os discos, portanto, quando você começa a usá-lo intensamente, há menos disponíveis para os outros.

    
por psusi 24.12.2015 / 01:13
0

Você pode tentar um agendador de disco diferente. Verifique para ver o que está atualmente em uso em seus discos (por exemplo, para sda):

cat /sys/block/sda/queue/scheduler

Você pode ver:

noop anticipatory deadline [cfq]

Em seguida, você pode decidir qual agendador usar para cada disco, dependendo de qual tipo eles são (ssd, hdd) ou em qual controlador eles estão. Basta configurá-lo para um agendador diferente, digitando:

echo {SCHEDULER-NAME} > /sys/block/{DEVICE-NAME}/queue/scheduler

Então, se você quiser usar o prazo para sda , seria:

echo deadline > /sys/block/sda/queue/scheduler

Você pode achar que usar prazo final em um servidor lhe dará melhor capacidade de resposta enquanto estiver sob carga pesada.

Se você quiser alterar o agendador para TODOS os discos:

Edite / etc / default / grub:

sudo nano /etc/default/grub

Você precisa adicionar elevator = deadline. Alterar GRUB_CMDLINE_LINUX_DEFAULT="respingo silencioso" para

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=deadline"

Em seguida, execute

sudo update-grub2

e reinicie.

    
por G Trawo 24.12.2015 / 01:45