Skip to content

Instantly share code, notes, and snippets.

@ssvb
Created April 30, 2013 21:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ssvb/5492148 to your computer and use it in GitHub Desktop.
Save ssvb/5492148 to your computer and use it in GitHub Desktop.
Benchmarking linux framebuffer driver vs. libhybris on Allwinner A10 hardware (Mali400 GPU)
Tests done with:
https://github.com/ssvb/libhybris/commit/23bd20eb6c75fc5c6124f1f2c2532356fd91ab3e
=== mali framebuffer driver: ===
CPU load = ~0%
strace -f ./test_glesv2_mali_fb
[...]
[pid 3168] ioctl(6, FBIOPAN_DISPLAY or FBIPUT_COLOR, 0x3fefa4) = 0
[pid 3167] <... ioctl resumed> , 0) = 0
[pid 3168] ioctl(5, 0xc0048204 <unfinished ...>
[pid 3167] ioctl(5, 0xc0048500, 0xbe9aef48) = 0
[pid 3168] <... ioctl resumed> , 0xb6abae08) = 0
[pid 3167] ioctl(3, FBIO_WAITFORVSYNC <unfinished ...>
[pid 3168] ioctl(5, 0xc0048400, 0xb6abac60) = 0
[pid 3168] ioctl(5, 0xc0048204, 0xb6abae08) = 0
[pid 3168] ioctl(6, FBIOPAN_DISPLAY or FBIPUT_COLOR, 0x3fefa4) = 0
[pid 3167] <... ioctl resumed> , 0) = 0
[pid 3168] ioctl(5, 0xc0048204 <unfinished ...>
[pid 3167] ioctl(5, 0xc0048500, 0xbe9aef48) = 0
[pid 3168] <... ioctl resumed> , 0xb6abae08) = 0
[pid 3167] ioctl(3, FBIO_WAITFORVSYNC <unfinished ...>
[pid 3168] ioctl(5, 0xc0048400, 0xb6abac60) = 0
[pid 3168] ioctl(5, 0xc0048204, 0xb6abae08) = 0
[pid 3168] ioctl(6, FBIOPAN_DISPLAY or FBIPUT_COLOR, 0x3fefa4) = 0
[pid 3167] <... ioctl resumed> , 0) = 0
[pid 3168] ioctl(5, 0xc0048204 <unfinished ...>
[pid 3167] ioctl(5, 0xc0048500, 0xbe9aef48) = 0
[pid 3168] <... ioctl resumed> , 0xb6abae08) = 0
[pid 3167] ioctl(3, FBIO_WAITFORVSYNC <unfinished ...>
[pid 3168] ioctl(5, 0xc0048400, 0xb6abac60) = 0
[pid 3168] ioctl(5, 0xc0048204, 0xb6abae08) = 0
[pid 3168] ioctl(6, FBIOPAN_DISPLAY or FBIPUT_COLOR, 0x3fefa4) = 0
=== libhybris wrapped android driver: ===
CPU load = ~75%
strace -f ./test_glesv2
[...]
[pid 3188] ioctl(6, FBIOPAN_DISPLAY or FBIPUT_COLOR <unfinished ...>
[pid 3173] futex(0xdda698, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 3188] <... ioctl resumed> , 0xb495e0dc) = 0
[pid 3173] <... futex resumed> ) = 0
[pid 3188] ioctl(6, 0x400446ce <unfinished ...>
[pid 3173] sched_yield( <unfinished ...>
[pid 3188] <... ioctl resumed> , 0xb599dd90) = 0
[pid 3188] ioctl(6, FBIO_WAITFORVSYNC <unfinished ...>
[pid 3173] <... sched_yield resumed> ) = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3188] <... ioctl resumed> , 0xb599dd94) = 0
[pid 3188] ioctl(6, 0x400446ce, 0xb599dd90) = 0
[pid 3188] ioctl(4, 0xc0048400, 0xb599dc30) = 0
[pid 3188] futex(0xdbe084, FUTEX_WAIT_PRIVATE, 457, NULL <unfinished ...>
[pid 3173] sched_yield() = 0
[pid 3173] getpid() = 3173
[pid 3173] ioctl(4, 0xc0048500 <unfinished ...>
[pid 3189] <... ioctl resumed> , 0xb519ddd8) = 0
[pid 3189] futex(0xdd6d88, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...>
[pid 3173] <... ioctl resumed> , 0xbed7ee00) = 0
[pid 3173] futex(0xdd6d88, FUTEX_WAKE_PRIVATE, 1) = 1
[pid 3189] <... futex resumed> ) = 0
[pid 3173] futex(0xddac7c, FUTEX_WAIT_PRIVATE, 167, NULL <unfinished ...>
[pid 3189] futex(0xdd6d88, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 3189] ioctl(4, 0xc0048204, 0xb519ddd8) = 0
[pid 3189] futex(0xdbe084, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0xdbe080, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
[pid 3188] <... futex resumed> ) = 0
[pid 3189] futex(0xddac7c, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0xddac78, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1} <unfinished ...>
[pid 3188] futex(0xdbaff0, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 3189] <... futex resumed> ) = 1
[pid 3188] <... futex resumed> ) = 0
[pid 3189] ioctl(4, 0xc0048204 <unfinished ...>
[pid 3188] ioctl(6, FBIOPAN_DISPLAY or FBIPUT_COLOR, 0xb495e0dc) = 0
[pid 3188] ioctl(6, 0x400446ce, 0xb599dd90) = 0
[pid 3188] ioctl(6, FBIO_WAITFORVSYNC <unfinished ...>
[pid 3173] <... futex resumed> ) = 0
[pid 3173] futex(0xddac58, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield() = 0
[pid 3173] sched_yield( <unfinished ...>
[pid 3188] <... ioctl resumed> , 0xb599dd94) = 0
[pid 3188] ioctl(6, 0x400446ce, 0xb599dd90) = 0
[pid 3188] ioctl(4, 0xc0048400, 0xb599dc30) = 0
[pid 3188] futex(0xdbe084, FUTEX_WAIT_PRIVATE, 459, NULL <unfinished ...>
[pid 3173] <... sched_yield resumed> ) = 0
[pid 3173] getpid() = 3173
[pid 3173] ioctl(4, 0xc0048500, 0xbed7ee00) = 0
[pid 3189] <... ioctl resumed> , 0xb519ddd8) = 0
[pid 3173] futex(0xdda6bc, FUTEX_WAIT_PRIVATE, 143, NULL <unfinished ...>
[pid 3189] ioctl(4, 0xc0048204, 0xb519ddd8) = 0
[pid 3189] futex(0xdbe084, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0xdbe080, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
[pid 3188] <... futex resumed> ) = 0
[pid 3189] futex(0xdda6bc, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0xdda6b8, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1} <unfinished ...>
[pid 3188] futex(0xdbaff0, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 3189] <... futex resumed> ) = 1
[pid 3188] <... futex resumed> ) = 0
[pid 3173] <... futex resumed> ) = 0
[pid 3189] ioctl(4, 0xc0048204 <unfinished ...>
[pid 3188] ioctl(6, FBIOPAN_DISPLAY or FBIPUT_COLOR <unfinished ...>
Profiling results:
66.67% test_glesv2 [kernel.kallsyms] [k] __schedule
11.44% test_glesv2 [kernel.kallsyms] [k] vector_swi
6.80% test_glesv2 libc.so [.] sched_yield
3.01% test_glesv2 [kernel.kallsyms] [k] sub_preempt_count
1.77% test_glesv2 libMali.so [.] 0x0004b180
1.58% test_glesv2 libMali.so [.] _mali_osu_atomic_init
1.34% test_glesv2 [kernel.kallsyms] [k] ret_fast_syscall
0.99% test_glesv2 [kernel.kallsyms] [k] sys_sched_yield
0.55% test_glesv2 libc-2.15.so [.] strcmp
0.34% test_glesv2 libhybris-common.so.1.0.0 [.] _elf_lookup
0.25% test_glesv2 libpthread-2.15.so [.] pthread_mutex_lock
0.24% test_glesv2 libpthread-2.15.so [.] __pthread_mutex_unlock_usercnt
0.21% test_glesv2 libhybris-common.so.1.0.0 [.] get_hooked_symbol
0.18% test_glesv2 libhybris-common.so.1.0.0 [.] reloc_library
0.14% test_glesv2 libc-2.15.so [.] memset
0.13% test_glesv2 [kernel.kallsyms] [k] finish_task_switch.constprop.75
0.10% test_glesv2 libc-2.15.so [.] _int_free
0.10% test_glesv2 [mali] [k] $a
0.09% test_glesv2 [kernel.kallsyms] [k] up
0.09% test_glesv2 libhybris-common.so.1.0.0 [.] __udivsi3
0.08% test_glesv2 [kernel.kallsyms] [k] do_futex
0.08% test_glesv2 libhybris-common.so.1.0.0 [.] ftell@plt
0.07% test_glesv2 [kernel.kallsyms] [k] __do_softirq
0.07% test_glesv2 [kernel.kallsyms] [k] down
0.07% test_glesv2 libpthread-2.15.so [.] pthread_cond_broadcast@@GLIBC_2.4
0.07% test_glesv2 libc-2.15.so [.] _int_malloc
0.06% test_glesv2 [kernel.kallsyms] [k] try_to_wake_up
0.05% test_glesv2 libui.so [.] 0x00005b70
0.05% test_glesv2 [kernel.kallsyms] [k] finish_wait
0.05% test_glesv2 libhybris-common.so.1.0.0 [.] _IO_getc@plt
0.05% test_glesv2 libpthread-2.15.so [.] pthread_cond_wait@@GLIBC_2.4
0.05% test_glesv2 [kernel.kallsyms] [k] do_vfs_ioctl
0.05% test_glesv2 libc-2.15.so [.] strstr
0.05% test_glesv2 [kernel.kallsyms] [k] do_page_fault
0.05% test_glesv2 [kernel.kallsyms] [k] __memzero
0.05% test_glesv2 gralloc.sun4i.so [.] 0x00000c64
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment