On 02-Feb-18 8:51 PM, Ravi Kerur wrote:


On Fri, Feb 2, 2018 at 12:21 PM, Ravi Kerur <rke...@gmail.com <mailto:rke...@gmail.com>> wrote:



    On Fri, Feb 2, 2018 at 2:28 AM, Burakov, Anatoly
    <anatoly.bura...@intel.com <mailto:anatoly.bura...@intel.com>> wrote:

        On 01-Feb-18 7:26 PM, Ravi Kerur wrote:



            On Thu, Feb 1, 2018 at 2:10 AM, Burakov, Anatoly
            <anatoly.bura...@intel.com
            <mailto:anatoly.bura...@intel.com>
            <mailto:anatoly.bura...@intel.com
            <mailto:anatoly.bura...@intel.com>>> wrote:

                 On 31-Jan-18 9:51 PM, Ravi Kerur wrote:


                     Hi Anatoly,

                     Thanks. I am following wiki link below which uses
            vIOMMU with
                     DPDK as a use-case and instantiate VM as specified
            with Q35
                     chipset in Qemu.

            https://wiki.qemu.org/Features/VT-d
            <https://wiki.qemu.org/Features/VT-d>
                     <https://wiki.qemu.org/Features/VT-d
            <https://wiki.qemu.org/Features/VT-d>>

                     Qemu-version is 2.11
                     Host kernel 4.9
                     Guest kernel 4.4

                     I can only guess that guest kernel needs an upgrade
            in my setup
                     to work correctly, if versions on my setup rings a
            bell on not
                     having support kindly let me know.

                     When 'modprobe vfio enable_unsafe_noiommu_node=Y'
            is executed on
                     guest I get following error
                     ...
                     vfio: unknown parameter
            'enable_unsafe_noiommu_node' ignored
                     ...

                     in guest.

                     Thanks.


                 AFAIK kernel 4.4 should have noiommu mode - it was
            introduced in
                 3.1x days. However, in order for that to work, kernel
            also has to be
                 built with this mode enabled. My guess is, whoever is
            the supplier
                 of your kernel, did not do that. You should
            double-check the kernel
                 configuration of your distribution.

                 However, if you have vIOMMU in QEMU, you shouldn't need
            noiommu mode
                 - "regular" vfio should work fine. noiommu mode should
            only be
                 needed if you know you don't have IOMMU enabled in your
            kernel, and
                 even if you can't enable it, you can still use igb_uio.

            Hi Anatoly,

            Do you suggest I take this discussion to kvm/qemu mailing
            list as I am not sure which component has the issue? I check
            dmesg for BIOS physical memory map and address reported as
            fault by DMAR is reported by BIOS as usable on both host and vm.

            [ 4539.597737] DMAR: [DMA Read] Request device [04:10.0]
            fault addr *33a128000 *[fault reason 06] PTE Read access is
            not set

            dmesg | grep BIOS
            [    0.000000] e820: BIOS-provided physical RAM map:
            [    0.000000] BIOS-e820: [mem
            0x0000000000000000-0x000000000009afff] usable
            [    0.000000] BIOS-e820: [mem
            0x000000000009b000-0x000000000009ffff] reserved
            [    0.000000] BIOS-e820: [mem
            0x00000000000e0000-0x00000000000fffff] reserved
            [    0.000000] BIOS-e820: [mem
            0x0000000000100000-0x000000007938afff] usable
            [    0.000000] BIOS-e820: [mem
            0x000000007938b000-0x000000007994bfff] reserved
            [    0.000000] BIOS-e820: [mem
            0x000000007994c000-0x000000007999cfff] ACPI data
            [    0.000000] BIOS-e820: [mem
            0x000000007999d000-0x0000000079f7dfff] ACPI NVS
            [    0.000000] BIOS-e820: [mem
            0x0000000079f7e000-0x000000007bd37fff] reserved
            [    0.000000] BIOS-e820: [mem
            0x000000007bd38000-0x000000007bd38fff] usable
            [    0.000000] BIOS-e820: [mem
            0x000000007bd39000-0x000000007bdbefff] reserved
            [    0.000000] BIOS-e820: [mem
            0x000000007bdbf000-0x000000007bffffff] usable
            [    0.000000] BIOS-e820: [mem
            0x000000007c000000-0x000000008fffffff] reserved
            [    0.000000] BIOS-e820: [mem
            0x00000000fed1c000-0x00000000fed44fff] reserved
            [    0.000000] BIOS-e820: [mem
            0x00000000ff000000-0x00000000ffffffff] reserved
            [*    0.000000] BIOS-e820: [mem
            0x0000000100000000-0x000000407fffffff] usable*
            *
            *
            Kindly let me know your inputs.

            Thanks.


                 --     Thanks,
                 Anatoly



        The "PTE Read not set" error usually indicates that you are
        trying to use a non-IOMMU method when you have IOMMU enabled
        (i.e. trying to use igb_uio when IOMMU is on). That, to me,
        indicates that you do have IOMMU emulation enabled.

        I would go about it this way.

        First, i'd ensure that your VM has IOMMU emulation enabled and
        working. You have mentioned that your QEMU version should have
        IOMMU emulation, so let's assume that's the case.

        I am not sure of the exact command-line needed to activate the
        vIOMMU emulation, but assuming your VM emulates an Intel
        processor, your kernel command-line should have "iommu=on
        intel_iommu=on" in it. Check /etc/default/grub for
        GRUB_CMDLINE_LINUX_DEFAULT value, and if the above values are
        not in there, add the above changes, do "update-grub" and reboot
        your VM.

        If it already did have the necessary kernel configuration, do
        "dmesg | grep IOMMU" and look for "IOMMU Enabled". That should
        tell you that IOMMU is enabled and working in the kernel.

        After that, you can modprobe vfio and vfio-pci, bind NICs to it,
        and it should be working. Please bear in mind that all of that
        is how i would've gone about it if i had similar problems on
        baremetal, but i'm hoping all of it is applicable to VM's. So,
        either disable IOMMU and use igb_uio, or enable IOMMU and use
        VFIO. Both will work.


    Thanks for your help so far on this. I have everything enabled as
    you have mentioned in your email. Below is the error from EAL when
    DPDK is run on a VM. I am referring EAL code to check why it is failing.

    ************VM DPDK errors***********
    EAL: Detected 14 lcore(s)
    EAL: Probing VFIO support...
    EAL: VFIO support initialized
    EAL: WARNING: cpu flags constant_tsc=yes nonstop_tsc=no -> using
    unreliable clock cycles !
    EAL: PCI device 0000:00:07.0 on NUMA socket -1
    EAL:   Invalid NUMA socket, default to 0
    EAL:   probe driver: 8086:10ed net_ixgbe_vf
    EAL:   using IOMMU type 1 (Type 1)
    *EAL:   RTE_IOVA_VA 140051367329792
    EAL:   cannot set up DMA remapping, error 14 (Bad address)
    EAL:   0000:00:07.0 DMA remapping failed, error 14 (Bad address)*
    EAL: Requested device 0000:00:07.0 cannot be used
    EAL: PCI device 0000:03:00.0 on NUMA socket -1
    EAL:   Invalid NUMA socket, default to 0
    EAL:   probe driver: 1af4:1041 net_virtio
    EAL: PCI device 0000:04:00.0 on NUMA socket -1
    EAL:   Invalid NUMA socket, default to 0
    EAL:   probe driver: 1af4:1041 net_virtio
    EAL: PCI device 0000:05:00.0 on NUMA socket -1
    EAL:   Invalid NUMA socket, default to 0
    EAL:   probe driver: 1af4:1041 net_virtio
    EAL: No probed ethernet devices
    Interactive-mode selected
    USER1: create a new mbuf pool <mbuf_pool_socket_0>: n=171456,
    size=2176, socket=0


    ********************VM************
    root@sriov-ravi-01:~# lsmod | grep vfio
    *vfio_pci               40960  1
    vfio_virqfd            16384  1 vfio_pci
    vfio_iommu_type1       20480  1
    vfio                   28672  5 vfio_iommu_type1,vfio_pci
    irqbypass              16384  3 kvm,vfio_pci*
    root@sriov-ravi-01:~# dmesg | grep -e DMAR -e IOMMU
