From: "Mattias Rönnblom" <hofors@lysator.liu.se>
To: "Morten Brørup" <mb@smartsharesystems.com>,
"Maxime Coquelin" <maxime.coquelin@redhat.com>,
"Stephen Hemminger" <stephen@networkplumber.org>,
"Andrey Ignatov" <rdna@apple.com>
Cc: dev@dpdk.org, Chenbo Xia <chenbox@nvidia.com>,
Wei Shen <wshen0123@apple.com>,
techboard@dpdk.org
Subject: Re: The effect of inlining
Date: Mon, 1 Apr 2024 17:20:07 +0200 [thread overview]
Message-ID: <d7c9f5ad-badd-4105-9fd4-d0a096953ad0@lysator.liu.se> (raw)
In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35E9F33E@smartserver.smartshare.dk>
On 2024-03-29 14:42, Morten Brørup wrote:
> +CC techboard
>
>> From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com]
>> Sent: Friday, 29 March 2024 14.05
>>
>> Hi Stephen,
>>
>> On 3/29/24 03:53, Stephen Hemminger wrote:
>>> On Thu, 28 Mar 2024 17:10:42 -0700
>>> Andrey Ignatov <rdna@apple.com> wrote:
>>>
>>>>>
>>>>> You don't need always inline, the compiler will do it anyway.
>>>>
>>>> I can remove it in v2, but it's not completely obvious to me how is
>> it
>>>> decided when to specify it explicitly and when not?
>>>>
>>>> I see plenty of __rte_always_inline in this file:
>>>>
>>>> % git grep -c '^static __rte_always_inline' lib/vhost/virtio_net.c
>>>> lib/vhost/virtio_net.c:66
>>>
>>>
>>> Cargo cult really.
>>>
>>
>> Cargo cult... really?
>>
>> Well, I just did a quick test by comparing IO forwarding with testpmd
>> between main branch and with adding a patch that removes all the
>> inline/noinline in lib/vhost/virtio_net.c [0].
>>
>> main branch: 14.63Mpps
>> main branch - inline/noinline: 10.24Mpps
>
> Thank you for testing this, Maxime. Very interesting!
>
> It is sometimes suggested on techboard meetings that we should convert more inline functions to non-inline for improved API/ABI stability, with the argument that the performance of inlining is negligible.
>
I think you are mixing two different (but related) things here.
1) marking functions with the inline family of keywords/attributes
2) keeping function definitions in header files
1) does not affect the ABI, while 2) does. Neither 1) nor 2) affects the
API (i.e., source-level compatibility).
2) *allows* for function inlining even in non-LTO builds, but doesn't
force it.
If you don't believe 2) makes a difference performance-wise, it follows
that you also don't believe LTO makes much of a difference. Both have
the same effect: allowing the compiler to reason over a larger chunk of
your program.
Allowing the compiler to inline small, often-called functions is crucial
for performance, in my experience. If the target symbol tend to be in a
shared object, the difference is even larger. It's also quite common
that you see no effect of LTO (other than a reduction of code footprint).
As LTO becomes more practical to use, 2) loses much of its appeal.
If PGO ever becomes practical to use, maybe 1) will as well.
> I think this test proves that the sum of many small (negligible) performance differences it not negligible!
>
>>
>> Andrey, thanks for the patch, I'll have a look at it next week.
>>
>> Maxime
>>
>> [0]: https://pastebin.com/72P2npZ0
>
next prev parent reply other threads:[~2024-04-01 15:20 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-28 23:33 [PATCH] vhost: optimize mbuf allocation in virtio Tx packed path Andrey Ignatov
2024-03-28 23:44 ` Stephen Hemminger
2024-03-29 0:10 ` Andrey Ignatov
2024-03-29 2:53 ` Stephen Hemminger
2024-03-29 13:04 ` Maxime Coquelin
2024-03-29 13:42 ` The effect of inlining Morten Brørup
2024-03-29 20:26 ` Tyler Retzlaff
2024-04-01 15:20 ` Mattias Rönnblom [this message]
2024-04-03 16:01 ` Morten Brørup
2024-04-03 10:19 ` [PATCH] vhost: optimize mbuf allocation in virtio Tx packed path Maxime Coquelin
2024-06-12 8:32 ` Maxime Coquelin
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=d7c9f5ad-badd-4105-9fd4-d0a096953ad0@lysator.liu.se \
--to=hofors@lysator.liu.se \
--cc=chenbox@nvidia.com \
--cc=dev@dpdk.org \
--cc=maxime.coquelin@redhat.com \
--cc=mb@smartsharesystems.com \
--cc=rdna@apple.com \
--cc=stephen@networkplumber.org \
--cc=techboard@dpdk.org \
--cc=wshen0123@apple.com \
/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).