file transfer over cifs to 64bit guest corrupts large files
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
QEMU |
Expired
|
Undecided
|
Unassigned |
Bug Description
qemu 4.0 compiled fom source.
vm called by
qemu-system-x86_64 -cpu qemu64 -smp 4 -m 4G -drive file=/data/
copying large files eg 2.4gb or reading them on a cifs mount in the guest causes corruption every time. For smaller files 40-60mb corruption is more than 50% of the time. tested by md5sum on cifs server, or on host machine vs. on guest vm.
corruption is seen only with 64bit guest using cifs with i82551 emulated network device
ie. 32bit guest using cifs with i82551 emulated network device gives no corruption.
changing the emulated device to vmxnet3 removes the data corruption (see below)
qemu-system-x86_64 -cpu qemu64 -smp 4 -m 4G -drive file=/data/
this corruption is repeatable. ie. I created new vm, call using top example, installed 64bit linux, mounted cifs share and copied 2.4gb file to /tmp then run md5sum "filecopied"
the md5sum is different every time. copy same file to the host, or to a 32bit guest with the same virtual network device and bridge and md5sums are correct. The host pysical network adapter is
lspci|grep Ether
1e:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 11)
physically connected via gigabit ethernet to cifs server (via gigabit switch)
On Fri, Jun 05, 2020 at 12:30:39PM -0000, timsoft wrote: images/ slack14. 2_64bit_ test.qcow2, format= qcow2 -cdrom /mnt/smb1/ slackware/ iso/slackware64 -14.2-install- dvd.iso -boot c -net nic,macaddr= 02:00:00: 11:11:17, model=i82551 -net bridge,br=br0 -enable-kvm -k en-gb -display vnc=:3 -monitor telnet: localhost: 7103,server, nowait, nodelay images/ slack14. 2_64bit_ test.qcow2, format= qcow2 -cdrom slackware/ iso/slackware64 -14.2-install- dvd.iso -boot c -net 02:00:00: 11:11:17, model=vmxnet3 -net bridge,br=br0 -enable- localhost: 7103,server, nowait, nodelay
> Public bug reported:
>
> qemu 4.0 compiled fom source.
> vm called by
> qemu-system-x86_64 -cpu qemu64 -smp 4 -m 4G -drive file=/data/
>
> copying large files eg 2.4gb or reading them on a cifs mount in the guest causes corruption every time. For smaller files 40-60mb corruption is more than 50% of the time. tested by md5sum on cifs server, or on host machine vs. on guest vm.
> corruption is seen only with 64bit guest using cifs with i82551 emulated network device
> ie. 32bit guest using cifs with i82551 emulated network device gives no corruption.
>
> changing the emulated device to vmxnet3 removes the data corruption (see
> below)
>
> qemu-system-x86_64 -cpu qemu64 -smp 4 -m 4G -drive
> file=/data/
> /mnt/smb1/
> nic,macaddr=
> kvm -k en-gb -display vnc=:3 -monitor
> telnet:
>
> this corruption is repeatable. ie. I created new vm, call using top example, installed 64bit linux, mounted cifs share and copied 2.4gb file to /tmp then run md5sum "filecopied"
> the md5sum is different every time. copy same file to the host, or to a 32bit guest with the same virtual network device and bridge and md5sums are correct. The host pysical network adapter is
> lspci|grep Ether
> 1e:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 11)
>
> physically connected via gigabit ethernet to cifs server (via gigabit
> switch)
Not a solution but some comments:
1. As a sanity-check you could try "nc <guest-ip> 1234 </path/to/file" on
the host and "nc -l -p 1234 >/tmp/file" in the guest. Netcat simply
sends/receives data over a TCP connection (it's a much simpler test
than CIFS). Is the checksum okay?
2. I don't know the CIFS network protocol, but if Wireshark can dissect
it then you could compare the flows between the vmxnet3 and the
i82551. This is only feasible if Wireshark can produce an unencrypted
conversation and the CIFS protocol doesn't have many protocol header
fields that differ between two otherwise identical sessions.
3. virtio-net is the most widely used and high-performance NIC model.
Other emulated NIC models are mainly there for very old guests that
lack virtio guest drivers.