Re: [OPAE] IOMMU in Xeon+FPGA and the perception of memory by OPAE apps
Luebbers, Enno <enno.luebbers at intel.com> Fri, 16 Feb 2018 10:02:51 -0800
| Newsgroups | dev.linux.lists.opae |
|---|---|
| Message-ID | <[email protected]> |
--===============6772999615544407911== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Furkan, thank you for your question! Let me try to clarify a couple of points before addressing your question directly. OPAE is targeted at supporting a wide range of programmable accelerator platforms, and its fundamental concepts are kept intentionally broad to acc= ount for differences in platform implementation. As such, it may include features that are not available on all supported platforms or may differ in realizat= ion. I believe you're referring to the FPGA platform that's part of the current = Intel Hardware Accelerator Research Program (that was the target platform of the presentation at FPL2017). That platform does not include an IOMMU, so any addresses returned by fpgaGetIOAddress() will indeed be physical addresses. (Trivia: fpgaGetIOAddress() was originally called fpgaGetIOVA(), but we cha= nged it precisely because of the reasons you're outlining.) It appears that not = all variable names carrying this IO address have been renamed to account for th= is, though; I'm sorry for any confusion this may have caused. If you look at other potential platforms that OPAE could support (or even at actual platforms OPAE supports right now, such as http://altera.com/pac), y= ou will find examples of configurations that do have an IOMMU (the PAC, for example, is a PCIe card, so it lives behind any IOMMU of the platform it's plugged into). An IOMMU does not necessarily provide the same virtual-to-phyiscal translat= ions that are created for software applications by the MMU -- IO devices in virtualized systems may have their own IO virtual address space (hence the name "IO Virtual Address"). In many virtualized systems, the IOMMU will only provide a single mapping for each virtual machine. To allow AFUs to use true "process virtual addresses" instead of "IO addresses" (which may be virtual= or physical depending on IOMMU availability) you'll need additional logic in t= he FPGA to do the translation in sync with the OS page tables. As it happens, the "intel-fpga-bbb" repository https://github.com/OPAE/intel-fpga-bbb includes an IP block (we call then "basic building blocks" or BBBs) for this named MPF -- you may recall a section of the FPL 2017 workshop that explain= ed it. MPF includes a feature for virtual-to-physical address translations (VT= P) for AFUs. If you instantiate this block in your AFU design, your AFU can us= e the virtual addresses of its owning process (you can share pointers) -- limited= to explicitly shared buffers, of course --, and there is no need to use fpgaGetIOAddress() at all. On Fri, Feb 16, 2018 at 04:12:22PM +0100, Furkan Turan wrote: > Hello Dears, > = > I would like to consult on you about the memory view of AFUs. > = > In OPAE, fpgaGetIOAddress is declared to get IO address, which is returned > as updating the ioaddr parameter passed to it. A variable for this parame= ter > in one example code is name as buf_pa, as it will return the IO address f= or > the buffer and that will be the physical address "pa". However, in some > other examples, e.g. hello_fpga.c, the same variable is names as iova whi= ch > basically stands for IO virtual address. > = > As far as I remember the presentation in FPL2017, it was mentioned that > there is no IOMMU right now; therefore, iova and physical address should = be > same things. However, the opae.github.io explains the functions referring= to > IOMMU, so maybe Intel has already introduced it. In that case, AFUs should > not work with physical addresses, but indeed have virtual addresses which > will be translated to physical by the IOMMU. > = > I would like to consult on you about this: > * Is IOMMU available or not? It depends on the target platform. The integrated Xeon+FPGA system deployed= as part of HARP does not; a deployment of the PAC card may very well do (as may other platforms). > * If there is IOMMU, then how the page tables are maintained: by OS, or by > OPAE drivers? The IOMMU translations are managed by the operating system. The OPAE driver= uses the Linux kernel DMA subsystem, which is aware of (and manages) these mappi= ngs. > * Can this provide the same virtual addresses on both SW and HW side in t= he > future, making the fpgaGetIOAddress function obsolete? Yes, using MPF (see above). Other (future?) platforms may also provide other solutions to this -- it has been done before for other accelerator technolo= gies. > * May the IOMMU allow getting rid of the contagious memory space allocati= on > requirement for the buffers in the future? That's an interesting question. I believe you could program an IOMMU to mir= ror the page mappings of an MMU and thus allow page-level translations. I don't= know how that would be implemented using the Linux kernel, though (I believe it currently only creates mappings for explicitly requested DMA buffers, which= have to be contiguous (duh)). You may also run into issues where the IOMMU is al= ready used for translating between guest physical and host physical addresses for virtual machines -- you'll need something like a second-level address translation mechanism for that (similar to what MMUs do with EPT/RVI). I hope this answers your questions. Thank you - Enno --===============6772999615544407911==--