Performance em LVM no Linux

Encontrei muito poucos artigos que descreviam sobre problemas de performance ao utilizar LVM no Linux. Neste artigo explico o que é uma LVM e como identificar uma situação em que ela pode afetar o seu sistema.

O que é Logical Volume Management (LVM)?

O Logical Volume Management (LVM) é um recurso de extrema importância disponível no Kernel do Linux.

O LVM cria uma camada de software, que abstrai o storage/disco rígido e o sistema operacional, permitindo expandir ou reduzir a capacidade de armazenamento de um servidor de forma dinâmica, realizer snapshots, …

Existem três tipos de volumes lógicos LVM: volumes lineares, volumes Striped (distribuídos) e volumes espelhados. Vou descrever os dois primeiros:

  • LVM Lineares

Um volume linear agrega espaço de um ou mais volumes físicos em um volume lógico sequencialmente. Por exemplo, se você tiver dois discos de 60 GB, pode criar um volume lógico de 120 GB. O armazenamento físico é concatenado.

  • LVM Striped

Um volume Striped (distribuído) agrega espaço de um ou mais volumes físicos. Mas quando você grava dados em um LVM Striped, o sistema de arquivos distribui os dados nos volumes físicos subjacentes. O striping melhorar a eficiência da I/O de dados gravando e lendo em um número predeterminado de volumes físicos em paralelo.

Em resumo, nas LVM lineares a escrita é serial, isto é, vai ocupando os primeiros discos. Nas LVM Striped a escrita é divida entre os discos (riscos em Laranja).

Como identifica se o seu LVM é linear ou striped?

Por padrão no Linux, as LVM são lineares, a não ser que você especifique o tipo na hora da criação.

Utilize o comando lvs –segments para isso.

# lvs --segments
 LV           VG           Attr       #Str Type   SSize
   lv_docs      vg_docs      -wi-ao----    1 linear 475.00g
   lv_docs      vg_docs      -wi-ao----    1 linear 475.00g
   lv_docs      vg_docs      -wi-ao----    1 linear 475.00g
   lv_docs      vg_docs      -wi-ao----    1 linear 475.00g
   lv_docs      vg_docs      -wi-ao----    1 linear 100.00g

Neste exemplo o disco é linear.

Situação na vida real

Em um episódio no trabalho, eu tive que investigar um problema de performance. Durante essa investigação, conseguimos identificar a seguinte situação no Sistema Operacional:

O Volume /opt/documents possuía 5 discos (4x450GB e 1x100GB) (item 2 na figura abaixo) e estávamos utilizando apenas 873GB de 2.1TB (item 1 na figura abaixo).

Analisando o volume /opt/documents, observamos que o I/O se concentrava em 3 dos 5 discos (item 3 na figura abaixo), sendo muito superior no disco /dev/sde1, início dos logical extents, e mínimo nos discos /dev/sdh1 e /dev/sdi1, final do logical extents (item 2 na figura abaixo).

Em função da formatação linear do volume e de como o SO cria os arquivos, ocorre a concentração do I/O no início do volume, não distribuindo igualmente a operações de leitura/escrita entre os discos.

Comandos utilizados

# df -h
# lsblk
# iostat -x 5

Isso pode acontecer na Nuvem?

A reposta é SIM . Esse artigo mostra o funcionamento e a perfomance entre volumes lineares vs striped no ambiente da AWS –> https://sysadmincasts.com/episodes/27-lvm-linear-vs-striped-logical-volumes

Concluindo, se o seu sistema tem um requisito que precise de armazenamento extremamente rápido em uma única máquina, você deve observar essa configuração da LVM. Ao usar LVM striped, normalmente quanto mais discos você tiver, melhor será o desempenho, isto é, se você precisar de 2TB de uma combinação de 10 discos de 200GB vai performar melhor que 5 discos de 400GB, independente ser os discos forem SSD ou não.

Leia também:

Migre o seu Domino do AIX/Windows para o Linux

Trabalhei com o IBM Domino em diversas plataformas (AIX/Windows/Linux/zLinux). Em todas o Domino tinham ótima performance e um uptime muito alto.

Mas quais seriam os motivos pra recomendar isso?

Vendo a apresentação “Notes Domino 2016 Roadmap.pptx”, a mesma apresentava como plataformas estratégicas para o Domino o Microsoft Windows Server e RedHat Enterprise Linux (RHEL).

Além dessa questão de estratégia, vejo outros motivos para migrar de AIX/Windows para Linux:

  • Ferramentas DevOps, como shell e puppet, padronizam o ambiente Domino, melhorando a performance, uptime e reduzindo o TCO.
  • SmartCloud usa esta plataforma.
  • Verse On-Premises para Linux, já está disponível para essa plataforma desde Janeiro/2017
  • Traveler na mesma plataforma
  • IBM mail support for Microsoft Outlook (IMSMO) na mesma plataforma
  • Flexibilidade entre a quantidade de Domino Partitions (DPAR) por VM, isto é, melhor uso de recursos ou maior isolamento. Uma DPAR é semelhante a uma instância Oracle,Melhorar o isolamento.

Apesar de atualmente não ser suportado, vejo como futuro o uso de containers Docker para execução do Domino ao invés de Virtual Machines (VM). Sobre Domino em Docker, sugiro dar uma olhada nessa apresentação feita  Matteo Bisi and Daniele Vistalii, e ver o artigo How to Run IBM Domino Server in Docker Container.

Leia também:

Comprei um SD Card falsificado!

Comprei um cartão de memória SD Card de 8GB para deixar no carro. Consegui adicionar vários arquivos mp3, mas ao utilizar no carro somente algumas músicas que tocavam.

Ao pesquisar sobre como identificar se o cartão era falsificado, achei diversos vídeos no YouTube que analisavam a parte externa. Mas estava em busca de ferramentas (software) que investigavam tal informação mais a fundo.

As aplicações não checam por informações do fabricante, mas validam sobre a quantidade de dados que é  armazenada no dispositivo. A mais recomendada foi o software H2testw, que pode ser baixada de vários sites, e possui apenas a versão para MS Windows.

Fui atras de uma aplicação que roda-se no meu Linux. Encontrei uma bem simples e eficiente denominada F3 – Fight Flash Fraud. Vou mostrar como esta última funciona.

Primeiramente vamos compilar o aplicativo:

1) Faca o download F3 (link)

2) Descompacte o arquivo em um diretório

3) Compile o aplicativo com o comando “make linux”

$ make linux
gcc -Wall -c utils.c
gcc -Wall -c f3write.c
gcc -Wall -c f3read.c
gcc -o f3write utils.o f3write.o -lm
gcc -o f3read utils.o f3read.o

Agora vamos testar no SD Card de 8GB.

O F3 tem dois aplicativos, o primeiro aplicativo (f3write) grava vários arquivos no SD Card para preencher todo o espaço do cartão.

$ sudo ./f3write /run/media/ebasso/0332-9EF8/
Free space: 7.52 GB
Creating file 1.fff … OK!
Creating file 2.fff … OK!
Creating file 3.fff … OK!
Creating file 4.fff … OK!
Creating file 5.fff … OK!
Creating file 6.fff … OK!
Creating file 7.fff … OK!
Creating file 8.fff … 97.6OK!
Free space: 0.00 Byte
Average writing speed: 7.21 MB/s

Aqui posso ver que tenho 7.52 GB livre e o f3write criou 8 arquivos.

Ao executar o segundo aplicativo (f3read), ele irá ler estes arquivos gravados e verificar pelo que estão com blocos defeitos, informando no final o tamanho real disponível.

$ sudo ./f3read /run/media/ebasso/0332-9EF8/
[sudo] password for ebasso:
SECTORS ok/corrupted/changed/overwritten
Validating file 1.fff … 947967/ 1149185/ 0/ 0
Validating file 2.fff … 0/ 2097152/ 0/ 0
Validating file 3.fff … 0/ 2097152/ 0/ 0
Validating file 4.fff … 0/ 2097152/ 0/ 0
Validating file 5.fff … 0/ 2097152/ 0/ 0
Validating file 6.fff … 0/ 2097152/ 0/ 0
Validating file 7.fff … 0/ 2097152/ 0/ 0
Validating file 8.fff … 43201/ 1042175/ 0/ 0

Data OK: 483.97 MB (991168 sectors)
Data LOST: 7.04 GB (14774272 sectors)
Corrupted: 7.04 GB (14774272 sectors)
Slightly changed: 0.00 Byte (0 sectors)
Overwritten: 0.00 Byte (0 sectors)
Average reading speed: 8.73 MB/s

Para a minha surpresa, vi que o meu SD Card consegue armazenar apenas 483 MB!!! 🙁

Como comprei de um famoso site de vendas da China, ainda preciso ver como  fazer para trocar.

Mas por enquanto fica a dica!!

Leia também: