Posso fazer o cache de um ataque mdadm com um ssd?

4

Eu tenho uma matriz de 1TB configurada em raid 1 usando mdadm no Ubuntu 8 para armazenar arquivos de missão crítica. Eu gostaria de acelerar a leitura / gravação, especialmente para arquivos grandes, armazenando em cache em um SSD. Isso é possível? O mdadm contém um recurso para armazenar em cache em outra unidade?

Como alternativa, há algo que eu deva fazer para atribuir memória RAM comum ao cache? Há 4GB de RAM e os arquivos a serem gravados raramente são maiores que 1GB, então estou pensando que as gravações devem ser bem rápidas apenas com o armazenamento em cache da RAM.

Qualquer ajuda será muito apreciada.

    
por Robert Frost 01.02.2013 / 12:56

1 resposta

6

  

O mdadm contém um recurso para armazenar em cache em outra unidade?

Não, a invasão do software Linux (gerenciada por mdadm ) é apenas para criar um conjunto de discos para fins de redundância . 1

Eu conheço dois projetos que permitirão que você faça isso: dm-cache e flashcache (ambos relativamente experimentais). Ele permite que você use seu SSD como cache (leitura e gravação) para seus discos rígidos mais lentos ou qualquer outro dispositivo de bloco, como um dispositivo md. Ambos oferecem grande ganho de desempenho e são muito ajustáveis para encontrar equilíbrio em durabilidade e desempenho.

Infelizmente, isso ainda não está empacotado ou incluído no kernel a partir deste momento. Portanto, não é uma tarefa muito simples de se fazer no Ubuntu. Sinta-se à vontade para sujar as mãos, mas lembre-se de que é um software experimental e difícil de obter suporte.

Perguntas relacionadas:

1 No entanto, você pode ditar o kernel para usar uma das unidades para leitura primariamente, para obter alguma melhoria no desempenho de leitura, mas isso não é da mesma forma que um cache SSD real. Veja esta resposta de Gilles sobre como fazer isso.

  

há algo que devo fazer para atribuir memória RAM comum ao armazenamento em cache?

Isso já está habilitado em todo kernel do Linux! Você pode ver a quantidade de páginas armazenadas em cache usando free :

free -m
             total       used       free     shared    buffers     cached
Mem:         24047      17703       6343          0       6492       3550
-/+ buffers/cache:       7660      16386
Swap:         3811          0       3811

Aqui você vê que tem agora 3550 MB de páginas (nível de sistema de arquivos) em cache e 6492 MB de páginas (nível de dispositivo de bloco) em minha máquina. As leituras para uma delas não resultarão em uma leitura do disco.

Para demonstrar os caches em nível de bloco, tente este comando:

hdparm -Tt /dev/md127  # replace with your device - try both disks and md devices!

/dev/md127:
 Timing cached reads:   8624 MB in  2.00 seconds = 4313.50 MB/sec
 Timing buffered disk reads: 282 MB in  2.93 seconds =  96.31 MB/sec

O primeiro resultado é claramente proveniente de caches na memória, enquanto o segundo é lido diretamente do disco.

Para demonstrar o armazenamento em cache do sistema de arquivos usando dd :

# first time
dd if=/home/gert/bigfile.img of=/dev/null 
5927206912 bytes (5.9 GB) copied, 25.9253 s, 229 MB/s

# second time
dd if=/home/gert/bigfile.img of=/dev/null 
5927206912 bytes (5.9 GB) copied, 4.91444 s, 1.2 GB/s

# third time, with file system cache disabled using iflag=direct
# yields results similar to first one
# Try using a bigger blocksize (bs=10M for example) if you're seeing very low speeds
dd if=/home/gert/bigfile.img of=/dev/null iflag=direct
    
por gertvdijk 01.02.2013 / 13:19