Thread (17 messages) flat view 17 messages, 8 authors, 2024-06-21

Re: [PATCH] net: micro-optimize skb_datagram_iter

From: Sagi Grimberg <sagi@grimberg.me>
Date: 2024-06-19 13:54:25
Also in: oe-lkp


On 19/06/2024 15:46, David Howells wrote:
Jakub Kicinski [off-list ref] wrote:
quoted
On Mon, 17 Jun 2024 09:29:53 +0300 Sagi Grimberg wrote:
quoted
quoted
Probably because kmap() returns page_address() for non-highmem pages
while kmap_local_page() actually returns a kmap address:

          if (!IS_ENABLED(CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP) && !PageHighMem(page))
                  return page_address(page);
          return __kmap_local_pfn_prot(page_to_pfn(page), prot);

so if skb frags are always lowmem (are they?) this is a false positive.
AFAIR these buffers are coming from the RX ring, so they should be
coming from a page_frag_cache,
so I want to say always low memory?
quoted
if they can be highmem, then you've uncovered a bug that nobody's
noticed because nobody's testing on 32-bit any more.
Not sure, Jakub? Eric?
My uneducated guess would be that until recent(ish) sendpage rework
from David Howells all high mem pages would have been single pages.
Um.  I touched the Tx side, not the Rx side.

I also don't know whether all high mem pages would be single pages.  I'll have
to defer that one to the MM folks.
What prevents from gro to expand frags from crossing PAGE_SIZE?

btw, at least from the code in skb_gro_receive() it appears that 
page_address() is called directly,
which suggest that these netmem pages are lowmem?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help