[vfio-users] RLIMIT_MEMLOCK exceeded when enabling intremap

Prasun Ratn prasun.ratn at gmail.com
Tue Jul 3 13:12:04 UTC 2018


Hi

I am adding an IOMMU device using the following libvirt syntax (taken
from https://libvirt.org/formatdomain.html#elementsIommu)

    <iommu model='intel'>
      <driver intremap='on'/>
    </iommu>

When I try to start the VM, it fails. If I remove the above 3 lines it
starts fine.

    error: Failed to start domain rhel7.3-32T-nvme-ich9
    error: internal error: qemu unexpectedly closed the monitor:
2018-06-28T15:24:31.401831Z qemu-kvm: -device
vfio-pci,host=82:00.0,id=hostdev1,bus=pcie.0,addr=0xa: VFIO_MAP_DMA:
-12
    2018-06-28T15:24:31.401854Z qemu-kvm: -device
vfio-pci,host=82:00.0,id=hostdev1,bus=pcie.0,addr=0xa:
vfio_dma_map(0x556478bc0820, 0xc0000, 0x7ff40000, 0x7fd94e4c0000) =
-12 (Cannot allocate memory)
    2018-06-28T15:24:31.450793Z qemu-kvm: -device
vfio-pci,host=82:00.0,id=hostdev1,bus=pcie.0,addr=0xa: VFIO_MAP_DMA:
-12
    2018-06-28T15:24:31.450804Z qemu-kvm: -device
vfio-pci,host=82:00.0,id=hostdev1,bus=pcie.0,addr=0xa:
vfio_dma_map(0x556478bc0820, 0x100000000, 0x180000000, 0x7fd9ce400000)
= -12 (Cannot allocate memory)
    2018-06-28T15:24:31.450878Z qemu-kvm: -device
vfio-pci,host=82:00.0,id=hostdev1,bus=pcie.0,addr=0xa: vfio error:
0000:82:00.0: failed to setup container for group 37: memory listener
initialization failed for container: Cannot allocate memory

In dmesg I see this:

    [189435.289113] vfio_pin_pages_remote: RLIMIT_MEMLOCK (9663676416) exceeded
    [189435.338165] vfio_pin_pages_remote: RLIMIT_MEMLOCK (9663676416) exceeded

I have enough free memory (I think) and at the failing point enough
memory seems to be available.

    $ free -h
                  total        used        free      shared
buff/cache   available
    Mem:           125G        1.4G        123G         17M
1.1G        123G
    Swap:          1.0G          0B        1.0G

Here's the ulimit -l output (I changed limits.conf to set memlock to
unlimited for qemu user and qemu group)

    $ ulimit -l
    unlimited


    $ sudo -u qemu sh -c "ulimit -l"
    unlimited

memlock limit using systemctl

    $ systemctl show libvirtd.service | grep LimitMEMLOCK
    LimitMEMLOCK=18446744073709551615

SELinux is disabled

    $ sestatus
    SELinux status:                 disabled


libvirt and kernel version

    $ virsh version
    Compiled against library: libvirt 4.1.0
    Using library: libvirt 4.1.0
    Using API: QEMU 4.1.0
    Running hypervisor: QEMU 2.9.0

    $ uname -r
    3.10.0-693.5.2.el7.x86_64

    $ cat /etc/redhat-release
    Red Hat Enterprise Linux Server release 7.4 (Maipo)

Any idea how to figure out why we are exceeding the memlock limit?

Thanks
Prasun




More information about the vfio-users mailing list