[    0.000000] ACPI: DMAR 0x000000007FFE209D 000050 (v01 BOCHS BXPCDMAR 00000001 BXPC 00000001)
    *[    0.000000] DMAR: IOMMU enabled*
    [    9.423839] DMAR: Host address width 39
    [    9.424640] DMAR: DRHD base: 0x000000fed90000 flags: 0x1
    [    9.425754] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap
    12008c22260286 ecap f00f5e
    [    9.427314] DMAR: ATSR flags: 0x1
    [    9.428047] DMAR-IR: IOAPIC id 0 under DRHD base  0xfed90000 IOMMU 0
    [    9.429255] DMAR-IR: Queued invalidation will be enabled to
    support x2apic and Intr-remapping.
    [    9.433096] DMAR-IR: Enabled IRQ remapping in x2apic mode
    [   11.167334] DMAR: No RMRR found
    [   11.168855] DMAR: dmar0: Using Queued invalidation
    [   12.119060] DMAR: Setting RMRR:
    [   12.123734] DMAR: Prepare 0-16MiB unity mapping for LPC
    [   12.124787] DMAR: Setting identity map for device 0000:00:1f.0
    [0x0 - 0xffffff]
    [   12.392826] DMAR: Intel(R) Virtualization Technology for Directed I/O
    root@sriov-ravi-01:~# dpdk-devbind -s

    Network devices using DPDK-compatible driver
    ============================================
    *0000:00:07.0 '82599 Ethernet Controller Virtual Function 10ed'
    drv=vfio-pci unused=*

    Network devices using kernel driver
    ===================================
    0000:03:00.0 'Device 1041' if=eth0 drv=virtio-pci unused=vfio-pci
    *Active*
    0000:04:00.0 'Device 1041' if=eth1 drv=virtio-pci unused=vfio-pci
    0000:05:00.0 'Device 1041' if=eth2 drv=virtio-pci unused=vfio-pci

    Other Network devices
    =====================
    <none>

    Crypto devices using DPDK-compatible driver
    ===========================================
    <none>

    Crypto devices using kernel driver
    ==================================
    <none>

    Other Crypto devices
    ====================
    <none>

    Eventdev devices using DPDK-compatible driver
    =============================================
    <none>

    Eventdev devices using kernel driver
    ====================================
    <none>

    Other Eventdev devices
    ======================
    <none>

    Mempool devices using DPDK-compatible driver
    ============================================
    <none>

    Mempool devices using kernel driver
    ===================================
    <none>

    Other Mempool devices
    =====================
    <none>
    root@sriov-ravi-01:~#

    root@sriov-ravi-01:/home/deployuser/dpdk-17.11/usertools# dmesg |
    grep -i vfio
    [   77.676711] VFIO - User Level meta-driver version: 0.3
    [  149.013806] VFIO - User Level meta-driver version: 0.3
    [  275.876440] VFIO - User Level meta-driver version: 0.3

    Thanks,
    Ravi



