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 / unix / Perguntas / 452022
Accepted
Kiwy
Kiwy
Asked: 2018-06-27 05:19:32 +0800 CST2018-06-27 05:19:32 +0800 CST 2018-06-27 05:19:32 +0800 CST

Resultado inconsistente do desempenho do tamanho do bloco de leitura/gravação, meu teste é preciso?

  • 772

Estou tentando fazer alguns testes em termos de tamanho de bloco do sistema de arquivos para identificar algum gargalo potencial em um trabalho de grade devido a IO ruim. Percebo muito incremento de arquivo pequeno de 8096 B durante o trabalho enquanto o tamanho do bloco do FS é:

stat -fc %s /my/filesytem
1048576

O que está longe de ser o ideal. Para simular tal comportamento criei dois pequenos arquivos aleatórios de 1GB a 20GB com dde /dev/urandomcomo fonte, e tentei este código python:

#!/bin/python
bsize=8096
print('File random.20g1')
print(strftime("%Y-%m-%d_%H:%M:%S"))
f1= open('random.20g1','rb')
f2= open('random.20g1.dest','wb')

while True:
   b = f1.read(bsize)
   if b:
       f2.write(b)
   else:
       break
print(strftime("%Y-%m-%d_%H:%M:%S"))

E eu tentei o mesmo com bsize=1048576.

Primeiro observo uma pequena diferença de tempo de leitura/gravação de 4 segundos entre um tamanho de bloco de 8096 e 1048576 (4 segundos a menos para o tamanho de bloco grande).
Este primeiro resultado foi promissor mas depois de mais testes, como aumentar o tamanho do arquivo para 20GB ou fazer o mesmo com 10 arquivos de GB observo sempre a mesma diferença de 4/3 segundos em termos de desempenho e o ganho nunca escala qualquer que seja o Arquivo.

Estou fazendo algo errado no meu procedimento de teste ou parece bom para você?
Eu teria esperado alguma melhora no aumento do tamanho do arquivo, por exemplo.

io performance
  • 1 1 respostas
  • 1023 Views

1 respostas

  • Voted
  1. Best Answer
    Andrew Henle
    2018-06-28T02:30:29+08:002018-06-28T02:30:29+08:00

    Este código

    while True:
       b = f1.read(bsize)
       if b:
           f2.write(b)
       else:
           break
    

    está fazendo leituras e gravações sequenciaisbsize - dado qualquer , ele lê os primeiros bsizebytes, grava-os no arquivo de destino, depois lê os segundos bsizebytes, anexa-os ao arquivo de destino, ...

    Seu sistema operacional os armazenará no cache da página e poderá até fazer a leitura antecipada e o pré-buffer dos dados de entrada como @StephenKitt mencionado nos comentários. Assim, as chamadas de IO subjacentes para o disco real acabarão reunidas em pedaços muito maiores, provavelmente o 1 MB que você mencionou.

    A pequena diferença que você vê no desempenho é quase certamente devido apenas porque, quando você usa um menor bsize, seu processo precisa fazer mais chamadas de sistema no kernel para realmente mover os dados.

    Portanto, é quase certo que você não vê muita diferença quando altera bsizeseu código de teste, mas não é realmente possível dizer com certeza sem muito mais detalhes sobre seu sistema.

    MAIS...

    O que você está fazendo é efetivamente idêntico ao

    dd if=random.20g1 of=random.20g1.dest bs=8192
    

    Se você realmente usar dd, você pode fazer muito mais coisas para testar o IO do disco (basta olhar para a página man - você pode usar o IO direto para ignorar o cache da página, por exemplo), mas no final, o IO testando você pode fazer com ddé bastante limitado, pois será sequencial. ddmostrará a você o melhor desempenho de E/S, mas não pode simular muitas cargas de trabalho do mundo real que revelam as desvantagens do desempenho de E/S.

    Você precisa determinar mais sobre o padrão de E/S que seu trabalho de grade realmente usa - está fazendo leituras/gravações sequenciais como em seu teste, ou está fazendo leituras e/ou gravações aleatórias onde procura no(s) arquivo(s) para um arquivo efetivamente aleatório local antes de fazer o IO? As operações de E/S aleatórias são muito mais exigentes em um sistema de arquivos e hardware de disco subjacente - especialmente discos giratórios. Sistemas que podem mover centenas de MB/s de fluxo de E/S sequencial podem ser reduzidos a literalmente um punhado de kilobytes por segundo por operações aleatórias de E/S de pequeno porte. Especialmente se você estiver usando discos SATA SLOW de 5.000 RPM.

    Pode ficar muito ruim quando pessoas que não entendem de sistemas de arquivos e matrizes RAID configuram armazenamento. O tamanho de bloco do sistema de arquivos de 1 MB que você mencionou com certeza parece que você pode estar lidando com uma configuração do sistema de armazenamento sob um paradigma equivocado de "maior é sempre mais rápido".

    Misturar um paradigma "maior é sempre mais rápido" com coisas como matrizes RAID5/6 e IO de bloco pequeno aleatório (como o que seu trabalho de grade parece estar fazendo) pode ser uma receita para um desempenho de IO totalmente horrível.

    Você pode usar straceno Linux para obter as chamadas de sistema reais que seus trabalhos fazem. Procure por chamadas como lseek, write, reade pwritee pread. Isso lhe dirá o padrão de IO real que seu(s) trabalho(s) faz.

    Depois de obter seu padrão de E/S, você pode testar e comparar o desempenho de armazenamento real sob esse padrão com uma ferramenta que chega perto de duplicar esse padrão. Você provavelmente precisa de uma ferramenta que escreva ou leia de/para locais aleatórios. Novamente, assumindo o Linux, você pode começar com ofio . Você provavelmente precisará usar as opções de leitura/gravação aleatórias.

    • 1

relate perguntas

  • Por que `sync + drop_caches` não está descartando caches?

  • Por que `strace` não mostra que este processo está esperando por algo?

  • Tempo de criação do processo, shell script e overhead de chamada do sistema

  • Alto IO no host KVM/LXC travará o servidor, mas não no convidado (Proxmox/Debian)

  • Existe alguma maneira de matar ou terminar um processo em "suspensão de disco"

Sidebar

Stats

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

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk 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