Estou muito confuso com o comportamento do QEMU / KVM. Eu tenho um servidor - cerca de 100GB de RAM, 2 CPU - 6 core + HT e três HDDs - um para raiz, e dois para BTRFS-espelho para máquinas virtuais (HGST HDN724030ALE640 se for matéria). OS - Debian 9.1, QEMU (tipo de disco - raw, IO - nativo).
Então, o servidor está ocioso - ele é executado apenas uma VM. Esta máquina virtual (Debian 9.1, 16GB RAM, 4 VCPU), que executa bancos de dados PostgreSQL e MySQL. Consultas recebem apenas um - PostgreSQL (poucas inserções por segundo). E ... demora muito tempo para fazer essas inserções. Eu escrevi um script simples, que insere dados em uma tabela muito simples, sem quaisquer restrições ou índices (três campos varchar). Desempenho de script - cerca de 1-2 inserções por segundo. É extremamente lento!
Primeiro, achei que fosse problema do Postgres. Mas eu reescrevi meu script para o MySQL e ele mostra o mesmo resultado. Então, eu crio uma nova VM no FreeBSD, instalo o PostgreSQL, crio o mesmo banco de dados e tabela da VM Linux, e verifico o desempenho novamente - 1-2 inserções por segundo.
Ok. Vamos ver no iostat e no iotop. O iotop mostra que o processo do Postgres, que serve minhas consultas de inserção, consome cerca de 60-70% do IO (para simples inserções!) na VM. iostat -x diz que agora usa cerca de 40-45 gravações / s na VM e cerca de 80-90 w / s na máquina host.
Eu tentei avaliar a velocidade de gravação com o utilitário dd, assim:
dd if=/dev/urandom of=/tmp/fooo.bar bs=1M count=1000
e é feito cerca de 5-6 segundos.
Em seguida, enquanto o script executa cerca de 100 inserções, eu verifico
/proc/[Postgres_PID]/io file:
rchar: 138544
wchar: 114689
syscr: 39
syscw: 15
read_bytes: 0
write_bytes: 540672
cancelled_write_bytes: 0
O que estou fazendo de errado? Por que eu tenho um desempenho de disco tão lento?
Tags debian qemu io linux kvm-virtualization