From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Chris Kennelly <ckennelly@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Paul Turner <pjt@google.com>, Peter Oskolkov <posk@posk.io>,
linux-kernel <linux-kernel@vger.kernel.org>,
"carlos@redhat.com" <carlos@redhat.com>,
Florian Weimer <fw@deneb.enyo.de>,
"linux-api@vger.kernel.org" <linux-api@vger.kernel.org>
Subject: Re: [PATCH v4 00/25] RSEQ node id and virtual cpu id extensions
Date: Fri, 23 Sep 2022 09:46:15 -0400 [thread overview]
Message-ID: <77543974-cd67-3999-103e-6714d04f0e5e@efficios.com> (raw)
In-Reply-To: <CAEE+ybnLUHjU5-dWcWgcWiq-AM4ocquSbZ=PWiuexEsPB8P5Gw@mail.gmail.com>
On 2022-09-22 16:10, Chris Kennelly wrote:
> Hi,
>
> I still need to update the code in TCMalloc to cooperate with the new
> glibc ABI/convention. One concern I have is that it looks like I might
> need to add a extra memory dereference (or two) to get the early
> initialized offsets provided by glibc folded into the read of the cpu_id
> field.
If you have a concrete example of this, I'd be happy to help and perhaps
we can improve your usage pattern.
>
> I think I can avoid this by using %gs to point to the address of the
> cpu_id field itself (which I think could be used to select between vCPUs
> or not*), but %gs is a global piece of state that all of the libraries
> in the program need to cooperate on.
I think what we are all looking for here is a scheme that would allow us
the fastest per-vcpu data structure accesses possible from userspace.
I think we could do something similar to what is done in the Linux
kernel for that, but in userspace. Here are some random ideas I have on
this topic:
We could introduce a new prctl(2) PT_{SET,GET}_GS_MODE on x86-64. This
would take as arguments the indexing mode and offset multiplier we want
to be applied to the GS segment selector on return to userspace:
enum gs_index_mode {
GS_INDEX_MODE_MM_VCPU,
};
struct prctl_set_gs_mode {
enum gs_index_mode index_mode;
u64 stride;
};
For a memory space which has this gs mode set, the return to userspace
code would populate the GS segment selector register with:
stride * current->mm_vcpu_id
The "stride" would be the virtual address space size allowed for
per-vcpu-data. This could be decided by the libc, with a tunable
allowing to increase/decrease this size. Another libc tunable could
disable populating the GS segment selector altogether (e.g. for
compatibility with applications like Wine which AFAIK use it).
With this in place, I hope we could then do per-vcpu data access by
simply prefixing memory access instructions with a %%gs: segment
selector prefix.
Thoughts ?
Thanks,
Mathieu
>
> Thanks,
> Chris
>
> * TCMalloc is already paying a load+pointer arithmetic to select between
> cpu_id versus vcpu_id, so this would actually make things a little bit
> faster.
>
> On Thu, Sep 22, 2022 at 3:21 PM Mathieu Desnoyers
> <mathieu.desnoyers@efficios.com <mailto:mathieu.desnoyers@efficios.com>>
> wrote:
>
> Hi Chris,
>
> Sorry it looks like I forgot to CC you on this series. If you can give
> it a spin with tcmalloc I would be very much interested in the result.
>
> Thanks,
>
> Mathieu
>
--
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com
next prev parent reply other threads:[~2022-09-23 13:45 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-22 10:59 Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 01/25] rseq: Introduce feature size and alignment ELF auxiliary vector entries Mathieu Desnoyers
2022-10-10 12:42 ` Florian Weimer
2022-10-17 16:09 ` Mathieu Desnoyers
2022-10-17 17:32 ` Mathieu Desnoyers
2022-10-18 15:34 ` Florian Weimer
2022-10-18 19:00 ` Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 02/25] rseq: Introduce extensible rseq ABI Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 03/25] rseq: Extend struct rseq with numa node id Mathieu Desnoyers
2022-09-23 11:13 ` Peter Zijlstra
2022-09-23 13:00 ` Mathieu Desnoyers
2022-09-23 13:09 ` [PATCH v4.1 03/25 1/1] " Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 04/25] selftests/rseq: Use ELF auxiliary vector for extensible rseq Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 05/25] selftests/rseq: Implement rseq numa node id field selftest Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 06/25] lib: Invert _find_next_bit source arguments Mathieu Desnoyers
2022-09-27 8:04 ` kernel test robot
2022-09-22 10:59 ` [PATCH v4 07/25] lib: Implement find_{first,next}_{zero,one}_and_zero_bit Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 08/25] cpumask: Implement cpumask_{first,next}_{zero,one}_and_zero Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 09/25] sched: Introduce per memory space current virtual cpu id Mathieu Desnoyers
2022-09-27 13:43 ` [PATCH v4.1 " Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 10/25] rseq: Extend struct rseq with per memory space vcpu id Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 11/25] selftests/rseq: Remove RSEQ_SKIP_FASTPATH code Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 12/25] selftests/rseq: Implement rseq vm_vcpu_id field support Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 13/25] selftests/rseq: x86: Template memory ordering and percpu access mode Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 14/25] selftests/rseq: arm: " Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 15/25] selftests/rseq: arm64: " Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 16/25] selftests/rseq: mips: " Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 17/25] selftests/rseq: ppc: " Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 18/25] selftests/rseq: s390: " Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 19/25] selftests/rseq: riscv: " Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 20/25] selftests/rseq: Implement basic percpu ops vm_vcpu_id test Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 21/25] selftests/rseq: Implement parametrized " Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 22/25] selftests/rseq: x86: Implement rseq_load_u32_u32 Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 23/25] selftests/rseq: Implement numa node id vs vm_vcpu_id invariant test Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 24/25] selftests/rseq: parametrized test: Report/abort on negative cpu id Mathieu Desnoyers
2022-09-22 10:59 ` [PATCH v4 25/25] tracing/rseq: Add mm_vcpu_id field to rseq_update Mathieu Desnoyers
2022-09-22 15:14 ` kernel test robot
2022-09-22 15:33 ` [PATCH v4.1 " Mathieu Desnoyers
2022-09-23 9:55 ` [PATCH v4 " kernel test robot
[not found] ` <e753568d-599c-d81a-8456-085bbbb0264d@efficios.com>
[not found] ` <CAEE+ybnLUHjU5-dWcWgcWiq-AM4ocquSbZ=PWiuexEsPB8P5Gw@mail.gmail.com>
2022-09-23 13:46 ` Mathieu Desnoyers [this message]
2022-10-10 13:04 ` [PATCH v4 00/25] RSEQ node id and virtual cpu id extensions Florian Weimer
2022-10-17 16:05 ` Mathieu Desnoyers
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=77543974-cd67-3999-103e-6714d04f0e5e@efficios.com \
--to=mathieu.desnoyers@efficios.com \
--cc=carlos@redhat.com \
--cc=ckennelly@google.com \
--cc=fw@deneb.enyo.de \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=pjt@google.com \
--cc=posk@posk.io \
/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
all inboxes | Powered by JetHome®