[AMD Official Use Only - General]


Like I said earlier, trying with the Intel host I have on VMWARE, specifically  Intel(R) Xeon(R) CPU E5-2697A v4 @ 2.60GHz
With IOMMU enabled, VMXNET3 works with VA as well as PA.

[VV] since ` enable_unsafe_iommu: not enabled` on Intel platform, could it be possible the specific version EXSI hypervisor supports the HW IOMMU specific to the platform. My suspicion will be in case on AMD platform  changes for required to enable HW iommu might not be available to specific EXSI (hypervior OS) used.

 

I am not an expert on virtio_user PMD, but I can check if it will work with PA with deferred setting for vmx_net3 PMD are ok?

 

From: Igor de Paula <igordptx@gmail.com>
Sent: Tuesday, July 25, 2023 8:42 PM
To: Varghese, Vipin <Vipin.Varghese@amd.com>
Cc: Yigit, Ferruh <Ferruh.Yigit@amd.com>; Jochen Behrens <jbehrens@vmware.com>; Thomas Monjalon <thomas@monjalon.net>; users@dpdk.org; Gupta, Nipun <Nipun.Gupta@amd.com>; Agarwal, Nikhil <nikhil.agarwal@amd.com>; Ronak Doshi <doshir@vmware.com>; Immanni, Venkat <Venkat.Immanni@amd.com>; Chenbo Xia <chenbo.xia@intel.com>
Subject: Re: help

 

Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.

 

Well,
Like I said earlier, trying with the Intel host I have on VMWARE, specifically  Intel(R) Xeon(R) CPU E5-2697A v4 @ 2.60GHz
With IOMMU enabled, VMXNET3 works with VA as well as PA.
Meaning, PA works regardless if IOMMU is enabled or not. From my experience anyway.
That's why I thought that:
virtio_user needs VA to work.
For some reason VMXNET3 does not work with VA (only on AMD host).

 

 

On Tue, Jul 25, 2023 at 4:04 PM Varghese, Vipin <Vipin.Varghese@amd.com> wrote:

[AMD Official Use Only - General]

 

Thanks Igor,

 

As suspected the vmx_net3 works with

 

  1. Iommu: disabled
  2. enable_unsafe_iommu: enabled
  3. dpdk eal iova mode: PA

 

as pointed by you in logs, the virtio_user fails as it expects VA too.

 

Will check and get back.

 

From: Igor de Paula <igordptx@gmail.com>
Sent: Tuesday, July 25, 2023 8:16 PM
To: Yigit, Ferruh <Ferruh.Yigit@amd.com>
Cc: Jochen Behrens <jbehrens@vmware.com>; Thomas Monjalon <thomas@monjalon.net>; users@dpdk.org; Gupta, Nipun <Nipun.Gupta@amd.com>; Agarwal, Nikhil <nikhil.agarwal@amd.com>; Ronak Doshi <doshir@vmware.com>; Immanni, Venkat <Venkat.Immanni@amd.com>; Varghese, Vipin <Vipin.Varghese@amd.com>; Chenbo Xia <chenbo.xia@intel.com>
Subject: Re: help

 

Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.

 

Hi,
Attaching the logs of EAL when trying to run a configuration with virtio_user port when IOMMU is 
disabled and enable_unsafe_iommu is enabled. As you can see it forces IOVA as PA but the viritui_user needs IOVA as VA.
I am also attaching the output of dmesg. I am not sure which kernel logs you wanted... if there is anything else please let me know..
Regarding the ESXI logs, they are HUGE so I will send to you on a separate email.

 

On Fri, Jul 21, 2023 at 1:14 PM Ferruh Yigit <ferruh.yigit@amd.com> wrote:

On 7/21/2023 12:39 PM, Igor de Paula wrote:
> I am trying to use virtio_user for an interface with the
> kernel: https://doc.dpdk.org/guides/howto/virtio_user_as_exception_path.html <https://doc.dpdk.org/guides/howto/virtio_user_as_exception_path.html>
> I think this requires IOVA as va.
>

I am not sure if virtio-user has IOVA as VA requirement, cc'ed Chenbo,
he may know better.

Meanwhile can you give a try to 'enable_unsafe_noiommu_mode' and
'--iova-mode=pa'?


