Re: Performance of L4

Adam Lackorzynski <[email protected]>
Newsgroups gmane.comp.micro-kernel.l4.devel
Message-ID <[email protected]>
Hi,

On Fri Dec 25, 2015 at 19:43:13 +0100, Patrick Staeblein wrote:
> I am still writing on my bachelors-thesis on
> the performance of L4/Fiasco and wanted to ask you 
> 
> if you can give me
> some hints and ideas. My goal was to find out how the time-costs are
> divided between ipc, memory access and scheduling 
> and resulting out of
> this what properties programs should have that makes them execute as
> fast as possible. 
> 
> For measuring the ipc-time i used the
> ipc_example.c-file in the ./src/l4/pkg/examples/sys directory and added
> rdtsc (Read Time Stamp Counter)-instructions 
> 
> before and after making
> the ipc-call and then calculating the difference between the two values.
> This was executed in a loop and the resulting values were divided into
> ten equal-sized range-classes depicting them as a histogram.The
> results showed the ipc-time to be pretty stable with almost all values
> falling into one class 

That's ok to do. Please make sure that you build Fiasco with inlining,
and disable debugging and assertions.

> Does
> anyone have an idea what kind of measurement one could do for a
> measurement of the scheduling? I found the function
> l4_scheduler_idle_time (...), but I don't 
> have an idea for using it in
> a concrete program or experiment setup. 

That call just returns the time a CPU is idling, i.e. it does not tell
you what scheduling itself takes. This is a bit difficult to measure.
Scheduling, i.e. choosing a thread to run is triggered either by an
interrupt or by IPC. So you do not get it alone. You could take
timestamps in the kernel directly (e.g. in Context::schedule()) to get
this block on its own.

> I also thought about
> repeatedly measuring the time it takes for one context-switch, but I
> don't know in which place exactly I would have to insert the
> rdtsc-instructions. 

The context switch is in Context::switch_cpu(), or more broadly, it is
called from Context::switch_exec_locked().
What you could also do in user-level is to have two threads with the
same prio and sample tsc in each. When there's a larger gap in the
consecutive tsc read outs (>5ms) you've hit a context switch. When
correlating this with the other thread you'll have some time. But be
aware that you're also measuring interrupt processing with this that
initiated the context switch.

> Does anyone know which exact C-file would have to
> be modified for that? 

The locations to look at are in the context*.cpp files.



Adam
-- 
Adam                 [email protected]
  Lackorzynski         http://os.inf.tu-dresden.de/~adam/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.