Earlier  
Posted Nick Remark
#openstack-nova - 2022-02-07
14:51:14 dmitriis so it should just bind a normal port regularly
14:51:20 sean-k-mooney yep
14:51:23 sean-k-mooney cool
14:51:44 sean-k-mooney we are still trying to assess what woudl be requried to eventually support this in our product
14:52:04 dmitriis sean-k-mooney: yeah, plus hardware is hard to come by
14:52:12 sean-k-mooney that too
14:52:45 dmitriis I think this feature will be useful for FPGA-based SmartNICs as well. I've seen the ones with a separate CPU but with an FPGA instead of an ASIC
14:53:24 dmitriis considering the DPDK dataplane usage at the SmartNIC's CPU side for that with rte_flow for offload
14:53:26 sean-k-mooney i do potentially have access to a BF2 that i coudl use but only 1 so i obviouly cant test multi node and in general an all in one deployment while useful is not fully reflective of how it would be deployed in a datacenter
14:53:34 dmitriis the Nova and Neutron bits would work the same though
14:53:46 sean-k-mooney dmitriis: yes in princial it could be
14:53:54 dmitriis sean-k-mooney: I have an idea on how to test multi-node with just one BF2
14:54:15 sean-k-mooney the only fpga based smartnic i have use used armstong os with only 2 arm cores and i think 4GB of ram
14:54:44 sean-k-mooney dmitriis: run two copies of nova-compute with difernt host values in teh conf on the same host
14:54:53 dmitriis sean-k-mooney: 2 VMs with nested virt a the hypervisor, plus 2 VMs at the DPU side. Each VM uses 1 PF. VPD can be faked by bind mounting a file in the right sysfs location
14:54:53 sean-k-mooney and use differnt ports on the BF2?
14:55:08 dmitriis BF2's ARM CPU is virt-capable btw xD
14:55:43 sean-k-mooney dmitriis: that proably wotn work becaue wehn the PF is passed to the qemu instacle the pcie capablityies are not in the pci config space in teh guest
14:56:10 sean-k-mooney lspci in the guest will only print the pci capablities not the extened pcie cabalities like sriov
14:56:15 sean-k-mooney in my previous experince
14:56:20 sean-k-mooney even when using q35
14:56:28 dmitriis sean-k-mooney: I was about to ask about q35 :^)
14:56:30 sean-k-mooney if it does work let me know :)
14:56:37 dmitriis sean-k-mooney: there's another option
14:56:49 dmitriis BF2 on one host + ConnectX on another
14:57:16 dmitriis just use the remote_managed feature with ovs/ovn-controller running locally on the connectx node
14:57:47 sean-k-mooney ya i tought about that
14:58:00 sean-k-mooney jsut addign the serial to the chasis table for the hosts ovn
14:58:09 dmitriis yes
14:58:15 sean-k-mooney in prinicapal that would owrk without BF2
14:58:43 dmitriis yes, technically, we just made Nova and Neutron realize that networking agents may run remotely but the trivial case is running locally
14:58:47 sean-k-mooney i did not really want to say that to our qe however :)
14:59:00 dmitriis yeah, fair enough :^)
14:59:25 sean-k-mooney but ya in principal we can test most of the integration that way for any nic that supprot vpd
15:00:01 dmitriis or even bind mount a file to the right sysfs location
15:00:03 sean-k-mooney i.e. if we can get the serial,mac and vf number we can test the end to end integration
15:00:20 dmitriis I got used to crafting VPD blobs since I needed to unit test the libvirt change
15:00:33 dmitriis basically, I crafted them byte-by-byte
15:00:51 dmitriis sean-k-mooney: ^ yes
15:01:02 sean-k-mooney ya thats doable
15:01:20 sean-k-mooney although i dont think it woudl be hard to have a python class that modeled it and just serialise it as a byte string
15:01:35 sean-k-mooney rather then do it by hand
15:01:47 sean-k-mooney unfortunetly i dont think we can use that to test in the upstream ci
15:02:03 dmitriis sean-k-mooney: yeah, it's not too hard. The only tricky part there is checksum calculation but it's a simple algorithm
15:02:24 sean-k-mooney crc32 or similar i assume
15:02:42 sean-k-mooney it would not be hard to look at the c code and ectra
15:02:47 dmitriis sean-k-mooney: just one's complement
15:02:56 sean-k-mooney that said im not sure libvirt cares about the crc
15:03:11 sean-k-mooney ack
15:03:30 dmitriis sean-k-mooney: IIRC I validate the checksum for the read-only portion there
15:03:49 sean-k-mooney oh in the nova code?
15:03:57 sean-k-mooney i dont think i recall seeing that
15:04:06 dmitriis sean-k-mooney: no-no, in the Libvirt code that parses VPD
15:04:12 sean-k-mooney ah
15:04:14 sean-k-mooney ok
15:04:29 dmitriis sean-k-mooney: there is a chance that something may be added to the mellanox CI. I know CX5 hw is there based on the logs but no BF2 (yet)
15:04:47 dmitriis maybe I'll have some info later this week about that
15:05:10 dmitriis there are automation challenges: i.e. we need to bring up devstack + also program the DPU
15:05:19 dmitriis but devices availability first I guess
15:05:26 sean-k-mooney https://github.com/SeanMooney/arbiterd/tree/master/arbiterd_tests/test_data/sys
15:05:26 sean-k-mooney i actully have been doing some experiment on the side lately and as part of my test infra i have a fake copy of part of /sys
15:05:58 sean-k-mooney the idea being that in my func test it would use the fake copy of the file system
15:06:23 sean-k-mooney its too bad we cant create fake pf devices using kernel modules for testing
15:06:50 sean-k-mooney i have looked into it in the past and we can create the fake netdevs for sriov
15:06:52 dmitriis sean-k-mooney: there's netdevsim but it doesn't create PCI devices
15:06:54 sean-k-mooney but not the pci toploty
15:07:00 sean-k-mooney yep
15:07:01 sean-k-mooney exactly
15:07:09 dmitriis can't pass them to a VM, yep
15:07:13 sean-k-mooney i tried to use that for sriov testing in the upstream ci in the past
15:07:34 sean-k-mooney i also was lookign at the mdev equivlent
15:07:46 dmitriis we utilize netdevsim for ovn-vif testing
15:07:47 sean-k-mooney same issue no pci endpoints
15:08:09 dmitriis and Frode is working on some code to extend it in the kernel but it's only usable for the ovn-vif testing part
15:08:22 sean-k-mooney ya that kind fo makes sense since it woudl not need the pci adress just the netdevs
15:09:00 sean-k-mooney if it ever gets extened to implement pci vfs/pfs
15:09:18 sean-k-mooney we would be able to use it for basic pci pasthorugh testing
15:09:28 sean-k-mooney we woudl not need the networking to actully work
15:09:35 sean-k-mooney just enough to pass it to qemu
15:09:50 sean-k-mooney that is a lot of work but would be super useful for us
15:09:51 dmitriis sean-k-mooney: I also looked at a possibility of using the rocker switch in QEMU but it's useful for switchdev testing but doesn't have SR-IOV emulation
15:10:10 sean-k-mooney ya
15:10:33 dmitriis sean-k-mooney: yes, also Libvirt's testing of VF-related stuff is quite minimal. They have the same problem with emulating VFs presumably
15:10:42 sean-k-mooney so at some point we likely will want to supprot vdpa with subfunction rather then vfs as the parent
15:10:59 sean-k-mooney the rocker switch might be useful to test that eventually
15:12:12 dmitriis yeah, SFs are something we also started looking into but there's more work to do at the ovn-vif side. Even for VFs we ran into a race at the BF2 side https://github.com/ovn-org/ovn-vif/pull/1 and SFs are even more dynamic
15:13:23 dmitriis TL;DR: SR-IOV is enabled at the hypervisor and then BF2 realizes that it needs to create representors and the DPU kernel starts creating udev events for them and rename them
15:13:31 sean-k-mooney ack in a similar vain i was hoping to eventualy start using https://github.com/torvalds/linux/blob/d4ec3d5535c784c3adbc41c2bbc5d17a00a4a898/samples/vfio-mdev/mtty.c and https://github.com/torvalds/linux/blob/d4ec3d5535c784c3adbc41c2bbc5d17a00a4a898/samples/vfio-mdev/mdpy.c or
15:13:33 sean-k-mooney https://github.com/torvalds/linux/blob/d4ec3d5535c784c3adbc41c2bbc5d17a00a4a898/samples/vfio-mdev/mbochs.c to test our generic mdev support
15:14:40 dmitriis mtty, interesting
15:14:57 sean-k-mooney i belive it just echos back what you send to it
15:15:05 sean-k-mooney but that woudl be super simple to test in tempest
15:15:15 dmitriis yes, quite useful
15:15:41 sean-k-mooney our current mdev code i belive assumes each mdev has a pci device as a parent
15:15:48 sean-k-mooney so we would need to relax that
15:15:58 sean-k-mooney to use the driver but if we did we could get full ci coverage for it
15:16:22 sean-k-mooney when people start using mdev for subfuction or non VF usecase we might need to do that anyway
15:16:32 sean-k-mooney at which point we can test it properly in ci
15:17:18 dmitriis I heard that SFs were introduced to support container use-cases because of scalability issues, less so for VMs. Doesn't mean VMs cannot use them but still.
15:17:52 dmitriis scalability ~ small number of ports

Earlier   Later