Após minha experiência anterior de migração de discos VM IDE para VirtIO SCSI , criei uma VM Win10 no virt-manager, com o disco primário sendo um disco SCSI da configuração. No virt-manager, criei um controlador VirtIO SCSI:
<controller type="scsi" index="0" model="virtio-scsi">
<address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0"/>
</controller>
Criei então um disco ( SCSI Disk 1 ) que, segundo o virt-manager, está usando o tipo de barramento SCSI :
<disk type="file" device="disk">
<driver name="qemu" type="qcow2" discard="unmap"/>
<source file="/var/lib/libvirt/images/win10-enterprise.qcow2"/>
<target dev="sda" bus="scsi"/>
<boot order="2"/>
<address type="drive" controller="0" bus="0" target="0" unit="0"/>
</disk>
Durante a configuração do Win10, montei o RedHat VirtIO ISO e instalei os drivers para que o Win10 pudesse ser instalado no disco SCSI:
Após a instalação, adicionei outro disco ( VirtIO Disk 1 ) à VM. Desta vez no virt-manager, escolhi VirtIO como tipo de barramento:
<disk type="file" device="disk">
<driver name="qemu" type="qcow2" discard="unmap"/>
<source file="/var/lib/libvirt/images/win10-enterprise-1.qcow2"/>
<target dev="vda" bus="virtio"/>
<address type="pci" domain="0x0000" bus="0x06" slot="0x00" function="0x0"/>
</disk>
O disco VirtIO não parece estar vinculado a nenhum dos controladores listados na visão geral da VM no virt-manager. Presumi que este disco fosse um dispositivo VirtIO Block .
Na VM convidada Win10, notei no Gerenciador de dispositivos que o disco SCSI primário é rotulado como um disco "QEMU SCSI" e o disco VirtIO como um disco "RedHat VirtIO SCSI" . O controlador de armazenamento VirtIO usado para o disco SCSI é rotulado como "controlador Red Hat VirtIO SCSI" :
Estou confuso por que o disco SCSI não é rotulado como um disco VirtIO SCSI e como o disco VirtIO (suposto ser um bloco VirtIO) é um disco "VirtIO SCSI" sem estar conectado a qualquer tipo de controlador SCSI.
P: Existe alguma diferença entre os discos que configurei para esta VM?
P: Do ponto de vista do virt-manager, qual é a diferença entre os discos que usam os tipos de barramento VirtIO e SCSI e como eles são representados em uma VM?
P: Há alguma diferença de desempenho entre discos que usam diferentes tipos de barramento?
"VirtIO" é uma estrutura geral de dispositivos PCI virtuais que visam oferecer maior desempenho do que dispositivos emulados tradicionais (além de ser mais simples - o hardware físico geralmente tem muitos detalhes que um dispositivo virtual não precisa).
Existem dois dispositivos de armazenamento VirtIO diferentes:
Dispositivo simples de 'acesso ao bloco VirtIO' totalmente personalizado, com pouca ou nenhuma relação com dispositivos de armazenamento físico comuns. Isso aparece como
/dev/vd*
no Linux, usa oviostor
driver no Windows e está limitado a um disco por slot PCI.Dispositivo completo 'Controlador SCSI VirtIO' que se comporta como um controlador de disco SCSI típico com os mesmos conceitos (comandos SCSI, destinos, LUNs). Isso aparece como
/dev/sd*
no Linux (vioscsi
no Windows) e pode expor vários discos por meio de um único controlador.Embora ambos exijam drivers personalizados no Windows (não há driver padrão para controladores SCSI como existe para SATA AHCI), no último caso, os drivers convidados 'vioscsi' podem simplesmente passar pelos comandos SCSI para o hipervisor [e o hipervisor pode, em teoria, passe-os para um disco SAS físico], enquanto no caso do "bloco VirtIO" os drivers convidados precisam fingir ser um disco SCSI para que o Windows saiba como lidar com ele - muitos dos comandos SCSI o manuseio é feito (emulado) dentro do driver 'viostor'.
O driver do Windows finge ser SCSI, porque o sistema operacional já sabe como se comunicar com um disco SCSI, portanto, embora isso signifique que o driver "viostor" precisa emular o tratamento de comandos SCSI, também significa que o driver não precisa lidar com vários outros especificidades – pode permitir que o suporte SCSI do sistema operacional existente lide com isso.
Ambos estão conectados como dispositivos PCI, mas:
Os discos "bloco VirtIO" são sempre um por slot PCI, sendo o próprio dispositivo PCI um tipo personalizado de dispositivo de armazenamento. Os drivers "viostor" do Windows fingem que é um disco SCSI (lidando com os comandos SCSI dentro do driver), enquanto os drivers do Linux o expõem como um
/dev/vd*
dispositivo personalizado.Os discos "VirtIO SCSI" podem compartilhar um controlador, sendo os discos dispositivos SCSI acessíveis por meio desse controlador. Tanto os drivers "vioscsi" do Windows quanto os drivers do Linux precisam apenas inicializar o controlador SCSI, mas retransmitem os comandos reais entre o convidado e o hipervisor (ou o convidado e o disco físico), daí o rótulo 'passagem SCSI'.
Não deve haver diferenças significativas de desempenho; Ouvi dizer que, em teoria, o "bloco VirtIO" pode ter um desempenho melhor, mas em situações em que não precisei extrair os últimos bits de desempenho, prefiro o "VirtIO SCSI" devido à sua integração mais limpa.