* [Linux-ia64] Confused about fsystemcalls
@ 2003-01-30 0:07 Peter Chubb
0 siblings, 0 replies; only message in thread
From: Peter Chubb @ 2003-01-30 0:07 UTC (permalink / raw)
To: linux-ia64
Hi David,
We're tryign to use the fast system call stuff here, but our
measurements show way more overhead than the standard `break'
mechanism. I suspect we're doing something badly wrong.
We've written a little stub to call the fast system call entry point
directly (to save trying to get into libc).
Here it is (I know there are more stop bits than necessary).
#include <asm/asmmacro.h>
GLOBAL_ENTRY(mygetpid)
.prologue
.save ar.pfs, r11
mov r11 = ar.pfs
.body
movl r2 = 0xa000000000020000;; // start of gate page
mov b7 = r2;;
mov r15 = 1041;;
br.call.sptk.many b6 = b7;;
.restore sp
mov ar.pfs = r11
br.ret.sptk.many rp;;
END(mygetpid)
In System.map, syscall_via_epc and __start_gate_section have the same
value, 0xe000000004a50000, so I figure the address in user space of
syscall_via_epc is GATE_ADDR (0xa000000000000000 + 2*PERCPU_PAGE_SIZE)
The mygetpid() call appears to return the correct value.
Our figures show over an average of ten runs:
--- glibc getpid() takes 579 cycles, stddev 24
--- mygetpid takes 1468 cycles, stddev 286
I was also a little confused about the entry put into the ELF AUX vector --
was the value or the user-space address of syscall_via_epc meant to go
into the vector?
Currently it says in include/asm-ia64/elf.h
#define ARCH_DLINFO \
do {
\
extern int syscall_via_epc; \
NEW_AUX_ENT(AT_SYSINFO, syscall_via_epc); \
} while (0)
I keep thinking this should be
extern char syscall_via_epc[];
extern char__start_gate_section[];
NEW_AUX_ENT(AT_SYSINFO, syscall_via_epc - __start_gate_section +
GATE_ADDR);
Peter C
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2003-01-30 0:07 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-01-30 0:07 [Linux-ia64] Confused about fsystemcalls Peter Chubb
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox