On Sat, 2006-07-15 at 10:37 +0200, Jan Kiszka wrote:
> Philippe Gerum wrote:
> > On Sat, 2006-07-15 at 10:06 +0200, Jan Kiszka wrote:
> >> Philippe Gerum wrote:
> >>> On Thu, 2006-07-13 at 13:13 +0200, Jan Kiszka wrote:
> >>>> Hi,
> >>>>
> >>>> some may recall the "micro-optimisation" thread I once started. Here is
> >>>> now a simple approach to deal with the yet suboptimal mux-code
> >>>> calculation in user-space. Code saving:
> >>>>
> >>>> Before:
> >>>>    text    data     bss     dec     hex filename
> >>>>   18004     476       8   18488    4838 native/.libs/libnative.so
> >>>>   27445     696       4   28145    6df1 posix/.libs/libpthread_rt.so
> >>>>
> >>>> After:
> >>>>    text    data     bss     dec     hex filename
> >>>>   17172     476       8   17656    44f8 native/.libs/libnative.so
> >>>>   26805     696       4   27505    6b71 posix/.libs/libpthread_rt.so
> >>>>
> >>>> Of course, this also results in a few ops less being executed on each
> >>>> Xenomai syscall invocation (not many cycles, though).
> >>>>
> >>>> Tested without problems on x86 so far.
> >>>>
> >>> This is post 2.2 stuff since we need to check this critical change
> >>> against each and every supported arch. 
> >> Agree, there is no need to hurry in 2.2.
> >>
> >>> Since this breaks the ABI
> >>> including the ascending compatibility between old apps and new kernel
> >>> support, this won't make it during the v2 series either.
> >> The ABI chance just took place due to my laziness - I didn't want to
> >> touch every skin library. Anyway, this ABI breakage can be avoided with
> >> slightly more effort, i.e. by doing the shift in user-space during the
> >> binding.
> >>
> > 
> > Yes, the mangling should be done in xeno_user_skin_init().
> 
> Oh, great, I forgot the new common init code for the skin. This will help.
> 
> > 
> >>>> Jan
> >>>> plain text document attachment (optimise-muxcode-calculation.patch)
> >>>> ---
> >>>>  include/asm-arm/syscall.h      |   25 +++++++++++++------------
> >>>>  include/asm-blackfin/syscall.h |    4 +++-
> >>>>  include/asm-i386/syscall.h     |    3 ++-
> >>>>  include/asm-ia64/syscall.h     |   23 ++++++++++++-----------
> >>>>  include/asm-powerpc/syscall.h  |    3 ++-
> >>>>  ksrc/nucleus/shadow.c          |    3 ++-
> >>>>  6 files changed, 34 insertions(+), 27 deletions(-)
> >>>>
> >>>> Index: xenomai/include/asm-arm/syscall.h
> >>>> ===================================================================
> >>>> --- xenomai.orig/include/asm-arm/syscall.h
> >>>> +++ xenomai/include/asm-arm/syscall.h
> >>>> @@ -26,6 +26,7 @@
> >>>>  #include <asm-generic/xenomai/syscall.h>
> >>>>  
> >>>>  #define __xn_mux_code(id,op)    ((op << 24)|((id << 16) & 
> >>>> 0xff0000)|(__xn_sys_mux & 0xffff))
> >>>> +#define __xn_mux_code_shft(shifted_id,op) ((op << 
> >>>> 24)|shifted_id|(__xn_sys_mux & 0xffff))
> >>> +#define __xn_mux_code_shft(shifted_id,op) ((op << 24)|shifted_id)
> >>>
> >>> should be enough.
> >> Given my current calculation of the muxid in the kernel, yes. But the
> >> original variant has zero effect on the code and looks more consistent
> >> to me.
> > 
> > I don't get why actually. If the point is about reducing the number of
> > micro operations per syscall, then leaving this redundancy is pointless.
> 
> As "op" is typically, well, always constant, that __xn_sys_mux bits are
> just merge during compile time into the same constant.
> 

Exactly, this is part of what I called "relative obfuscation". If both
codes do the same thing, then one of them is one too many.

> > The relative obfuscation this optimization brings to the code is already
> > there, regardless of when the mux tag is crammed into the syscall code:
> > in any case, we have an half-baked syscall code which is going to be
> > adjusted at invocation time.
> 
> My second approach will likely only shift the muxid ahead-of-time, thus
> reduce obfuscation a bit again.
> 
> > 
> >>> <snip>
> >>>
> >>>> Index: xenomai/include/asm-blackfin/syscall.h
> >>>> ===================================================================
> >>>> --- xenomai.orig/include/asm-blackfin/syscall.h
> >>>> +++ xenomai/include/asm-blackfin/syscall.h
> >>>> @@ -27,6 +27,7 @@
> >>>>     (i.e. negative syscall number in orig_p0 meaning "non-syscall
> >>>>     entry"). */
> >>>>  #define __xn_mux_code(id,op)   ((id << 24)|((op << 16) & 
> >>>> 0xff0000)|(__xn_sys_mux & 0xffff))
> >>>> +#define __xn_mux_code_fast(shifted_id,op) ((op << 
> >>>> 24)|shifted_id|(__xn_sys_mux & 0xffff))
> >>>>  
> >>> Breakage alert.
> >>>
> >> Oops.
> >>
> >> Ok, I will rework this patch.
> >>
> >> Jan
> >>
> 
> 
-- 
Philippe.



_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to