Additonal information. On VM following message is seen

[  298.714974] DMAR: intel_iommu_map: iommu width (39) is not sufficient for the mapped address (7f7300000000) [ 1494.673406] DMAR: intel_iommu_map: iommu width (39) is not sufficient for the mapped address (7fa580000000)

ON VM, DMAR reports address width = 39
root@sriov-ravi-01:/home/deployuser/dpdk-17.11/usertools# dmesg | grep -e IOMMU -e DMAR [    0.000000] ACPI: DMAR 0x000000007FFE209D 000050 (v01 BOCHS  BXPCDMAR 00000001 BXPC 00000001)
[    0.000000] DMAR: IOMMU enabled
[    9.209145] DMAR: Host address width 39

On Host, DMAR reports address width = 46
# dmesg | grep -e DMAR -e IOMMU
[    0.000000] ACPI: DMAR 0x000000007999BAD0 0000E0 (v01 ALASKA A M I 00000001 INTL 20091013)
[    0.000000] DMAR: IOMMU enabled
[    0.519368] DMAR: Host address width 46
[    0.527243] DMAR: DRHD base: 0x000000fbffc000 flags: 0x0

Searching for IOMMU errors found following link from RedHat which points to DPDK 17.11 issue.

https://bugzilla.redhat.com/show_bug.cgi?id=1530957

Thanks.

-- Thanks,
        Anatoly




Ah, yes, that. We have recently applied a patch dealing with exactly this:

http://dpdk.org/dev/patchwork/patch/33650/

Unfortunately, as far as i know, other than refusing to run (like the patch does), there's no way to fix this issue, so you'll have to disable IOMMU in your VM, and use either igb_uio or vfio in noiommu mode.

--
Thanks,
Anatoly

Reply via email to