Pavel and all,
I've been profiling the different pidns patchsets to chase the perf
bottlenecks in the pidns patchset. As i was not getting accurate
profiling results with unixbench, I changed the benchmark to use the
nptl perf benchmark ingo used when he introduced the generic pidhash
back in 2002.
http://lwn.net/Articles/10368/
Compared to unixbench, this is a micro benchmark measuring thread
creation and destruction which I think is quite relevant of our
different patchsets. unixbench is fine but profiling is not really
accurate. too much noise. Any other suggestions ?
On a 2 * Intel(R) Xeon(TM) CPU 2.80GHz with 4 GB of RAM, I ran 8
simultaneous, like ingo did :
./perf -s 1000000 -t 1 -r 0 -T --sync-join
I did that a few times and also changed the load of the machine
to see if values were not too dispersed.
kernels used were :
* 2.6.22-rc1-mm1
* http://lxc.sourceforge.net/patches/2.6.22/2.6.22-rc1-mm1-openvz-pidns1/
* http://lxc.sourceforge.net/patches/2.6.22/2.6.22-rc1-mm1-pidns1/
findings are :
* definitely better results for suka's patchset. suka's patchset is
also getting better results with unixbench on a 2.6.22-rc1-mm1 but
the values are really dispersed. can you confirm ?
* suka's patchset would benefit from some optimization in init_upid()
and dup_struct_pid()
* it seems that openvz's pachset has some issue with the struct pid
cache. not sure what is the reason. may be you can help pavel.
Cheers,
C.
* results for 2.6.22-rc1-mm1
Runtime: 91.635644842 seconds
Runtime: 91.639834248 seconds
Runtime: 93.615069259 seconds
Runtime: 93.664678865 seconds
Runtime: 95.724542035 seconds
Runtime: 95.763572945 seconds
Runtime: 96.444022314 seconds
Runtime: 97.028016189 seconds
* results for 2.6.22-rc1-mm1-pidns
Runtime: 92.054172217 seconds
Runtime: 93.606016039 seconds
Runtime: 93.624093799 seconds
Runtime: 94.992255782 seconds
Runtime: 95.914365693 seconds
Runtime: 98.080396784 seconds
Runtime: 98.674988254 seconds
Runtime: 98.832674972 seconds
* results for 2.6.22-rc1-mm1-openvz-pidns
Runtime: 92.359771573 seconds
Runtime: 96.517435638 seconds
Runtime: 98.328696048 seconds
Runtime: 100.263042244 seconds
Runtime: 101.003111486 seconds
Runtime: 101.371180205 seconds
Runtime: 102.536653818 seconds
Runtime: 102.671519536 seconds
* diffprofile 2.6.22-rc1-mm1 and 2.6.22-rc1-mm1-pidns
2708 11.8% check_poison_obj
2461 0.0% init_upid
2445 2.9% total
2283 183.7% kmem_cache_free
383 16.9% kmem_cache_alloc
365 13.6% __memset
280 0.0% dup_struct_pid
279 22.9% __show_regs
278 21.1% cache_alloc_debugcheck_after
261 11.3% get_page_from_freelist
223 0.0% kref_put
203 3.4% copy_process
197 34.4% do_futex
176 5.6% do_exit
86 22.8% cache_alloc_refill
82 28.2% do_fork
69 18.3% sched_balance_self
68 136.0% __free_pages_ok
59 90.8% bad_range
52 4.3% __down_read
51 13.7% account_user_time
50 7.5% copy_thread
43 28.7% put_files_struct
37 264.3% __free_pages
31 18.9% poison_obj
28 82.4% gs_change
26 16.0% plist_check_prev_next
25 192.3% __put_task_struct
23 26.7% __get_free_pages
23 14.6% __put_user_4
23 230.0% alloc_uid
22 9.0% exit_mm
21 12.9% _raw_spin_unlock
21 7.8% mm_release
21 8.6% plist_check_list
20 20.0% drop_futex_key_refs
20 12.0% __up_read
19 48.7% unqueue_me
19 16.4% do_arch_prctl
18 1800.0% dummy_task_free_security
18 58.1% wake_futex
17 47.2% obj_offset
16 16.7% dbg_userword
15 0.0% kref_get
15 150.0% check_irq_off
15 300.0% __rcu_process_callbacks
14 466.7% __switch_to
14 32.6% prepare_to_copy
14 8.2% get_futex_key
14 16.1% __wake_up
13 65.0% rt_mutex_debug_task_free
12 7.1% obj_size
11 19.3% add_wait_queue
11 275.0% put_pid
11 550.0% profile_task_exit
10 9.0% task_nice
9 100.0% __delay
8 57.1% call_rcu
8 7.8% find_extend_vma
8 266.7% ktime_get
8 23.5% sys_clone
8 25.0% delayed_put_task_struct
7 26.9% task_rq_lock
7 18.9% _spin_lock_irqsave
6 0.0% quicklist_trim
6 100.0% __up_write
-6 -50.0% module_unload_free
-6 -100.0% nr_running
-7 -43.8% _raw_spin_trylock
-7 -2.8% __alloc_pages
-8 -33.3% sysret_check
-8 -28.6% sysret_careful
-8 -50.0% sysret_signal
-8 -1.9% copy_namespaces
-9 -16.7% memmove
-9 -11.5% __phys_addr
-9 -4.5% copy_semundo
-10 -28.6% rwlock_bug
-10 -27.8% wake_up_new_task
-10 -10.4% sched_clock
-10 -6.2% copy_user_generic_unrolled
-11 -100.0% d_validate
-11 -23.9% monotonic_to_bootbased
-11 -10.6% dummy_task_create
-11 -3.7% futex_wake
-12 -3.9% __might_sleep
-13 -100.0% vscnprintf
-14 -13.0% plist_del
-16 -84.2% sighand_ctor
-17 -20.7% debug_rt_mutex_free_waiter
-17 -42.5% release_thread
-18 -29.5% init_waitqueue_head
-19 -100.0% scnprintf
-21 -12.7% copy_files
-22 -47.8% blocking_notifier_call_chain
-23 -11.8% hash_futex
-24 -18.8% call_rcu_bh
-25 -19.8% mmput
-27 -16.5% down_read
-27 -39.7% audit_alloc
-27 -19.9% stub_clone
-28 -16.3% set_normalized_timespec
-32 -74.4% kfree_debugcheck
-35 -30.2% sys_exit
-40 -63.5% down_read_trylock
-43 -8.6% zone_watermark_ok
-49 -7.7% schedule
-53 -5.4% system_call
-54 -47.0% __blocking_notifier_call_chain
-64 -24.8% getnstimeofday
-66 -7.0% _raw_spin_lock
-75 -22.9% ktime_get_ts
-86 -100.0% snprintf
-86 -12.8% kernel_thread
-88 -38.1% plist_add
-93 -5.4% __memcpy
-100 -59.9% kmem_flagcheck
-103 -18.5% acct_collect
-113 -38.3% dbg_redzone1
-138 -3.9% schedule_tail
-162 -12.2% _spin_unlock
-243 -7.3% thread_return
-268 -83.5% proc_flush_task
-289 -100.0% d_lookup
-357 -100.0% d_hash_and_lookup
-368 -6.1% release_task
-642 -99.8% vsnprintf
-816 -100.0% __d_lookup
-1529 -100.0% number
-2431 -100.0% alloc_pid
* diffprofile 2.6.22-rc1-mm1 and 2.6.22-rc1-mm1-openvz-pidns
10046 11.8% total
6896 554.8% kmem_cache_free
1580 6.9% check_poison_obj
1222 0.0% alloc_pidmap
883 39.0% kmem_cache_alloc
485 128.6% cache_alloc_refill
263 8.4% do_exit
223 40.0% acct_collect
208 32.3% vsnprintf
196 14.9% cache_alloc_debugcheck_after
162 4.5% schedule_tail
147 25.7% do_futex
138 276.0% __free_pages_ok
107 8.8% __down_read
107 43.7% plist_check_list
105 6.9% number
101 61.6% poison_obj
99 54.4% exit_sem
73 45.6% copy_user_generic_unrolled
72 42.1% get_futex_key
67 24.8% mm_release
60 6.1% system_call
59 35.3% __up_read
55 22.4% exit_mm
54 83.1% bad_range
54 18.3% dbg_redzone1
52 371.4% __free_pages
49 376.9% __put_task_struct
49 15.3% proc_flush_task
48 13.4% d_hash_and_lookup
48 14.0% sys_futex
47 18.6% plist_check_head
45 19.7% find_vma
44 5.4% __d_lookup
43 50.0% __get_free_pages
41 205.0% rt_mutex_debug_task_free
38 7.1% futex_wait
37 3.9% _raw_spin_lock
36 1800.0% pgd_dtor
35 13.6% getnstimeofday
35 109.4% delayed_put_task_struct
34 33.0% find_extend_vma
33 42.3% __phys_addr
32 19.6% plist_check_prev_next
32 320.0% alloc_uid
31 4.9% schedule
30 19.1% __put_user_4
29 580.0% __rcu_process_callbacks
29 39.2% ptregscall_common
28 82.4% gs_change
27 31.4% snprintf
27 75.0% obj_offset
26 173.3% __inc_zone_state
23 191.7% module_unload_free
21 0.6% thread_return
17 10.4% _raw_spin_unlock
16 59.3% rff_action
15 10.0% put_files_struct
15 375.0% debug_rt_mutex_init
15 150.0% check_irq_off
14 350.0% put_pid
14 16.1% __wake_up
13 650.0% profile_task_exit
12 33.3% wake_up_new_task
10 7.4% stub_clone
8 800.0% dummy_task_free_security
8 266.7% tasklet_action
8 6.9% do_arch_prctl
7 41.2% dump_line
7 6.5% plist_del
7 4.2% kmem_flagcheck
7 36.8% up_write
6 3.6% obj_size
6 120.0% bad_page
-6 -27.3% exit_thread
-6 -66.7% __delay
-6 -85.7% futex_requeue
-6 -54.5% sys_vfork
-6 -11.8% __spin_lock_init
-7 -46.7% acct_process
-7 -11.5% init_waitqueue_head
-8 -20.5% unqueue_me
-8 -28.6% sysret_careful
-8 -4.8% copy_files
-8 -50.0% sysret_signal
-11 -31.4% rwlock_bug
-11 -64.7% futexfs_get_sb
-13 -21.0% debug_rt_mutex_init_waiter
-13 -10.2% call_rcu_bh
-13 -1.9% kernel_thread
-13 -13.5% sched_clock
-14 -4.8% d_lookup
-14 -73.7% sighand_ctor
-15 -30.0% ret_from_sys_call
-16 -34.8% blocking_notifier_call_chain
-17 -8.7% hash_futex
-18 -41.9% prepare_to_copy
-18 -17.3% dummy_task_create
-22 -5.1% copy_namespaces
-23 -6.2% account_user_time
-24 -29.3% debug_rt_mutex_free_waiter
-25 -27.5% dbg_redzone2
-25 -21.6% sys_exit
-27 -67.5% sched_fork
-28 -44.4% down_read_trylock
-29 -30.2% dbg_userword
-33 -29.7% task_nice
-34 -79.1% kfree_debugcheck
-35 -64.8% memmove
-43 -26.2% down_read
-43 -18.6% plist_add
-46 -1.7% __memset
-46 -26.7% set_normalized_timespec
-48 -3.6% _spin_unlock
-57 -11.4% zone_watermark_ok
-61 -18.6% ktime_get_ts
-80 -4.7% __memcpy
-86 -3.7% get_page_from_freelist
-87 -23.1% sched_balance_self
-152 -22.7% copy_thread
-383 -6.3% copy_process
-920 -15.2% release_task
-1032 -42.5% alloc_pid
-1045 -85.7% __show_regs
_______________________________________________
Containers mailing list
Containers@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers