Preciso mover um grande bloco de dados para um volume lógico sem nenhum sistema de arquivos. Ao fazer isso, notei que em cada gravação há uma leitura. Isso é algo que não vejo para gravações em arquivos regulares. Eu reduzi para as seguintes etapas:
### Creat logical volume
lvremove -f /dev/VolGroup1/data_test
lvcreate -L 100G -n data_test VolGroup1
### Start dumping data
nohup dd if=/dev/zero of=/dev/VolGroup1/data_test bs=1k count=100M &
### Check IO
iostat -h -d -k -N -y -j PATH -p /dev/VolGroup1/data_test 10 1
Observe muitas leituras nesse novo volume por dd
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
dm-9
56900.60 110719.28 116882.72 1108300 1169996
Alguém tem ideia de por que isso está acontecendo? Os sistemas subjacentes são raid10 de SSDs.
Parece que o LVM expõe um tamanho mínimo de E/S. Se você tentar gravar em menos que (um múltiplo) desse tamanho de E/S, o sistema primeiro lerá o delta para preencher o último bloco, atualizará seu conteúdo e finalmente o reescreverá.
Embora eu não tenha conseguido identificar a documentação exata sobre isso, encontrei uma referência no Redhat :
Algumas pesquisas levam a (aqui usando dm-1):
Então se pra você, substituindo por
dm-9
dá por exemplo também 4096 e 0, use um tamanho de 4k. Ou então, se houver 4096 e um valor maior, use esse valor maior para desempenho ideal.Portanto, se você aumentar de acordo com esses valores, o
bs=
parâmetro deverá ser zero lido e a velocidade de gravação melhorará.