From: Artur Skawina <art_k@o2.pl>
To: Ingo Molnar <mingo@elte.hu>
Cc: Chuck Ebbert <76306.1226@compuserve.com>,
linux-kernel <linux-kernel@vger.kernel.org>,
Linus Torvalds <torvalds@osdl.org>, Andi Kleen <ak@suse.de>,
Ulrich Drepper <drepper@redhat.com>,
Roland McGrath <roland@redhat.com>,
Jakub Jelinek <jakub@redhat.com>
Subject: Re: [RFC, patch] i386: vgetcpu(), take 2
Date: Wed, 21 Jun 2006 19:38:58 +0200 [thread overview]
Message-ID: <44998432.4070002@o2.pl> (raw)
In-Reply-To: <20060621081539.GA14227@elte.hu>
Ingo Molnar wrote:
> * Chuck Ebbert <76306.1226@compuserve.com> wrote:
>
>> Use a GDT entry's limit field to store per-cpu data for fast access
>> from userspace, and provide a vsyscall to access the current CPU
>> number stored there.
>
> very nice idea! I thought of doing sys_get_cpu() too, but my idea was to
> use the scheduler to keep a writable [and permanently pinned,
> per-thread] VDSO data page uptodate with the current CPU# [and other
> interesting data]. Btw., do we know how fast LSL is on modern CPUs?
a quick check on two p2/p4 boxes gives the cycle numbers below. syscall/io times for comparison.
Not that cheap, but still only ~1/4 of a syscall...
P4 P2
123 39 {movl $-47,%%eax ; movl $((27<<3)|3),%%edx ; lsll %%edx,%%eax ; jnz 1f ; andl $0xff,%%eax ; 1: ;} (average: 155)
959 287 {movl $20,%%eax ; int $0x80 ; # getpid() } (average: 983)
475 153 {movl $20,%%eax ; call *vsyscall ; # getpid() } (average: 519)
333 586 {outb %%al,$0x80;} (average: 369)
3572 1181 {outb %%al,$0x80;outb %%al,$0x80;} (average: 3628)
6755 1557 {outb %%al,$0x80;outb %%al,$0x80;outb %%al,$0x80;} (average: 6866)
P2:
cpu family : 6
model : 5
model name : Pentium II (Deschutes)
stepping : 2
cpu MHz : 400.982
cache size : 512 KB
P4:
cpu family : 15
model : 4
model name : Intel(R) Celeron(R) CPU 2.53GHz
stepping : 1
cpu MHz : 2533.270
cache size : 256 KB
next prev parent reply other threads:[~2006-06-21 17:39 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-21 7:27 [RFC, patch] i386: vgetcpu(), take 2 Chuck Ebbert
2006-06-21 8:15 ` Ingo Molnar
2006-06-21 17:38 ` Artur Skawina [this message]
2006-06-28 5:44 ` Paul Jackson
2006-06-28 8:53 ` Andi Kleen
2006-06-28 9:00 ` Ingo Molnar
2006-06-29 8:47 ` Paul Jackson
2006-06-21 9:26 ` Andi Kleen
2006-06-21 9:35 ` Ingo Molnar
2006-06-21 21:54 ` Rohit Seth
2006-06-21 22:21 ` Andi Kleen
2006-06-21 22:59 ` Rohit Seth
2006-06-21 23:05 ` Andi Kleen
2006-06-21 23:18 ` Rohit Seth
2006-06-21 23:29 ` Andi Kleen
2006-06-22 0:55 ` Rohit Seth
2006-06-22 8:08 ` Andi Kleen
2006-06-22 21:06 ` Rohit Seth
2006-06-22 22:14 ` Andi Kleen
2006-06-22 23:10 ` Rohit Seth
2006-06-23 12:42 ` [discuss] " Andi Kleen
2006-06-24 2:06 ` Rohit Seth
2006-06-24 8:42 ` Andi Kleen
2006-06-27 1:13 ` Rohit Seth
-- strict thread matches above, loose matches on Subject: below --
2006-06-21 12:24 Chuck Ebbert
2006-06-21 17:14 ` Andi Kleen
2006-06-21 17:27 ` Linus Torvalds
2006-06-21 17:50 ` Andi Kleen
2006-06-22 12:23 Chuck Ebbert
2006-06-22 12:44 ` Andi Kleen
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=44998432.4070002@o2.pl \
--to=art_k@o2.pl \
--cc=76306.1226@compuserve.com \
--cc=ak@suse.de \
--cc=drepper@redhat.com \
--cc=jakub@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=roland@redhat.com \
--cc=torvalds@osdl.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.