ZFS

Configurando o cache ZFS para E / S de alta velocidade

Configurando o cache ZFS para E / S de alta velocidade

Configurando o Cache em seu pool ZFS

Se você leu nossas postagens anteriores sobre noções básicas do ZFS, você sabe agora que este é um sistema de arquivos robusto. Ele executa somas de verificação em cada bloco de dados que está sendo escrito no disco e metadados importantes, como as próprias somas de verificação, são gravados em vários lugares diferentes. O ZFS pode perder seus dados, mas é garantido que nunca devolverá dados errados, como se fossem os certos.

A maior parte da redundância de um pool ZFS vem dos VDEVs subjacentes. O mesmo é verdadeiro para o desempenho do pool de armazenamento. O desempenho de leitura e gravação pode melhorar muito com a adição de SSDs de alta velocidade ou dispositivos NVMe. Se você usou discos híbridos em que um SSD e um disco giratório são agrupados como uma única peça de hardware, você sabe o quão ruim são os mecanismos de cache de nível de hardware. O ZFS não é nada assim, por causa de vários fatores, que exploraremos aqui.

Existem dois caches diferentes que um pool pode utilizar:

  1. ZFS Intent Log, ou ZIL, para armazenar operações WRITE.
  2. ARC e L2ARC que se destinam a operações READ.

Gravações síncronas e assíncronas

O ZFS, como a maioria dos outros sistemas de arquivos, tenta manter um buffer de operações de gravação na memória e, em seguida, gravá-lo nos discos em vez de gravá-lo diretamente nos discos. Isso é conhecido como assíncrono escrever e dá ganhos de desempenho decentes para aplicativos que são tolerantes a falhas ou onde a perda de dados não causa muitos danos. O sistema operacional simplesmente armazena os dados na memória e informa ao aplicativo, que solicitou a gravação, que a gravação foi concluída. Este é o comportamento padrão de muitos sistemas operacionais, mesmo ao executar ZFS.

No entanto, permanece o fato de que em caso de falha do sistema ou perda de energia, todas as gravações em buffer na memória principal são perdidas. Assim, os aplicativos que desejam consistência sobre o desempenho podem abrir arquivos em síncrono modo e, em seguida, os dados só são considerados gravados quando estiverem realmente no disco. A maioria dos bancos de dados e aplicativos como NFS dependem de gravações síncronas o tempo todo.

Você pode definir a bandeira: sync = always para tornar as gravações síncronas o comportamento padrão para qualquer conjunto de dados.

$ zfs set sync = always mypool / dataset1

Claro, você pode desejar ter um bom desempenho, independentemente de os arquivos estarem ou não no modo síncrono. É aí que a ZIL entra em cena.


ZFS Intent Log (ZIL) e dispositivos SLOG

O log de intenção do ZFS se refere a uma parte do pool de armazenamento que o ZFS usa para armazenar dados novos ou modificados primeiro, antes de distribuí-los por todo o pool de armazenamento principal, eliminando todos os VDEVs.

Por padrão, uma pequena quantidade de armazenamento é sempre extraída do pool para agir como ZIL, mesmo quando você está usando apenas um monte de discos giratórios para seu armazenamento. No entanto, você pode fazer melhor se tiver um pequeno NVMe ou qualquer outro tipo de SSD à sua disposição.

O armazenamento pequeno e rápido pode ser usado como um Log de Intenção Separado (ou SLOG), que é onde os dados recém-chegados seriam armazenados temporariamente antes de serem descarregados para o armazenamento principal maior do pool. Para adicionar um dispositivo slog, execute o comando:

$ zpool add tank log ada3

Onde tanque é o nome da sua piscina, registro é a palavra-chave que diz ao ZFS para tratar o dispositivo ada3 como um dispositivo SLOG. O nó do dispositivo do seu SSD pode não ser necessariamente ada3, use o nome de nó correto.

Agora você pode verificar os dispositivos em seu pool conforme mostrado abaixo:

Você ainda pode estar preocupado com a possibilidade de os dados em uma memória não volátil falharem, se o SSD falhar. Nesse caso, você pode usar vários SSDs espelhando uns aos outros ou em qualquer configuração RAIDZ.

$ zpool adicionar espelho de registro de tanque ada3 ada4

Para a maioria dos casos de uso, os pequenos 16 GB a 64 GB de armazenamento flash realmente rápido e durável são os candidatos mais adequados para um dispositivo SLOG.


Cache de substituição adaptável (ARC) e L2ARC

Ao tentar armazenar em cache as operações de leitura, nosso objetivo muda. Em vez de garantir um bom desempenho, bem como transações confiáveis, agora o motivo do ZFS muda para prever o futuro. Isso significa armazenar em cache as informações que um aplicativo exigiria em um futuro próximo e, ao mesmo tempo, descartar aquelas que serão necessárias mais adiante no tempo.

Para fazer isso, uma parte da memória principal é usada para armazenar dados em cache que foram usados ​​recentemente ou os dados estão sendo acessados ​​com mais frequência. É daí que vem o termo Adaptive Replacement Cache (ARC). Além do armazenamento em cache de leitura tradicional, onde apenas os objetos usados ​​mais recentemente são armazenados em cache, o ARC também presta atenção na frequência com que os dados foram acessados.

L2ARC, ou Nível 2 ARC, é uma extensão do ARC. Se você tiver um dispositivo de armazenamento dedicado para atuar como seu L2ARC, ele armazenará todos os dados que não são muito importantes para permanecer no ARC, mas ao mesmo tempo esses dados são úteis o suficiente para merecer um lugar no mais lento que a memória Dispositivo NVMe.

Para adicionar um dispositivo como L2ARC ao seu pool ZFS, execute o comando:

$ zpool add tank cache ada3

Onde tanque é o nome da sua piscina e ada3 é o nome do nó do dispositivo para o seu armazenamento L2ARC.


Resumo

Para encurtar a história, um sistema operacional geralmente armazena em buffer as operações de gravação na memória principal, se os arquivos forem abertos no modo assíncrono. Isso não deve ser confundido com o cache de gravação real do ZFS, ZIL.

ZIL, por padrão, é uma parte do armazenamento não volátil do pool onde os dados vão para armazenamento temporário antes de serem espalhados adequadamente por todos os VDEVs. Se você usar um SSD como um dispositivo ZIL dedicado, ele é conhecido como SLOG. Como qualquer VDEV, SLOG pode estar na configuração espelho ou raidz.

O cache de leitura, armazenado na memória principal, é conhecido como ARC. No entanto, devido ao tamanho limitado da RAM, você sempre pode adicionar um SSD como um L2ARC, onde coisas que não cabem na RAM são armazenadas em cache.

Instale o último jogo de estratégia OpenRA no Ubuntu Linux
OpenRA é um motor de jogo de estratégia em tempo real Libre / Free que recria os primeiros jogos Westwood como o clássico Command & Conquer: Red Alert...
Instale o emulador Dolphin mais recente para Gamecube e Wii no Linux
O Dolphin Emulator permite que você jogue seus jogos de Gamecube e Wii escolhidos em computadores pessoais Linux (PC). Sendo um emulador de jogo disp...
Como usar o GameConqueror Cheat Engine no Linux
O artigo cobre um guia sobre como usar o mecanismo de cheat GameConqueror no Linux. Muitos usuários que jogam no Windows costumam usar o aplicativo “C...