Some questions about performance optimization related toGUIframework on Genode

w_schmidt at ...181... w_schmidt at ...181...
Sat Sep 6 10:06:59 CEST 2014


just a side advice: do not use RTC as i also tried to measure some actions.

I tried the following
   rtc1 = rtc.get_current_time();
   rtc2 = rtc.get_current_time();
and always got a difference of 1 second. (in a loop) – and that was only with calling rtc.

So i looked at RTC ( ) and found: “return mktime(day, mon, year, hour, min, sec) * 1000000ULL;”  so it only has a precision of one second and only gives you a value that looks like it could have a higher precision.

Take alook at RDTSC in\timestamp.h
This will inline the code so you do not have costly RPC calls.

RDTSC will give you huge numbers, the prozessor counters. If your prozessor is running at for example 2.4 Ghz you will see values for one second around 2.400.000.000 (can differ a bit as machines are not running exactly at x Mhz).
With the machine i tested it is still not completly accurate, but has a standard deviation less then 50 microseconds.

Best regards

From: 王硕 
Sent: Friday, September 5, 2014 10:24 PM
To: genode-main 
Subject: Re: Some questions about performance optimization related toGUIframework on Genode

Hello Norman,

In Genode, it takes approximately 3 seconds for qt_launchpad to launch, and more than 1 seconds for other apps to launch. This is too slow, so my task is to reduce the launch time of qt_launchpad and apps. But I don't know what the reason of the low performance is. So I turn to you for some advice.

I use Rtc (\os\src\drivers\rtc\x86) to record the launch time of qt_launchpad and apps as listed below:

in main.cpp of qt_launchpad:

int main(int argc, char *argv[])
/*Use Rtc to record the time*/
/*Use Rtc to record the time again*/ 

in launch_entry.cpp of qt_launchpad: 

void Launch_entry::on_launchButton_clicked()

/*Use Rtc to record the time*/ 
_launchpad->start_child(_filename, ...);

/*Use Rtc to record the time again*/ 

Shuo Wang, 
University of Chinese Academy of Sciences.

----‍--‍--‍Original mail----‍--‍--
Sender: norman.feske <norman.feske at ...1...>    
(by genode-main-bounces at )
Time: 2014-09-01 (Mon) 12:00 (UTC+02:00)    
Receiver: genode-main <genode-main at>
Hello Shuo Wang,

> The Git branch of our genode is listed below:

thanks for making your modifications publicly available. But I am wondering:

Why haven't you just forked the Genode repository? See

By having imported a snapshot of the source code to a new repository,
you removed all the history and cannot easily follow the mainline
development. For me, this makes it almost impossible to spot your
modifications. Why haven't you just applied your changes as a topic
branch on top of the regular Genode repository?

Moreover, why have you removed the LICENSE file from top-level
directory? The license is important information and should always be
prominently visible.

I would also recommend to keep the original README file or, at least,
provide a link to the original Genode repository.

> * Have you tried to run your GUI application on base-linux? If yes,
> have you compared its performance to the same application compiled for
> native Linux w/o Genode?
> Our apps is Fiasco.OC-specific, so I don't know how to run these apps on
> base-linux.
> * On base-linux, you could use normal Linux profiling tools such as
> oprofile to find out where the CPU time goes.
> Please recommend some similar tools on base-foc.

There is no such tool for base-foc. For this reason, I recommended to
run the application on base-linux in the first place.

Even if you application depends on Fiasco.OC, you might still use any of
the other (portable) example applications to investigate an eventual
performance problem of Qt. First check if the behavior that you noticed
can be reproduced with one of those example applications. If that is the
case, run the same application on Linux and use oprofile to investigate.

> * Can you make a Git branch with your application publicly available‍
> To run the vsos, use
> $ ./create_builddir fox_x86_32 build_dir=~/<build-directory>
> to create a build directory, and then execute
> $ make run/verify
> in build directory.

Unfortunately, I am not able to compile it. I get an error as follows:

  /open/incoming/vsos/base/include/base/rpc_server.h:152:41: error:
‘l4_utcb_id’ is not a member of ‘Fiasco’

The type 'l4_utcb_id' does not exist in the 'base-foc/contrib' source
tree. It seems like you changed the kernel but invoking 'make prepare'
within 'base-foc' fetches the original kernel.

Best regards

Dr.-Ing. Norman Feske
Genode Labs ·

Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden
Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth

Slashdot TV.  
Video for Nerds.  Stuff that matters.
genode-main mailing list
genode-main at

Slashdot TV.  
Video for Nerds.  Stuff that matters. 

genode-main mailing list
genode-main at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the users mailing list