Performance issues with VBox+Android-x86

Christian Menard christian.menard at ...104...
Thu Nov 6 13:59:31 CET 2014


Hello everyone,

I'm still working on NOVA(64)+VBox+Android_x86 on the Panasonic Toughpad FZ-M1 
with Intel Core i5-4302Y CPU (With VT-X). After all the basic stuff is working 
my problem is that overall performance of the system is very bad. This issue 
is related to Genode as Android runs fast and with smooth animations on top of 
Linux+VBox and Linux+Qemu (on the same hardware).

Do you have any ideas on what might be causing the performance issues or any 
hints on where to investigate?

Here is what I know so far:

I used VBox's built-in performance counters to investigate the issue. Based on 
these counters I found that a big portion of processing time is spend on 
'other' tasks (most often more than 50%). This is described as "Time spent in 
the VMM or preempted recently."

I found that during boot-up a lot of time is spend in the Recompiler, or more 
specific: on executing recompiled code. Here is an example of the performance 
counter as found after Android booted to welcome screen:

/PROF/REM/Runcode
52808 ticks/call (112541953198 ticks, 2131148 times, max 9428119254, min 116)

What surprises me here is the max value. Several billion ticks (should 
correspond to several seconds of processing time) seems to be very much for 
instruction emulation. However, only a small amount of time is spend in 
Runcode once Android is booted up. So if this is an issue, it would only speed 
up the boot. 

I also had a look at the graphics backend and found that a significant amount 
of time is spend on framebuffer updates. Here it might be possible to do some 
optimizations. However, tests showed that this is a not the major problem. The 
calculation done between two frames takes too long, in comparison the update 
of the frame itself is only a minor part.

Recently there was a issue and a related commit added on github by Christian 
Prochaska. https://github.com/genodelabs/genode/issues/1284 I pulled this 
commit along with a chain of preceding changes. This significantly improved 
performance to a somewhat usable level but it is still way too slow. So far I 
did not test if this specific commit or some of the preceding commits are 
responsible for the increase in performance.

All best
Christian
-------------- next part --------------
#
# \brief Start Android in VMBox directly using the HW framebuffer
# \author Christian Menard
# \date   2014-07-08
#

#
# Build
#

# base components
set build_components { core init drivers/timer }

# basic driver components
append build_components {
	drivers/acpi
	drivers/pci
	drivers/framebuffer
	drivers/usb
}

# android components 
append build_components { 
	drivers/rtc
	virtualbox
	server/liquid_framebuffer  
}

build $build_components
create_boot_directory

#
# Generate config
#

# Basic configuration

set config {
<config prio_levels="4">
	<parent-provides>
		<service name="ROM"/>
		<service name="RAM"/>
		<service name="CAP"/>
		<service name="IRQ"/>
		<service name="IO_MEM"/>
		<service name="IO_PORT"/>
		<service name="PD"/>
		<service name="RM"/>
		<service name="CPU"/>
		<service name="LOG"/>
		<service name="SIGNAL"/>
	</parent-provides>
	<default-route>
		<any-service> <parent/> <any-child/> </any-service>
	</default-route>
	<start name="timer" priority="0"> 
		<resource name="RAM" quantum="1M"/>
		<provides> <service name="Timer"/> </provides>
	</start>
}

# Basic driver configuration

append config {
	<start name="acpi" priority="-1">
		<resource name="RAM" quantum="32M"/>
		<binary name="acpi_drv"/>
		<provides>
			<service name="PCI"/>
			<service name="IRQ" />
		</provides>
		<route>
			<service name="PCI"> <any-child /> </service>
			<any-service> <parent/> <any-child /> </any-service>
		</route>
	</start>
	<start name="fb_drv" priority="-1">
		<resource name="RAM" quantum="4M"/>
		<provides><service name="Framebuffer"/></provides>
 		<config width="1280"
				height="800"
				depth="16"
				buffered="no"
				offset="yes"/>
	</start>
	<start name="usb_drv" priority="-1">
		<resource name="RAM" quantum="12M"/>
		<provides><service name="Input"/></provides>
		<config ehci="yes" uhci="yes" xhci="yes"> <hid/> </config>
	</start>
}

# Android configuration

append config {
	<start name="rtc_drv" priority="-1">
		<resource name="RAM" quantum="1M"/>
		<provides>
			<service name="Rtc"/>
		</provides>
	</start>
	<start name="virtualbox" priority="-2">
		<resource name="RAM" quantum="1G"/>
		<config>
			<image type="iso" file="android.iso" />
			<libc stdout="/dev/log" stderr="/dev/log">
				<vfs>
					<dir name="dev"> <log/> </dir>
					<rom name="android.iso" />
				</vfs>
			</libc>
		</config>
		<route>
			<service name="Framebuffer"><child name="fb_dv" /></service>
			<service name="Input"><child name="usb_drv" /></service>
			<any-service> <parent/> <any-child /> </any-service>
		</route>
	</start>
}

append config {
</config>
}

install_config $config

#
# Create launchpad configuration
#
set launchpad_config_fd [open "bin/launchpad.config" w]
puts $launchpad_config_fd {<config>
	<launcher name="testnit"   ram_quota="768K" />
	<launcher name="scout"     ram_quota="41M" />
	<launcher name="launchpad" ram_quota="6M">
		<configfile name="launchpad.config" />
	</launcher>
	<launcher name="nitlog"    ram_quota="1M" />
	<launcher name="liquid_fb" ram_quota="7M" />
		<config resize_handle="on" />
	<launcher name="nitpicker" ram_quota="1M" />
</config>}
close $launchpad_config_fd

#
# Boot modules
#

# generic modules
set boot_modules { core init timer }

# basic driver modules
append boot_modules { 
	acpi_drv pci_drv pci_device_pd 
	fb_drv
	usb_drv
}

# android modules 
append boot_modules {
	virtualbox android.iso
	rtc_drv
	liquid_fb
	ld.lib.so libc.lib.so 
	libm.lib.so pthread.lib.so
	libc_lock_pipe.lib.so libc_terminal.lib.so
	libiconv.lib.so
}

build_boot_image $boot_modules

#
# Execute test case
#

set builddir [pwd]
set tooldir [file dirname $argv0]

exec $tooldir/create_grub2_entry_nova.perl $builddir toughpad-android
exec $tooldir/run_on_toughpad.sh $builddir toughpad-android


More information about the users mailing list