[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] PCI DMA Limitations
>>> "Stephen Donnelly" <sfdonnelly@xxxxxxxxx> 26.03.07 05:35 >>> >I've been reading the XenLinux code from 3.0.4 and would appreciate >clarification of the limitations on PCI DMA under Xen. I'm considering how >to deal with a peripheral that requires large DMA buffers. > >All 'normal Linux' PCI DMA from Driver Domains (e.g. dom0) occurs via the >SWIOTLB code via a restricted window. e.g. when booting: > >Software IO TLB enabled: > Aperture: 64 megabytes > Kernel range: 0xffff880006ea2000 - 0xffff88000aea2000 > Address size: 30 bits >PCI-DMA: Using software bounce buffering for IO (SWIOTLB) > >The size of the aperture is configurable when the XenLinux kernel boots. The >maximum streaming DMA allocation (via dma_map_single) is is limited by >IO_TLB_SIZE to 128 slabs * 4k = 512kB. Synchronisation is explicit via >dma_sync_single and involves the CPU copying pages via these 'bounce >buffers'. Is this correct? Yes. >If the kernel is modified by increasing IO_TLB_SIZE, will this allow larger >mappings, or is there a matching limitation in the hypervisor? Not a siginficant one in the hypervisor: 4Gb chunks/2**20 pages (and of course being bound to available memory in the requested range). But the setup here is also going through xen_create_contiguous_region(), so the 2Mb limitation there would also apply. >Coherent mappings via dma_alloc_coherent exchange VM pages for contiguous >low hypervisor pages. The allocation size is limited by MAX_CONTIG_ORDER = 9 >in xen_create_contiguous_region to 2^9 * 4k = 2MB? Yes, though for very special cases (AGP aperture) extending this limit is being considered, though not likely by just bumping MAX_CONTIG_ORDER (due to the effect this would have on static variables' sizes). >Is it possible to increase MAX_CONTIG_ORDER in a guest OS unilaterally, or >is there a matching limitation in the hypervisor? I didn't see any options >to Xen to configure the amount of memory reserved for coherent DMA mappings. Again, Xen doesn't limit the order significantly, and statically bumping MAX_CONTIG_ORDER doesn't seem like too good an idea. Xen can reserve memory for DMA purposes via the dma_emergency_pool command line option. >Is there a simpler/more direct way to provide DMA access to large buffers in >guest VMs? I was curious about how RDMA cards (e.g. Infiniband) are >supported, are they required to use DAC and scatter-gather in some way? Yes, s/g is certainly very much preferable here, due to the possibly huge amounts of data otherwise needing copying. Also, RDMA is (hopefully) not restricted to 32-bit machine addresses, as that would be another reason to force it though the swiotlb. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |