DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Mattias Rönnblom" <hofors@lysator.liu.se>
To: dev@dpdk.org
Subject: Re: [RFC v2] non-temporal memcpy
Date: Sun, 7 Aug 2022 22:40:43 +0200	[thread overview]
Message-ID: <4ef33229-c9dd-3043-7f2d-25102b823cac@lysator.liu.se> (raw)
In-Reply-To: <20220729090548.2cdffd4e@hermes.local>

On 2022-07-29 18:05, Stephen Hemminger wrote:
> On Fri, 29 Jul 2022 12:13:52 +0000
> Konstantin Ananyev <konstantin.ananyev@huawei.com> wrote:
> 
>> Sorry, missed that part.
>>
>>>    
>>>> Another question - who will do 'sfence' after the copying?
>>>> Would it be inside memcpy_nt (seems quite costly), or would
>>>> it be another API function for that: memcpy_nt_flush() or so?
>>>
>>> Outside. Only the developer knows when it is required, so it wouldn't make any sense to add the cost inside memcpy_nt().
>>>
>>> I don't think we should add a flush function; it would just be another name for an already existing function. Referring to the required
>>> operation in the memcpy_nt() function documentation should suffice.
>>>    
>>
>> Ok, but again wouldn't it be arch specific?
>> AFAIK for x86 it needs to boil down to sfence, for other architectures - I don't know.
>> If you think there already is some generic one (rte_wmb?) that would always produce
>> correct instructions - sure let's use it.
>>   
>>   
> 
> It makes sense in a few select places to use non-temporal copy.
> But it would add unnecessary complexity to DPDK if every function in DPDK that could
> cause a copy had a non-temporal variant.

A NT load and NT store variant, plus a NT load+store variant. :)

> 
> Maybe just having rte_memcpy have a threshold (config value?) that if copy is larger than
> a certain size, then it would automatically be non-temporal.  Small copies wouldn't matter,
> the optimization is more about not stopping cache size issues with large streams of data.

I don't think there's any way for rte_memcpy() to know if the 
application plan to use the source, the destination, both, or neither of 
the buffers in the immediate future. For huge copies (MBs or more) the 
size heuristic makes sense, but for medium sized copies (say a packet 
worth of data), I'm not so sure.

What is unclear to me is if there is a benefit (or drawback) of using 
the imaginary rte_memcpy_nt(), compared to doing rte_memcpy() + 
clflushopt or cldemote, in the typical use case (if there is such).


  parent reply	other threads:[~2022-08-07 20:40 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-19 15:26 Morten Brørup
2022-07-19 18:00 ` David Christensen
2022-07-19 18:41   ` Morten Brørup
2022-07-19 18:51     ` Stanisław Kardach
2022-07-19 22:15       ` Morten Brørup
2022-07-21 23:19 ` Konstantin Ananyev
2022-07-22 10:44   ` Morten Brørup
2022-07-24 13:35     ` Konstantin Ananyev
2022-07-24 22:18       ` Morten Brørup
2022-07-29 10:00         ` Konstantin Ananyev
2022-07-29 10:46           ` Morten Brørup
2022-07-29 11:50             ` Konstantin Ananyev
2022-07-29 17:17               ` Morten Brørup
2022-07-29 22:00                 ` Konstantin Ananyev
2022-07-30  9:51                   ` Morten Brørup
2022-08-02  9:05                     ` Konstantin Ananyev
2022-07-29 12:13             ` Konstantin Ananyev
2022-07-29 16:05               ` Stephen Hemminger
2022-07-29 17:29                 ` Morten Brørup
2022-08-07 20:40                 ` Mattias Rönnblom [this message]
2022-08-09  9:24                   ` Morten Brørup
2022-08-09 11:53                     ` Mattias Rönnblom
2022-10-09 16:16                       ` Morten Brørup
2022-07-29 18:13               ` Morten Brørup
2022-07-29 19:49                 ` Konstantin Ananyev
2022-07-29 20:26                   ` Morten Brørup
2022-07-29 21:34                     ` Konstantin Ananyev
2022-08-07 20:20                     ` Mattias Rönnblom
2022-08-09  9:34                       ` Morten Brørup
2022-08-09 11:56                         ` Mattias Rönnblom
2022-08-10 21:05                     ` Honnappa Nagarahalli
2022-08-11 11:50                       ` Mattias Rönnblom
2022-08-11 16:26                         ` Honnappa Nagarahalli
2022-07-25  1:17       ` Honnappa Nagarahalli
2022-07-27 10:26         ` Morten Brørup
2022-07-27 17:37           ` Honnappa Nagarahalli
2022-07-27 18:49             ` Morten Brørup
2022-07-27 19:12               ` Stephen Hemminger
2022-07-28  9:00                 ` Morten Brørup
2022-07-27 19:52               ` Honnappa Nagarahalli
2022-07-27 22:02                 ` Stanisław Kardach
2022-07-28 10:51                   ` Morten Brørup
2022-07-29  9:21                     ` Konstantin Ananyev
2022-08-07 20:25 ` Mattias Rönnblom
2022-08-09  9:46   ` Morten Brørup
2022-08-09 12:05     ` Mattias Rönnblom
2022-08-09 15:00       ` Morten Brørup
2022-08-10 11:47         ` Mattias Rönnblom
2022-08-09 15:26     ` Stephen Hemminger
2022-08-09 17:24       ` Morten Brørup
2022-08-10 11:59         ` Mattias Rönnblom
2022-08-10 12:12           ` Morten Brørup
2022-08-10 11:55       ` Mattias Rönnblom
2022-08-10 12:18         ` Morten Brørup
2022-08-10 21:20           ` Honnappa Nagarahalli
2022-08-11 11:53             ` Mattias Rönnblom
2022-08-11 22:24               ` Honnappa Nagarahalli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4ef33229-c9dd-3043-7f2d-25102b823cac@lysator.liu.se \
    --to=hofors@lysator.liu.se \
    --cc=dev@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).