> It does work with Intel host and IOMMU
> enabled. Part of the negotiation when setting it up is getting the IOMMU
> number so I thought it has to have IOMMU.
>

Yes, issue looks like related to the IOMMU, and it may be either related
to HW support, or ESXi iommu driver support, we will check using below
information you provided.

> I tried disabling IOMMU and enabling enable_unsafe_noiommu flag but
> again, that didn't work.
> ESXI version - VMware ESXi, 7.0.0, 16324942
> AMD:  AMD EPYC 7452 32-Core Processo
>
> On an Intel host which worked: Intel(R) Xeon(R) CPU E5-2697A v4 @ 2.60GHz
> Regarding the logs I will try and attach it soon.
>

Thanks for info, waiting for logs.

>
> On Fri, Jul 21, 2023 at 12:21 PM Ferruh Yigit <ferruh.yigit@amd.com
> <mailto:ferruh.yigit@amd.com>> wrote:
>
>     Hi Igor,
>
>     VM doesn't have IOMMU, and vmxnet3 requires PA mode, for this can you
>     please try with:
>     - enable 'enable_unsafe_noiommu_mode' flag
>     - Force PA mode via '--iova-mode=pa' eal parameter
>
>
>     Also to be able to figure out AMD IOMMU support level, can you please
>     provide:
>     - AMD part number
>     - ESXi/hypervisor version
>     - ESXi & VM kernel logs
>
>
>     Thanks,
>     Ferruh
>
>     On 7/20/2023 5:21 PM, Jochen Behrens wrote:
>     > +Ronak from the ESX team
>     >
>     >  
>     >
>     >  
>     >
>     > In our usage, we do set amd_iommu=off in the boot command line from
>     > grub. (Or intel_iommu=off for Intel processors.)
>     >
>     >  
>     >
>     >                 Jochen
>     >
>     >  
>     >
>     > *From: *Thomas Monjalon <thomas@monjalon.net
>     <mailto:thomas@monjalon.net>>
>     > *Date: *Thursday, July 20, 2023 at 6:00 AM
>     > *To: *Igor de Paula <igordptx@gmail.com <mailto:igordptx@gmail.com>>
>     > *Cc: *users@dpdk.org <mailto:users@dpdk.org> <users@dpdk.org
>     <mailto:users@dpdk.org>>, Jochen Behrens
>     > <jbehrens@vmware.com <mailto:jbehrens@vmware.com>>, Nipun Gupta
>     <nipun.gupta@amd.com <mailto:nipun.gupta@amd.com>>, Nikhil Agarwal
>     > <nikhil.agarwal@amd.com <mailto:nikhil.agarwal@amd.com>>, Ferruh
>     Yigit <ferruh.yigit@amd.com <mailto:ferruh.yigit@amd.com>>
>     > *Subject: *Re: help
>     >
>     > !! External Email
>     >
>     > +Cc some AMD maintainers, they can have an idea about IOMMU settings.
>     >
>     >
>     > 20/07/2023 14:44, Igor de Paula:
>     >> I have enabled it in the host and in the BIOS for AMD...
>     >> In the Bios I changed to amd_iommu=on and in the host it's the
>     same for
>     >> either.
>     >>
>     >> On Thu, Jul 20, 2023 at 1:31 PM Thomas Monjalon
>     <thomas@monjalon.net <mailto:thomas@monjalon.net>> wrote:
>     >>
>     >> > 20/07/2023 11:35, Igor de Paula:
>     >> > > The weird thing is that it only happens when I am using a
>     host with an
>     >> > AMD
>     >> > > processor. It doesn't happen when I use a host with an Intel
>     processor.
>     >> >
>     >> > So it's probably a matter of BIOS settings for the IOMMU?
>     >> >
>     >> >
>     >> > > On Thu, Jul 20, 2023 at 10:32 AM Thomas Monjalon
>     <thomas@monjalon.net <mailto:thomas@monjalon.net>>
>     >> > > wrote:
>     >> > >
>     >> > > > +Cc the vmxnet3 maintainer.
>     >> > > >
>     >> > > > Please Jochen, do you have an idea what's wrong below?
>     >> > > >
>     >> > > >
>     >> > > > 20/07/2023 11:25, Igor de Paula:
>     >> > > > > This is because it can't negotiate the IOMMU type with
>     any port.
>     >> > > > >
>     >> > > > > On Thu, Jul 20, 2023 at 5:08 AM Thomas Monjalon
>     <thomas@monjalon.net <mailto:thomas@monjalon.net>
>     >> > >
>     >> > > > wrote:
>     >> > > > >
>     >> > > > > > Hello,
>     >> > > > > >
>     >> > > > > > The first error is "Cause: Error: number of ports must
>     be even"
>     >> > > > > >
>     >> > > > > >
>     >> > > > > > 03/05/2023 18:13, Igor de Paula:
>     >> > > > > > > I am running a VM inside a VMWARE server (vSphere).
>     >> > > > > > > My goal it to set up DPDK with two HW ports, and set up a
>     >> > > > virtio_user to
>     >> > > > > > > interact with the kernel stack.
>     >> > > > > > > In another app I have it working but instead of
>     virtio_user I am
>     >> > > > running
>     >> > > > > > > KNI, it works in IOVA-PA mode.
>     >> > > > > > > I am looking to replace the KNI.
>     >> > > > > > >
>     >> > > > > > > When I try to set up virtio_user port as in the doc:
>     >> > > > > > >
>     >> > > > > >
>     >> > > >
>     >> >
>     https://doc.dpdk.org/guides/howto/virtio_user_as_exception_path.html#virtio-user-as-exception-path <https://doc.dpdk.org/guides/howto/virtio_user_as_exception_path.html#virtio-user-as-exception-path> <https://doc.dpdk.org/guides/howto/virtio_user_as_exception_path.html#virtio-user-as-exception-path <https://doc.dpdk.org/guides/howto/virtio_user_as_exception_path.html#virtio-user-as-exception-path>>
>     >> > > > > > > I get a error it can't run in PA mode.
>     >> > > > > > >
>     >> > > > > > >
>     >> > > > > > > When I try to run as VA mode from a parameter, I get the
>     >> > following
>     >> > > > > > errors:
>     >> > > > > > > EAL: lib.eal log level changed from info to debug
>     >> > > > > > > EAL: Detected lcore 0 as core 0 on socket 0
>     >> > > > > > > EAL: Detected lcore 1 as core 0 on socket 0
>     >> > > > > > > EAL: Support maximum 128 logical core(s) by
>     configuration.
>     >> > > > > > > EAL: Detected 2 lcore(s)
>     >> > > > > > > EAL: Detected 1 NUMA nodes
>     >> > > > > > > EAL: Checking presence of .so 'librte_eal.so.21.3'
>     >> > > > > > > EAL: Checking presence of .so 'librte_eal.so.21'
>     >> > > > > > > EAL: Checking presence of .so 'librte_eal.so'
>     >> > > > > > > EAL: Detected static linkage of DPDK
>     >> > > > > > > EAL: Ask a virtual area of 0x7000 bytes
>     >> > > > > > > EAL: Virtual area found at 0x100000000 (size = 0x7000)
>     >> > > > > > > EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
>     >> > > > > > > EAL: DPAA Bus not present. Skipping.
>     >> > > > > > > EAL: VFIO PCI modules not loaded
>     >> > > > > > > EAL: Selected IOVA mode 'VA'
>     >> > > > > > > EAL: Probing VFIO support...
>     >> > > > > > > EAL: IOMMU type 1 (Type 1) is supported
>     >> > > > > > > EAL: IOMMU type 7 (sPAPR) is not supported
>     >> > > > > > > EAL: IOMMU type 8 (No-IOMMU) is supported
>     >> > > > > > > EAL: VFIO support initialized
>     >> > > > > > > EAL: Ask a virtual area of 0x5b000 bytes
>     >> > > > > > > EAL: Virtual area found at 0x100007000 (size = 0x5b000)
>     >> > > > > > > EAL: Setting up physically contiguous memory...
>     >> > > > > > > EAL: Setting maximum number of open files to 1048576
>     >> > > > > > > EAL: Detected memory type: socket_id:0
>     hugepage_sz:1073741824
>     >> > > > > > > EAL: Creating 2 segment lists: n_segs:128 socket_id:0
>     >> > > > > > hugepage_sz:1073741824
>     >> > > > > > > EAL: Ask a virtual area of 0x2000 bytes
>     >> > > > > > > EAL: Virtual area found at 0x100062000 (size = 0x2000)
>     >> > > > > > > EAL: Memseg list allocated at socket 0, page size
>     0x100000kB
>     >> > > > > > > EAL: Ask a virtual area of 0x2000000000 bytes
>     >> > > > > > > EAL: Virtual area found at 0x140000000 (size =
>     0x2000000000)
>     >> > > > > > > EAL: VA reserved for memseg list at 0x140000000, size
>     2000000000
>     >> > > > > > > EAL: Ask a virtual area of 0x2000 bytes
>     >> > > > > > > EAL: Virtual area found at 0x2140000000 (size = 0x2000)
>     >> > > > > > > EAL: Memseg list allocated at socket 0, page size
>     0x100000kB
>     >> > > > > > > EAL: Ask a virtual area of 0x2000000000 bytes
>     >> > > > > > > EAL: Virtual area found at 0x2180000000 (size =
>     0x2000000000)
>     >> > > > > > > EAL: VA reserved for memseg list at 0x2180000000,
>     size 2000000000
>     >> > > > > > > EAL: TSC frequency is ~2350000 KHz
>     >> > > > > > > EAL: Main lcore 0 is ready (tid=7f8ad790ec00;cpuset=[0])
>     >> > > > > > > EAL: lcore 1 is ready (tid=7f8ad6907400;cpuset=[1])
>     >> > > > > > > EAL: Trying to obtain current memory policy.
>     >> > > > > > > EAL: Setting policy MPOL_PREFERRED for socket 0
>     >> > > > > > > EAL: Restoring previous memory policy: 0
>     >> > > > > > > EAL: request: mp_malloc_sync
>     >> > > > > > > EAL: Heap on socket 0 was expanded by 1024MB
>     >> > > > > > > EAL: PCI device 0000:0b:00.0 on NUMA socket -1
>     >> > > > > > > EAL:   probe driver: 15ad:7b0 net_vmxnet3
>     >> > > > > > > EAL:   Expecting 'PA' IOVA mode but current mode is
>     'VA', not
>     >> > > > > > initializing
>     >> > > > > > > EAL: Requested device 0000:0b:00.0 cannot be used
>     >> > > > > > > EAL: PCI device 0000:13:00.0 on NUMA socket -1
>     >> > > > > > > EAL:   probe driver: 15ad:7b0 net_vmxnet3
>     >> > > > > > > EAL:   Expecting 'PA' IOVA mode but current mode is
>     'VA', not
>     >> > > > > > initializing
>     >> > > > > > > EAL: Requested device 0000:13:00.0 cannot be used
>     >> > > > > > > EAL: Bus (pci) probe failed.
>     >> > > > > > > EAL: lib.telemetry log level changed from disabled to
>     warning
>     >> > > > > > > EAL: Error - exiting with code: 1
>     >> > > > > > >   Cause: Error: number of ports must be even
>     >> > > > > > > EAL: request: mp_malloc_sync
>     >> > > > > > > EAL: Heap on socket 0 was shrunk by 1024MB
>     >> > > > > > >
>     >> > > > > > >
>     >> > > > > > >
>     >> > > > > > > For some reason the HW ports won't setup. From what I
>     understand
>     >> > > > > > > net_vmxnet3 should work with VA mode.
>     >> > > > > > > I enabled I/OMUU for the VM.
>     >> > > > > > > The weird thing even when enabled, I still have the
>     >> > > > > > > enable_unsafe_noiommu_mode flag on.
>     >> > > > > > > And because it's on the this:
>     >> > > > > > >
>     >> > > > > > > dev_iova_mode = pci_device_iova_mode(dr, dev);
>     >> > > > > > >
>     >> > > > > > > return PA mode, and it fails.
>     >> > > > > > >
>     >> > > > > > > When I disable it by modifying
>     >> > > > > > >
>     /sys/module/vfio/parameters/enable_unsafe_noiommu_mode, I get
>     >> > another
>     >> > > > > > error.
>     >> > > > > > > The error is that it doesn't find a suitable IOMMU type:
>     >> > > > > > > Just putting the relevant message:
>     >> > > > > > >
>     >> > > > > > >
>     >> > > > > > > EAL: Heap on socket 0 was expanded by 1024MB
>     >> > > > > > > EAL: PCI device 0000:0b:00.0 on NUMA socket -1
>     >> > > > > > > EAL:   probe driver: 15ad:7b0 net_vmxnet3
>     >> > > > > > > EAL: Set IOMMU type 1 (Type 1) failed, error 19 (No
>     such device)
>     >> > > > > > > EAL: Set IOMMU type 7 (sPAPR) failed, error 19 (No
>     such device)
>     >> > > > > > > EAL: Set IOMMU type 8 (No-IOMMU) failed, error 19 (No
>     such
>     >> > device)
>     >> > > > > > > EAL: 0000:0b:00.0 failed to select IOMMU type
>     >> > > > > > > EAL: Requested device 0000:0b:00.0 cannot be used
>     >> > > > > > > EAL: PCI device 0000:13:00.0 on NUMA socket -1
>     >> > > > > > > EAL:   probe driver: 15ad:7b0 net_vmxnet3
>     >> > > > > > > EAL: Set IOMMU type 1 (Type 1) failed, error 19 (No
>     such device)
>     >> > > > > > > EAL: Set IOMMU type 7 (sPAPR) failed, error 19 (No
>     such device)
>     >> > > > > > > EAL: Set IOMMU type 8 (No-IOMMU) failed, error 19 (No
>     such
>     >> > device)
>     >> > > > > > > EAL: 0000:13:00.0 failed to select IOMMU type
>     >> > > > > > > EAL: Requested device 0000:13:00.0 cannot be used
>     >> > > > > > >
>     >> > > > > > >
>     >> > > > > > > I can see where it fails:
>     >> > > > > > >
>     >> > > > > > >
>     >> > > > > > > const struct vfio_iommu_type *
>     >> > > > > > > vfio_set_iommu_type(int vfio_container_fd)
>     >> > > > > > > {
>     >> > > > > > > unsigned idx;
>     >> > > > > > > for (idx = 0; idx < RTE_DIM(iommu_types); idx++) {
>     >> > > > > > > const struct vfio_iommu_type *t = &iommu_types[idx];
>     >> > > > > > >
>     >> > > > > > > int ret = ioctl(vfio_container_fd, VFIO_SET_IOMMU,
>     >> > > > > > > t->type_id);
>     >> > > > > > > if (!ret) {
>     >> > > > > > > RTE_LOG(INFO, EAL, "Using IOMMU type %d (%s)\n",
>     >> > > > > > > t->type_id, t->name);
>     >> > > > > > > return t;
>     >> > > > > > > }
>     >> > > > > > > /* not an error, there may be more supported IOMMU
>     types */
>     >> > > > > > > RTE_LOG(DEBUG, EAL, "Set IOMMU type %d (%s) failed,
>     error "
>     >> > > > > > > "%i (%s)\n", t->type_id, t->name, errno,
>     >> > > > > > > strerror(errno));
>     >> > > > > > > }
>     >> > > > > > > /* if we didn't find a suitable IOMMU type, fail */
>     >> > > > > > > return NULL;
>     >> > > > > > > }
>     >> > > > > > >
>     >> > > > > > >
>     >> > > > > > > The ioctl returns -1.
>     >> > > > > > >
>     >> > > > > > >
>     >> > > > > > >
>     >> > > > > > > I tried many things.
>     >> > > > > > > Enabling/disabling IOMMU.
>     >> > > > > > > Modifying the enable_unsafe_noiommu_mode flag.
>     >> > > > > > > Running in PA mode.
>     >> > > > > > > Any help will be much appreciated.
>     >> >
>     >> >
>     >> >
>     >> >
>     >> >
>     >> >
>     >>
>     >
>     >
>     >
>     >
>     >
>     >
>     > !! External Email: This email originated from outside of the
>     > organization. Do not click links or open attachments unless you
>     > recognize the sender.
>     >
>