AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1165946
Accepted
Ryan Patterson
Ryan Patterson
Asked: 2024-09-30 22:25:08 +0800 CST2024-09-30 22:25:08 +0800 CST 2024-09-30 22:25:08 +0800 CST

Por que o MD RAID1 é muito mais lento que o disco de rede bruto?

  • 772

Estou tentando configurar o MD RAID1 (usando o mdadm) com a --write-mostlyopçã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?

linux
  • 3 3 respostas
  • 1585 Views

3 respostas

  • Voted
  1. Tero Kilkanen
    2024-10-01T04:58:15+08:002024-10-01T04:58:15+08:00

    Sem saber a implementação exata do mdadm, vou escrever meu palpite sobre isso.

    Acho que na configuração RAID 1, o subsistema RAID espera que ambas as unidades reconheçam as operações de gravação antes de processar os próximos eventos de arquivo. E então pode haver atrasos adicionais introduzidos pela incompatibilidade de desempenho entre as unidades, o que contribuiria para a velocidade de gravação de 69,9 MiB/s vs 117 MiB/s.

    Não acho que seja viável criar matrizes RAID com dispositivos onde a velocidade de acesso é muito diferente. RAID não foi projetado para esse caso de uso.

    Talvez você queira considerar um sistema de arquivos de cluster como GFS2 ou OCFS2, pois eles podem ser mais adequados para seu caso de uso.

    • 7
  2. Best Answer
    Ryan Patterson
    2024-10-01T11:34:50+08:002024-10-01T11:34:50+08:00

    Até onde posso perceber, esse é um modo de falha causado pela sobrecarga do módulo do kernel MD com IOPS.

    Quando modifico meus scripts para usar iodepth=64 numjobs=1, não vejo perda de desempenho nas unidades brutas, e o impacto no desempenho de gravação do RAID1 desaparece.

    Aqui estão os scripts finais:

    fio -name=RandWrite -group_reporting -allow_file_create=0 \
        -iodepth=$IODEPTH -numjobs=$NUMJOBS \
        -direct=1 -rw=randwrite -ioengine=io_uring -bs=16k \
        -time_based=1 -ramp_time=10 -runtime 10 \
        -randrepeat=0 -norandommap=1 -filename=$DEVICE
    fio -name=RandRead -group_reporting -allow_file_create=0 \
        -iodepth=$IODEPTH -numjobs=$NUMJOBS \
        -direct=1 -rw=randread -ioengine=io_uring -bs=16k \
        -time_based=1 -ramp_time=10 -runtime 10 -randrepeat=0 \
        -norandommap=1 -filename=$DEVICE
    

    E aqui estão os resultados líquidos:

    Métrica iodepth=128
    numjobs=8
    iodepth=64
    numjobs=1
    Disco local, escrever 629 766
    Disco local, ler 754 877
    Disco de nuvem, escrever 117 117
    Disco de nuvem, ler 118 117
    RAID1, local, escrever 526 775
    RAID1, local, leitura 751 853
    RAID1, nuvem, gravação 59 117
    RAID1, nuvem, leitura 115 117
    RAID1, ambos, escrevem 61 117
    RAID1, ambos, leitura 755 879

    Estou supondo que muitos IOPS combinados com a unidade mais lenta levam a um comprimento de fila excessivo, o que então leva a algum tipo de contenção de bloqueio no módulo do kernel. Mas não sei detalhes suficientes para ter certeza. O que aprendi é que precisarei de um benchmark mais preciso para decidir adequadamente se essa abordagem é viável para meu caso de uso.

    • 3
  3. shodanshok
    2024-10-01T17:02:03+08:002024-10-01T17:02:03+08:00

    Você provavelmente está preso ao MD write bitmap. Você pode tentar desabilitá-lo (via --bitmap=noneduring creation ou mais tarde com --grow), mas certifique-se de entender que um desligamento impuro em um array sem bitmap significa uma ressincronização completa após a reinicialização.

    • -1

relate perguntas

  • Como descobrir detalhes sobre hardware na máquina Linux?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve