Re: [PATCH 00/11] PCI/NTB: endpoint: packed vNTB memory windows
Koichiro Den <[email protected]> Tue, 4 Aug 2026 09:55:39 +0900
| Newsgroups | gmane.linux.documentation,gmane.linux.kernel.pci,gmane.linux.kernel |
|---|---|
| Message-ID | <u776ognl4xwd5yzbhlcnsgn4ekhxifqwpuo5h4zsh3xzfnj4ae@n7h3vo4ij352> |
On Mon, Aug 03, 2026 at 04:00:45PM -0700, Randy Dunlap wrote: > > > On 8/3/26 11:04 AM, Koichiro Den wrote: > > Hi, > > > > vNTB currently spends one BAR per MW. BAR count therefore limits the > > number of MWs, even when one BAR has room for several. A large BAR, > > especially a Resizable BAR, can instead be split into logical MWs and > > leave more BARs for config and doorbells. > > > > This series adds packed_mws, which exposes up to 16 equal-sized logical > > MWs in one BAR. ntb_transport uses the new group operations to configure > > them atomically. > > > > The immediate use case is increasing the number of ntb_transport queues. > > The resulting performance gain is shown in the Testing section. > > > > Based on the latest pci/endpoint. > > > > > > Why not BAR subrange mappings? > > ============================== > > > > An earlier proposal used mwN_offset and BAR subrange mappings to place > > independently backed MWs in one BAR: > > > > https://lore.kernel.org/r/[email protected]/ > > > > BAR subrange mapping is currently implemented only by DWC, and that > > design still needs one hardware mapping per MW in each direction. This > > series instead requires one contiguous backing range and maps the whole > > group once in each direction. The initial implementation intentionally > > trades arbitrary MW placement for a constant mapping count as the MW > > count grows. More flexible layouts can be added when a concrete use > > case requires them. > > > > Hi, > To be clear, this is totally outside of the scope of any PCI or NTB > standards or specs? or did I overlook that part of the discussion? > Thanks. Hi Randy, No, you didn't overlook anything. This isn't part of any PCI or NTB spec. This series just proposes a new 'packed_mws' configfs knob for the vNTB/ntb_hw_epf pair. PCI still sees a normal BAR. Thanks, Koichiro > > > > > Testing > > ======= > > > > The packed data path was tested with ntb_transport and ntb_netdev. An > > `iperf3 -ub0 -l 65482 -P 2` UDP saturation run produced the following > > results when only one Resizable BAR was available for MWs: > > > > Configuration Receiver throughput > > ---------------------------------------------- ------------------- > > num_mws=1, packed_mws unset (default 0) 607 Mbits/sec > > num_mws=2, packed_mws=2, combined channels=2 1.19 Gbits/sec > > > > Meanwhile, I realized that the in-tree ntb_test.sh does not fully pass > > with the pci-epf-vntb/ntb_hw_epf setup on the base tree. I had to apply > > a separate collection of local PCI endpoint and NTB fixes before this > > setup could be used for regression testing. These fixes address > > pre-existing issues and are not prerequisites of the packed MW > > implementation. > > > > With packed_mws unset and ntb_msi_tests disabled, ntb_test.sh reported > > the same pass/unsupported results before and after this series. One run > > follows: > > > > $ sudo ./ntb_test.sh -r ${EP} -m 1048576 -p 28 0000:01:00.0 0001:10:00.0 > > Starting ntb_tool tests... > > Running port tests on: 0000:01:00.0 / 0001:10:00.0 > > Local port 0 with index 0 on remote host > > Peer port 0 with index 0 on local host > > Passed > > Running link tests on: 0000:01:00.0 / 0001:10:00.0 > > Passed > > Running link tests on: 0001:10:00.0 / 0000:01:00.0 > > Passed > > Running db tests on: 0000:01:00.0 / 0001:10:00.0 > > Passed > > Running db tests on: 0001:10:00.0 / 0000:01:00.0 > > Passed > > Running spad tests on: 0000:01:00.0 / 0001:10:00.0 > > Passed > > Running spad tests on: 0001:10:00.0 / 0000:01:00.0 > > Passed > > Running msg tests on: 0000:01:00.0 / 0001:10:00.0 > > Unsupported > > Running msg tests on: 0001:10:00.0 / 0000:01:00.0 > > Unsupported > > Running mw0 tests on: 0000:01:00.0 / 0001:10:00.0 > > Passed > > Running mw0 tests on: 0001:10:00.0 / 0000:01:00.0 > > Passed > > > > Starting ntb_pingpong tests... > > Running ping pong tests on: 0000:01:00.0 / 0001:10:00.0 > > Passed > > > > Starting ntb_perf tests... > > Running local perf test without DMA > > Peer 0 test statistics: > > 0: copied 268435456 bytes in 137063 usecs, 1958 MBytes/s > > Passed > > Running remote perf test without DMA > > Peer 0 test statistics: > > 0: copied 268435456 bytes in 139188 usecs, 1928 MBytes/s > > Passed > > > > For comparison, the before-series run reported 1997 MBytes/s locally > > and 1950 MBytes/s remotely. No obvious regression was seen in this > > single-run comparison. > > > > > > Control layout compatibility > > ============================ > > > > The endpoint selects the control layout. Non-packed pci-epf-vntb keeps > > the version 0 layout. packed_mws selects version 1. "Old" and "new" > > below mean ntb_hw_epf without and with this series. > > > > EP configuration Old ntb_hw_epf New ntb_hw_epf > > ---------------- ------------------------ ------------------------ > > non-packed (v0) Supported Supported > > packed (v1) Not supported [1] Supported > > > > [1] The old driver accepts two or four MWs but looks for a separate BAR > > for each MW. It rejects larger MW counts at probe. > > > > > > Packed MW compatibility with in-tree NTB clients > > ================================================ > > > > The in-tree clients handle a packed MW group as follows: > > > > Client Behavior > > -------------- ------------------------------------------------------ > > ntb_transport Uses group operations. Without a singleton MW, MSI > > mode falls back to doorbells. > > ntb_perf Rejects a non-singleton MW group at probe. > > ntb_tool Loads normally. Per-MW inbound translation setup > > returns -EOPNOTSUPP for a non-singleton group. > > Doorbell and scratchpad access is unaffected. > > ntb_msi_test Fails probe unless the MW reserved for MSI is a > > singleton. > > ntb_pingpong Does not use MWs and is unaffected. > > > > Further client support can be added separately when needed. A final > > singleton MW on another BAR can also be added later if MSI mode is needed > > with packed MWs. > > > > > > Notes > > ===== > > > > * About pci-epf-ntb: > > > > pci-epf-ntb remains on the legacy version 0 layout; this series does > > not add version 1 layout support to it. A pci-epf-ntb bridge should > > therefore keep its existing behavior even when its nodes run a mix of > > old and new kernels. I do not have hardware for the pci-epf-ntb bridge > > topology. > > > > * About existing inbound MW clear behavior: > > > > pci-epf-vntb already leaves the inbound BAR mapping in place when an > > MW translation is cleared. This series keeps that behavior for packed > > MWs. This limitation is independent of packing. > > > > pci_epc_clear_bar() is not suitable here because it can clear the BAR > > address assigned by the host. An EPF can instead restore a persistent > > fallback mapping with pci_epc_set_bar(), as pci-epf-test does: > > > > https://lore.kernel.org/r/[email protected]/ > > > > pci-epf-vntb has no such fallback mapping today. Adding one, or an EPC > > operation to unmap only the inbound translation, should be separate > > work. > > > > Best regards, > > Koichiro > > > > > > Koichiro Den (11): > > NTB: Add atomic MW translation group operations > > NTB: epf: Parse a versioned packed MW layout > > PCI: endpoint: pci-epf-vntb: Add packed MW layout handling > > PCI: endpoint: pci-epf-vntb: Implement MW group translation callbacks > > PCI: endpoint: pci-epf-vntb: Allocate packed outbound MW space > > PCI: endpoint: pci-epf-vntb: Add outbound MW group commands > > NTB: epf: Implement MW group translation callbacks > > NTB: perf: Reject grouped memory windows > > NTB/msi: Require a singleton memory window > > NTB: ntb_transport: Use atomic MW translation groups > > PCI: endpoint: pci-epf-vntb: Expose packed MWs through configfs > > > > Documentation/PCI/endpoint/pci-vntb-howto.rst | 16 +- > > drivers/ntb/hw/epf/ntb_hw_epf.c | 143 +++++- > > drivers/ntb/msi.c | 19 +- > > drivers/ntb/ntb_transport.c | 127 +++++- > > drivers/ntb/test/ntb_perf.c | 16 +- > > drivers/pci/endpoint/functions/pci-epf-vntb.c | 423 ++++++++++++++++-- > > include/linux/ntb.h | 133 +++++- > > 7 files changed, 801 insertions(+), 76 deletions(-) > > > > -- > ~Randy >