Messages in this thread | | | Date | Sun, 17 Feb 2019 08:44:58 +0000 | From | "Richard W.M. Jones" <> | Subject | Re: nbd, nbdkit, loopback mounts and memory management |
| |
So not to dispute that this could be a bug, but I couldn't cause a deadlock. I wonder if you can see something wrong with my method?
*** Set up ***
- kernel 5.0.0-0.rc3.git0.1.fc30.x86_64 - nbd-client 3.19-1.fc30 - nbdkit 1.11.5 (git commit ef9d1978ce28)
Baremetal machine was booted with mem=2G to artificially limit the RAM. The machine has 64G of swap.
# free -m total used free shared buff/cache available Mem: 1806 329 1383 0 93 1357 Swap: 65535 179 65356
*** Method ***
I started nbdkit as a 4G RAM disk:
./nbdkit memory size=4G
This is implemented as a sparse array with a 2 level page table, and should allocate (using malloc) every time a new area of the disk is written to. Exact implementation is here: https://github.com/libguestfs/nbdkit/tree/master/common/sparse
I started nbd-client using the -swap option which uses mlockall(MCL_FUTURE) to lock the client into RAM.
nbd-client -b 512 -swap localhost /dev/nbd0
I then created a filesystem on the RAM disk, mounted it, and copied a 3G file into it. I tried this various ways, but the variation I was eventually happy with was:
mke2fs /dev/nbd0 mount /dev/nbd0 /tmp/mnt
dd if=/dev/zero of=/tmp/big bs=1M count=3000 cp /tmp/big /tmp/mnt/big
I couldn't get any kind of deadlock or failure in this test.
(Note that if you repeat the test several times, in theory you could delete the file and fstrim the filesystem, but when I was testing it to be sure I unmounted everything and killed and restarted nbdkit between each test.)
Rich.
-- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-p2v converts physical machines to virtual machines. Boot with a live CD or over the network (PXE) and turn machines into KVM guests. http://libguestfs.org/virt-v2v
| |