DPDK patches and discussions
 help / color / mirror / Atom feed
From: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
To: Don Wallwork <donw@xsightlabs.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [RFC] EAL: legacy memory fixed address translations
Date: Tue, 26 Jul 2022 22:59:10 +0300	[thread overview]
Message-ID: <20220726225910.26159820@sovereign> (raw)
In-Reply-To: <6aaa04d8-2ac5-ced6-ec25-d42bc52a3e2f@xsightlabs.com>

Hi Don,

2022-07-26 14:33 (UTC-0400), Don Wallwork:
> This proposal describes a method for translating any huge page
> address from virtual to physical or vice versa using simple
> addition or subtraction of a single fixed value. This allows
> devices to efficiently access arbitrary huge page memory, even
> stack data when worker stacks are in huge pages.

What is the use case and how much is the benefit?

When drivers need to process a large number of memory blocks,
these are typically packets in the form of mbufs,
which already have IOVA attached, so there is no translation.
Does translation of mbuf VA to PA with the proposed method
show significant improvement over reading mbuf->iova?

When drivers need to process a few IOVA-contiguous memory blocks,
they can calculate VA-to-PA offsets in advance,
amortizing translation cost.
Hugepage stack falls within this category.

> When legacy memory mode is used, it is possible to map a single
> virtual memory region large enough to cover all huge pages. During
> legacy hugepage init, each hugepage is mapped into that region.

Legacy mode is called "legacy" with an intent to be deprecated :)
There is initial allocation (-m) and --socket-limit in dynamic mode.
When initial allocation is equal to the socket limit,
it should be the same behavior as in legacy mode:
the number of hugepages mapped is constant and cannot grow,
so the feature seems applicable as well.

> Once all pages have been mapped, any unused holes in that memory
> region are unmapped.

Who tracks these holes and prevents translation from their VA?
Why the holes appear?

> This feature is applicable when rte_eal_iova_mode() == RTE_IOVA_PA

One can say it always works for RTE_IOVA_VA with VA-to-PA offset of 0.

> and could be enabled either by default when the legacy memory EAL
> option is given, or a new EAL option could be added to specifically
> enable this feature.
> 
> It may be desirable to set a capability bit when this feature is
> enabled to allow drivers to behave differently depending on the
> state of that flag.

The feature requires, in IOVA-as-PA mode:
1) that hugepage mapping is static (legacy mode or "-m" == "--socket-limit");
2) that EAL has succeeded to map all hugepages in one PA-continuous block.
As userspace code, DPDK cannot guarantee 2).
Because this mode breaks nothing and just makes translation more efficient,
DPDK can always try to implement it and then report whether it has succeeded.
Applications and drivers can decide what to do by querying this API.

  reply	other threads:[~2022-07-26 19:59 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-26 18:18 RFC: EAL " Don Wallwork
2022-07-26 18:33 ` [RFC] EAL: " Don Wallwork
2022-07-26 19:59   ` Dmitry Kozlyuk [this message]
2022-07-27 17:20     ` Don Wallwork
2022-07-27 19:12       ` Stephen Hemminger
2022-07-27 19:27         ` Don Wallwork
2022-07-27 20:36       ` Dmitry Kozlyuk
2022-07-27 21:43         ` Don Wallwork
2022-07-28  7:25           ` Dmitry Kozlyuk
2022-07-28 11:29             ` Morten Brørup
2022-07-28 14:46               ` Don Wallwork
2022-07-28 15:41                 ` Don Wallwork
2022-07-28 16:33                   ` Dmitry Kozlyuk

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=20220726225910.26159820@sovereign \
    --to=dmitry.kozliuk@gmail.com \
    --cc=dev@dpdk.org \
    --cc=donw@xsightlabs.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).