Re: [PATCH v7 16/21] block: add check when merging zone device pages
On Thu, Jun 30, 2022 at 03:50:10PM -0600, Logan Gunthorpe wrote: > Oh, it turns out this code has nothing to do with REQ_NOMERGE. It's used > indirectly in bio_map_user_iov() and __bio_iov_iter_get_pages() when > adding pages to the bio via page_is_mergeable(). So it's not about > requests being merged it's about pages being merged. Oh, true. > So I'm not sure how we can avoid this, but it only happens when two > adjacent pages are added to the same bio in a row, so I don't think it's > that common, but the check can probably be moved down so it happens > after the same_page check to make it a little less common. Yes, looks like we have to keep it. ___ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu
Re: [PATCH v7 16/21] block: add check when merging zone device pages
On 2022-06-29 10:06, Logan Gunthorpe wrote: > > > > On 2022-06-29 00:46, Christoph Hellwig wrote: >> On Wed, Jun 15, 2022 at 10:12:28AM -0600, Logan Gunthorpe wrote: >>> Consecutive zone device pages should not be merged into the same sgl >>> or bvec segment with other types of pages or if they belong to different >>> pgmaps. Otherwise getting the pgmap of a given segment is not possible >>> without scanning the entire segment. This helper returns true either if >>> both pages are not zone device pages or both pages are zone device >>> pages with the same pgmap. >>> >>> Add a helper to determine if zone device pages are mergeable and use >>> this helper in page_is_mergeable(). >> >> Any reason not to simply set REQ_NOMERGE for these requests? We >> can't merge for passthrough requests anyway, and genrally don't merge >> for direct I/O either, so adding all this overhead seems a bit pointless. > > Hmm, I suppose we could also ensure that REQ_NOMERGE is set in a bio > before setting FOLL_PCI_P2PDMA in bio_map_user_iov() and > __bio_iov_iter_get_pages(). Assuming it's always set for any direct I/O. > Oh, it turns out this code has nothing to do with REQ_NOMERGE. It's used indirectly in bio_map_user_iov() and __bio_iov_iter_get_pages() when adding pages to the bio via page_is_mergeable(). So it's not about requests being merged it's about pages being merged. So I'm not sure how we can avoid this, but it only happens when two adjacent pages are added to the same bio in a row, so I don't think it's that common, but the check can probably be moved down so it happens after the same_page check to make it a little less common. Logan Logan ___ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu
Re: [PATCH v7 16/21] block: add check when merging zone device pages
On 2022-06-29 00:46, Christoph Hellwig wrote: > On Wed, Jun 15, 2022 at 10:12:28AM -0600, Logan Gunthorpe wrote: >> Consecutive zone device pages should not be merged into the same sgl >> or bvec segment with other types of pages or if they belong to different >> pgmaps. Otherwise getting the pgmap of a given segment is not possible >> without scanning the entire segment. This helper returns true either if >> both pages are not zone device pages or both pages are zone device >> pages with the same pgmap. >> >> Add a helper to determine if zone device pages are mergeable and use >> this helper in page_is_mergeable(). > > Any reason not to simply set REQ_NOMERGE for these requests? We > can't merge for passthrough requests anyway, and genrally don't merge > for direct I/O either, so adding all this overhead seems a bit pointless. Hmm, I suppose we could also ensure that REQ_NOMERGE is set in a bio before setting FOLL_PCI_P2PDMA in bio_map_user_iov() and __bio_iov_iter_get_pages(). Assuming it's always set for any direct I/O. I'll look into it. Logan ___ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu
Re: [PATCH v7 16/21] block: add check when merging zone device pages
On Wed, Jun 15, 2022 at 10:12:28AM -0600, Logan Gunthorpe wrote: > Consecutive zone device pages should not be merged into the same sgl > or bvec segment with other types of pages or if they belong to different > pgmaps. Otherwise getting the pgmap of a given segment is not possible > without scanning the entire segment. This helper returns true either if > both pages are not zone device pages or both pages are zone device > pages with the same pgmap. > > Add a helper to determine if zone device pages are mergeable and use > this helper in page_is_mergeable(). Any reason not to simply set REQ_NOMERGE for these requests? We can't merge for passthrough requests anyway, and genrally don't merge for direct I/O either, so adding all this overhead seems a bit pointless. ___ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu