* [devel] Q: exit_group slowness @ 2012-06-04 21:11 Dmitry V. Levin 2012-06-04 22:30 ` Kirill A. Shutemov ` (2 more replies) 0 siblings, 3 replies; 20+ messages in thread From: Dmitry V. Levin @ 2012-06-04 21:11 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 674 bytes --] Hi, Наблюдаю странный эффект: $ time /usr/libexec/hasher-priv/hasher-priv chrootuid2 /tmp/.private/bee1/hasher/chroot /bin/true 0.00user 0.00system 0:08.61elapsed 0%CPU (0avgtext+0avgdata 3152maxresident)k 0inputs+0outputs (0major+321minor)pagefaults 0swaps $ uname -rm 3.3.7-std-def-alt1 x86_64 Воспроизводимость 100%, разброс примерно от 2 до 16 секунд. С момента запуска команды до момента завершения всех системных вызовов exit_group(0) проходит 0 секунд, остальные несколько секунд уходят на то, чтобы проинформировать parent (bash, strace) о завершении child'а (hasher-priv). Кто-нибудь когда-нибудь сталкивался с чем-нибудь подобным? -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] Q: exit_group slowness 2012-06-04 21:11 [devel] Q: exit_group slowness Dmitry V. Levin @ 2012-06-04 22:30 ` Kirill A. Shutemov 2012-06-05 0:20 ` Dmitry V. Levin 2012-06-04 22:35 ` [devel] " Led 2012-06-06 8:43 ` Michael Shigorin 2 siblings, 1 reply; 20+ messages in thread From: Kirill A. Shutemov @ 2012-06-04 22:30 UTC (permalink / raw) To: ALT Devel discussion list On Tue, Jun 05, 2012 at 01:11:17AM +0400, Dmitry V. Levin wrote: > Hi, > > Наблюдаю странный эффект: > $ time /usr/libexec/hasher-priv/hasher-priv chrootuid2 /tmp/.private/bee1/hasher/chroot /bin/true > 0.00user 0.00system 0:08.61elapsed 0%CPU (0avgtext+0avgdata 3152maxresident)k > 0inputs+0outputs (0major+321minor)pagefaults 0swaps > $ uname -rm > 3.3.7-std-def-alt1 x86_64 > > Воспроизводимость 100%, разброс примерно от 2 до 16 секунд. С момента > запуска команды до момента завершения всех системных вызовов exit_group(0) > проходит 0 секунд, остальные несколько секунд уходят на то, чтобы > проинформировать parent (bash, strace) о завершении child'а (hasher-priv). > > Кто-нибудь когда-нибудь сталкивался с чем-нибудь подобным? Хм. Интересно. Хорошо б увидеть на чём залипают процессы с обоих строн. После 'echo t > /proc/sysrq-trigger' чё-нить интересное относительно этих процессов в dmesg есть? -- Kirill A. Shutemov ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] Q: exit_group slowness 2012-06-04 22:30 ` Kirill A. Shutemov @ 2012-06-05 0:20 ` Dmitry V. Levin 2012-06-05 6:06 ` Kirill A. Shutemov 0 siblings, 1 reply; 20+ messages in thread From: Dmitry V. Levin @ 2012-06-05 0:20 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 2986 bytes --] On Tue, Jun 05, 2012 at 01:30:47AM +0300, Kirill A. Shutemov wrote: [...] > Хорошо б увидеть на чём залипают процессы с обоих строн. > > После 'echo t > /proc/sysrq-trigger' чё-нить интересное относительно этих > процессов в dmesg есть? Да, есть: [294898.737372] hasher-priv D ffffffff8160c120 0 23921 23920 0x00000000 [294898.737372] ffff8807e6291bf8 0000000000000046 0000000000000086 ffff8807f5142040 [294898.737372] 0000000000013100 ffff8807e6291fd8 0000000000013100 ffff8807e6290000 [294898.737372] 0000000000013100 0000000000013100 ffff8807e6291fd8 0000000000013100 [294898.737372] Call Trace: [294898.737372] [<ffffffff81443a2a>] schedule+0x3a/0x50 [294898.737372] [<ffffffff81441e7d>] schedule_timeout+0x1cd/0x2c0 [294898.737372] [<ffffffff811f8f87>] ? mqueue_destroy_inode+0x17/0x20 [294898.737372] [<ffffffff81443044>] wait_for_common+0xc4/0x160 [294898.737372] [<ffffffff8107af50>] ? try_to_wake_up+0x2a0/0x2a0 [294898.737372] [<ffffffff810d63b0>] ? call_rcu_sched+0x10/0x20 [294898.737372] [<ffffffff810d63a0>] ? call_rcu_bh+0x20/0x20 [294898.737372] [<ffffffff81443188>] wait_for_completion+0x18/0x20 [294898.737372] [<ffffffff810d5a9b>] _rcu_barrier.clone.31+0x9b/0xb0 [294898.737372] [<ffffffff810d5ac0>] rcu_barrier_sched+0x10/0x20 [294898.737372] [<ffffffff810d5ad9>] rcu_barrier+0x9/0x10 [294898.737372] [<ffffffff811602c9>] deactivate_locked_super+0x49/0x90 [294898.737372] [<ffffffff81160d35>] deactivate_super+0x45/0x60 [294898.737372] [<ffffffff8117ad74>] mntput_no_expire+0x104/0x150 [294898.737372] [<ffffffff8117addc>] mntput+0x1c/0x30 [294898.737372] [<ffffffff8117cda7>] kern_unmount+0x27/0x30 [294898.737372] [<ffffffff811faeb0>] mq_put_mnt+0x10/0x20 [294898.737372] [<ffffffff811fb57f>] put_ipc_ns+0x3f/0xb0 [294898.737372] [<ffffffff81071f5c>] free_nsproxy+0x3c/0xa0 [294898.737372] [<ffffffff81072143>] switch_task_namespaces+0x33/0x40 [294898.737372] [<ffffffff8107215b>] exit_task_namespaces+0xb/0x10 [294898.737372] [<ffffffff8104f154>] do_exit+0x4b4/0x8a0 [294898.737372] [<ffffffff8104f7e3>] do_group_exit+0x53/0xc0 [294898.737372] [<ffffffff8104f862>] sys_exit_group+0x12/0x20 [294898.737372] [<ffffffff8144c939>] system_call_fastpath+0x16/0x1b Другими словами, что-то не так в ядре с CLONE_NEWIPC, и это воспроизводится на существенно более простых примерах, чем hasher-priv: # time unshare -i /bin/true 0.00user 0.00system 0:10.55elapsed 0%CPU (0avgtext+0avgdata 1232maxresident)k 0inputs+0outputs (0major+169minor)pagefaults 0swaps $ echo -e '#include <sched.h>\nint main(void){return unshare(CLONE_NEWIPC)<0;}' | gcc -xc -O2 -Wall - -o unshare-i # time ./unshare-i 0.00user 0.00system 0:05.55elapsed 0%CPU (0avgtext+0avgdata 1424maxresident)k 0inputs+0outputs (0major+120minor)pagefaults 0swaps On Tue, Jun 05, 2012 at 01:35:36AM +0300, Led wrote: > А > grep cgroup /proc/mounts > при этом пустой? # grep -c cgroup /proc/mounts 0 -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] Q: exit_group slowness 2012-06-05 0:20 ` Dmitry V. Levin @ 2012-06-05 6:06 ` Kirill A. Shutemov 2012-06-05 9:08 ` [devel] [partially solved] " Dmitry V. Levin 0 siblings, 1 reply; 20+ messages in thread From: Kirill A. Shutemov @ 2012-06-05 6:06 UTC (permalink / raw) To: ALT Devel discussion list On Tue, Jun 05, 2012 at 04:20:47AM +0400, Dmitry V. Levin wrote: > On Tue, Jun 05, 2012 at 01:30:47AM +0300, Kirill A. Shutemov wrote: > [...] > > Хорошо б увидеть на чём залипают процессы с обоих строн. > > > > После 'echo t > /proc/sysrq-trigger' чё-нить интересное относительно этих > > процессов в dmesg есть? > > Да, есть: > [294898.737372] hasher-priv D ffffffff8160c120 0 23921 23920 0x00000000 > [294898.737372] ffff8807e6291bf8 0000000000000046 0000000000000086 ffff8807f5142040 > [294898.737372] 0000000000013100 ffff8807e6291fd8 0000000000013100 ffff8807e6290000 > [294898.737372] 0000000000013100 0000000000013100 ffff8807e6291fd8 0000000000013100 > [294898.737372] Call Trace: > [294898.737372] [<ffffffff81443a2a>] schedule+0x3a/0x50 > [294898.737372] [<ffffffff81441e7d>] schedule_timeout+0x1cd/0x2c0 > [294898.737372] [<ffffffff811f8f87>] ? mqueue_destroy_inode+0x17/0x20 > [294898.737372] [<ffffffff81443044>] wait_for_common+0xc4/0x160 > [294898.737372] [<ffffffff8107af50>] ? try_to_wake_up+0x2a0/0x2a0 > [294898.737372] [<ffffffff810d63b0>] ? call_rcu_sched+0x10/0x20 > [294898.737372] [<ffffffff810d63a0>] ? call_rcu_bh+0x20/0x20 > [294898.737372] [<ffffffff81443188>] wait_for_completion+0x18/0x20 > [294898.737372] [<ffffffff810d5a9b>] _rcu_barrier.clone.31+0x9b/0xb0 > [294898.737372] [<ffffffff810d5ac0>] rcu_barrier_sched+0x10/0x20 > [294898.737372] [<ffffffff810d5ad9>] rcu_barrier+0x9/0x10 > [294898.737372] [<ffffffff811602c9>] deactivate_locked_super+0x49/0x90 > [294898.737372] [<ffffffff81160d35>] deactivate_super+0x45/0x60 > [294898.737372] [<ffffffff8117ad74>] mntput_no_expire+0x104/0x150 > [294898.737372] [<ffffffff8117addc>] mntput+0x1c/0x30 > [294898.737372] [<ffffffff8117cda7>] kern_unmount+0x27/0x30 > [294898.737372] [<ffffffff811faeb0>] mq_put_mnt+0x10/0x20 > [294898.737372] [<ffffffff811fb57f>] put_ipc_ns+0x3f/0xb0 > [294898.737372] [<ffffffff81071f5c>] free_nsproxy+0x3c/0xa0 > [294898.737372] [<ffffffff81072143>] switch_task_namespaces+0x33/0x40 > [294898.737372] [<ffffffff8107215b>] exit_task_namespaces+0xb/0x10 > [294898.737372] [<ffffffff8104f154>] do_exit+0x4b4/0x8a0 > [294898.737372] [<ffffffff8104f7e3>] do_group_exit+0x53/0xc0 > [294898.737372] [<ffffffff8104f862>] sys_exit_group+0x12/0x20 > [294898.737372] [<ffffffff8144c939>] system_call_fastpath+0x16/0x1b Похоже вот на это: http://lkml.org/lkml/2012/6/3/34 Ниже по трэду Пол предлагает возможное решение. -- Kirill A. Shutemov ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [partially solved] Q: exit_group slowness 2012-06-05 6:06 ` Kirill A. Shutemov @ 2012-06-05 9:08 ` Dmitry V. Levin 2012-06-05 12:37 ` Kirill A. Shutemov 0 siblings, 1 reply; 20+ messages in thread From: Dmitry V. Levin @ 2012-06-05 9:08 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 973 bytes --] On Tue, Jun 05, 2012 at 09:06:22AM +0300, Kirill A. Shutemov wrote: > Похоже вот на это: > > http://lkml.org/lkml/2012/6/3/34 > > Ниже по трэду Пол предлагает возможное решение. Спасибо, откат на 3.2.14-std-def-alt1 радикально улучшил картинку: # env -i strace -r -eprocess /usr/bin/unshare -i /bin/true 0.000000 execve("/usr/bin/unshare", ["/usr/bin/unshare", "-i", "/bin/true"], [/* 0 vars */]) = 0 0.001357 arch_prctl(ARCH_SET_FS, 0x7f49add73700) = 0 0.000457 unshare(CLONE_NEWIPC) = 0 0.000200 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 0.000350 exit_group(0) = ? 0.156461 +++ exited with 0 +++ Хотя до идеала еще далеко: # env -i strace -r /bin/true 0.000000 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 0.000628 exit_group(0) = ? 0.000329 +++ exited with 0 +++ Так что просьба в очередном std-def отключить CONFIG_RCU_FAST_NO_HZ. -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [partially solved] Q: exit_group slowness 2012-06-05 9:08 ` [devel] [partially solved] " Dmitry V. Levin @ 2012-06-05 12:37 ` Kirill A. Shutemov 2012-06-05 12:46 ` Dmitry V. Levin 0 siblings, 1 reply; 20+ messages in thread From: Kirill A. Shutemov @ 2012-06-05 12:37 UTC (permalink / raw) To: ALT Devel discussion list On Tue, Jun 05, 2012 at 01:08:28PM +0400, Dmitry V. Levin wrote: > On Tue, Jun 05, 2012 at 09:06:22AM +0300, Kirill A. Shutemov wrote: > > Похоже вот на это: > > > > http://lkml.org/lkml/2012/6/3/34 > > > > Ниже по трэду Пол предлагает возможное решение. > > Спасибо, откат на 3.2.14-std-def-alt1 радикально улучшил картинку: > # env -i strace -r -eprocess /usr/bin/unshare -i /bin/true > 0.000000 execve("/usr/bin/unshare", ["/usr/bin/unshare", "-i", "/bin/true"], [/* 0 vars */]) = 0 > 0.001357 arch_prctl(ARCH_SET_FS, 0x7f49add73700) = 0 > 0.000457 unshare(CLONE_NEWIPC) = 0 > 0.000200 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > 0.000350 exit_group(0) = ? > 0.156461 +++ exited with 0 +++ > > Хотя до идеала еще далеко: > # env -i strace -r /bin/true > 0.000000 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > 0.000628 exit_group(0) = ? > 0.000329 +++ exited with 0 +++ exit_group() дорогой только для последнего процесса в namespace, так? Думаю, это цена которую можно заплатить. -- Kirill A. Shutemov ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [partially solved] Q: exit_group slowness 2012-06-05 12:37 ` Kirill A. Shutemov @ 2012-06-05 12:46 ` Dmitry V. Levin 2012-06-05 13:10 ` Kirill A. Shutemov 0 siblings, 1 reply; 20+ messages in thread From: Dmitry V. Levin @ 2012-06-05 12:46 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 1469 bytes --] On Tue, Jun 05, 2012 at 03:37:19PM +0300, Kirill A. Shutemov wrote: > On Tue, Jun 05, 2012 at 01:08:28PM +0400, Dmitry V. Levin wrote: > > On Tue, Jun 05, 2012 at 09:06:22AM +0300, Kirill A. Shutemov wrote: > > > Похоже вот на это: > > > > > > http://lkml.org/lkml/2012/6/3/34 > > > > > > Ниже по трэду Пол предлагает возможное решение. > > > > Спасибо, откат на 3.2.14-std-def-alt1 радикально улучшил картинку: > > # env -i strace -r -eprocess /usr/bin/unshare -i /bin/true > > 0.000000 execve("/usr/bin/unshare", ["/usr/bin/unshare", "-i", "/bin/true"], [/* 0 vars */]) = 0 > > 0.001357 arch_prctl(ARCH_SET_FS, 0x7f49add73700) = 0 > > 0.000457 unshare(CLONE_NEWIPC) = 0 > > 0.000200 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > 0.000350 exit_group(0) = ? > > 0.156461 +++ exited with 0 +++ > > > > Хотя до идеала еще далеко: > > # env -i strace -r /bin/true > > 0.000000 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > 0.000628 exit_group(0) = ? > > 0.000329 +++ exited with 0 +++ > > exit_group() дорогой только для последнего процесса в namespace, так? Да, конечно. > Думаю, это цена которую можно заплатить. 0.15 секунды это очень долго, то же самое ядро на более простых серверах завершает последний процесс в namespace на 1-2 порядка быстрее. Так что вопрос, что не так и как с этим бороться, пока остается. -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [partially solved] Q: exit_group slowness 2012-06-05 12:46 ` Dmitry V. Levin @ 2012-06-05 13:10 ` Kirill A. Shutemov 2012-06-06 1:31 ` Dmitry V. Levin 0 siblings, 1 reply; 20+ messages in thread From: Kirill A. Shutemov @ 2012-06-05 13:10 UTC (permalink / raw) To: ALT Devel discussion list On Tue, Jun 05, 2012 at 04:46:03PM +0400, Dmitry V. Levin wrote: > On Tue, Jun 05, 2012 at 03:37:19PM +0300, Kirill A. Shutemov wrote: > > On Tue, Jun 05, 2012 at 01:08:28PM +0400, Dmitry V. Levin wrote: > > > On Tue, Jun 05, 2012 at 09:06:22AM +0300, Kirill A. Shutemov wrote: > > > > Похоже вот на это: > > > > > > > > http://lkml.org/lkml/2012/6/3/34 > > > > > > > > Ниже по трэду Пол предлагает возможное решение. > > > > > > Спасибо, откат на 3.2.14-std-def-alt1 радикально улучшил картинку: > > > # env -i strace -r -eprocess /usr/bin/unshare -i /bin/true > > > 0.000000 execve("/usr/bin/unshare", ["/usr/bin/unshare", "-i", "/bin/true"], [/* 0 vars */]) = 0 > > > 0.001357 arch_prctl(ARCH_SET_FS, 0x7f49add73700) = 0 > > > 0.000457 unshare(CLONE_NEWIPC) = 0 > > > 0.000200 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > 0.000350 exit_group(0) = ? > > > 0.156461 +++ exited with 0 +++ > > > > > > Хотя до идеала еще далеко: > > > # env -i strace -r /bin/true > > > 0.000000 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > 0.000628 exit_group(0) = ? > > > 0.000329 +++ exited with 0 +++ > > > > exit_group() дорогой только для последнего процесса в namespace, так? > > Да, конечно. > > > Думаю, это цена которую можно заплатить. > > 0.15 секунды это очень долго, то же самое ядро на более простых серверах > завершает последний процесс в namespace на 1-2 порядка быстрее. Так что > вопрос, что не так и как с этим бороться, пока остается. RCU_FAST_NO_HZ не предназначена для больших машин. О чём в явном виде написано в описании опции. Так что CONFIG_RCU_FAST_NO_HZ=y было ошибкой для дистрибутивного ядра. Когда моя большая машинка (40 ядер + ht) освободится я попробую поэксперементировать с этим немного. Есть подозрение, что отмонирование файловой системы (внутриядерной, в случае CLONE_NEWIPC) плохо масштабируется на большое количество процессоров даже без RCU_FAST_NO_HZ. -- Kirill A. Shutemov ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [partially solved] Q: exit_group slowness 2012-06-05 13:10 ` Kirill A. Shutemov @ 2012-06-06 1:31 ` Dmitry V. Levin 2012-06-06 18:40 ` Kirill A. Shutemov 2012-06-08 12:46 ` Kirill A. Shutemov 0 siblings, 2 replies; 20+ messages in thread From: Dmitry V. Levin @ 2012-06-06 1:31 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 2483 bytes --] On Tue, Jun 05, 2012 at 04:10:35PM +0300, Kirill A. Shutemov wrote: > On Tue, Jun 05, 2012 at 04:46:03PM +0400, Dmitry V. Levin wrote: > > On Tue, Jun 05, 2012 at 03:37:19PM +0300, Kirill A. Shutemov wrote: > > > On Tue, Jun 05, 2012 at 01:08:28PM +0400, Dmitry V. Levin wrote: > > > > On Tue, Jun 05, 2012 at 09:06:22AM +0300, Kirill A. Shutemov wrote: > > > > > Похоже вот на это: > > > > > > > > > > http://lkml.org/lkml/2012/6/3/34 > > > > > > > > > > Ниже по трэду Пол предлагает возможное решение. > > > > > > > > Спасибо, откат на 3.2.14-std-def-alt1 радикально улучшил картинку: > > > > # env -i strace -r -eprocess /usr/bin/unshare -i /bin/true > > > > 0.000000 execve("/usr/bin/unshare", ["/usr/bin/unshare", "-i", "/bin/true"], [/* 0 vars */]) = 0 > > > > 0.001357 arch_prctl(ARCH_SET_FS, 0x7f49add73700) = 0 > > > > 0.000457 unshare(CLONE_NEWIPC) = 0 > > > > 0.000200 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > > 0.000350 exit_group(0) = ? > > > > 0.156461 +++ exited with 0 +++ > > > > > > > > Хотя до идеала еще далеко: > > > > # env -i strace -r /bin/true > > > > 0.000000 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > > 0.000628 exit_group(0) = ? > > > > 0.000329 +++ exited with 0 +++ > > > > > > exit_group() дорогой только для последнего процесса в namespace, так? > > > > Да, конечно. > > > > > Думаю, это цена которую можно заплатить. > > > > 0.15 секунды это очень долго, то же самое ядро на более простых серверах > > завершает последний процесс в namespace на 1-2 порядка быстрее. Так что > > вопрос, что не так и как с этим бороться, пока остается. > > RCU_FAST_NO_HZ не предназначена для больших машин. О чём в явном виде > написано в описании опции. Так что CONFIG_RCU_FAST_NO_HZ=y было ошибкой > для дистрибутивного ядра. > > Когда моя большая машинка (40 ядер + ht) освободится я попробую > поэксперементировать с этим немного. Есть подозрение, что отмонирование > файловой системы (внутриядерной, в случае CLONE_NEWIPC) плохо > масштабируется на большое количество процессоров даже без RCU_FAST_NO_HZ. Для справки: на той же машинке (где "rpm --eval %__nprocs" показывает 32) с 3.3.8-std-def-alt1 (с отключенным CONFIG_RCU_FAST_NO_HZ) время завершения "unshare -i /bin/true" уменьшилось примерно в полтора раза по сравнению с 3.2.14-std-def-alt1 (с 0.15 до 0.10 секунды). -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [partially solved] Q: exit_group slowness 2012-06-06 1:31 ` Dmitry V. Levin @ 2012-06-06 18:40 ` Kirill A. Shutemov 2012-06-08 12:46 ` Kirill A. Shutemov 1 sibling, 0 replies; 20+ messages in thread From: Kirill A. Shutemov @ 2012-06-06 18:40 UTC (permalink / raw) To: ALT Devel discussion list On Wed, Jun 06, 2012 at 05:31:27AM +0400, Dmitry V. Levin wrote: > On Tue, Jun 05, 2012 at 04:10:35PM +0300, Kirill A. Shutemov wrote: > > On Tue, Jun 05, 2012 at 04:46:03PM +0400, Dmitry V. Levin wrote: > > > On Tue, Jun 05, 2012 at 03:37:19PM +0300, Kirill A. Shutemov wrote: > > > > On Tue, Jun 05, 2012 at 01:08:28PM +0400, Dmitry V. Levin wrote: > > > > > On Tue, Jun 05, 2012 at 09:06:22AM +0300, Kirill A. Shutemov wrote: > > > > > > Похоже вот на это: > > > > > > > > > > > > http://lkml.org/lkml/2012/6/3/34 > > > > > > > > > > > > Ниже по трэду Пол предлагает возможное решение. > > > > > > > > > > Спасибо, откат на 3.2.14-std-def-alt1 радикально улучшил картинку: > > > > > # env -i strace -r -eprocess /usr/bin/unshare -i /bin/true > > > > > 0.000000 execve("/usr/bin/unshare", ["/usr/bin/unshare", "-i", "/bin/true"], [/* 0 vars */]) = 0 > > > > > 0.001357 arch_prctl(ARCH_SET_FS, 0x7f49add73700) = 0 > > > > > 0.000457 unshare(CLONE_NEWIPC) = 0 > > > > > 0.000200 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > > > 0.000350 exit_group(0) = ? > > > > > 0.156461 +++ exited with 0 +++ > > > > > > > > > > Хотя до идеала еще далеко: > > > > > # env -i strace -r /bin/true > > > > > 0.000000 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > > > 0.000628 exit_group(0) = ? > > > > > 0.000329 +++ exited with 0 +++ > > > > > > > > exit_group() дорогой только для последнего процесса в namespace, так? > > > > > > Да, конечно. > > > > > > > Думаю, это цена которую можно заплатить. > > > > > > 0.15 секунды это очень долго, то же самое ядро на более простых серверах > > > завершает последний процесс в namespace на 1-2 порядка быстрее. Так что > > > вопрос, что не так и как с этим бороться, пока остается. > > > > RCU_FAST_NO_HZ не предназначена для больших машин. О чём в явном виде > > написано в описании опции. Так что CONFIG_RCU_FAST_NO_HZ=y было ошибкой > > для дистрибутивного ядра. > > > > Когда моя большая машинка (40 ядер + ht) освободится я попробую > > поэксперементировать с этим немного. Есть подозрение, что отмонирование > > файловой системы (внутриядерной, в случае CLONE_NEWIPC) плохо > > масштабируется на большое количество процессоров даже без RCU_FAST_NO_HZ. > > Для справки: на той же машинке (где "rpm --eval %__nprocs" показывает 32) с > 3.3.8-std-def-alt1 (с отключенным CONFIG_RCU_FAST_NO_HZ) время завершения > "unshare -i /bin/true" уменьшилось примерно в полтора раза по сравнению с > 3.2.14-std-def-alt1 (с 0.15 до 0.10 секунды). Похоже виноват rcu_barrier() в deactivate_locked_super(). В моём случае (ядро v3.4) exit_group() выполняется за 0.07538 из них 0.05188 в rcu_barrier(). Цифры могут несколько разнится от запуска к запуску, но в целом как-то так. Это должно было наблюдаться с ядра v2.6.38. См. коммит "d863b50 vfs: call rcu_barrier after ->kill_sb()". Простого решения я не вижу. Наверно, можно сделать инитиализацию namespace'а ленивой. В этом use-case'е долно помочь. Если когда-нибудь будет время может посмотрю. Или напиши ребятам из Parallels, может они что предложат. -- Kirill A. Shutemov ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [partially solved] Q: exit_group slowness 2012-06-06 1:31 ` Dmitry V. Levin 2012-06-06 18:40 ` Kirill A. Shutemov @ 2012-06-08 12:46 ` Kirill A. Shutemov 2012-06-08 15:31 ` Kirill A. Shutemov 2012-06-08 15:56 ` Dmitry V. Levin 1 sibling, 2 replies; 20+ messages in thread From: Kirill A. Shutemov @ 2012-06-08 12:46 UTC (permalink / raw) To: ALT Devel discussion list On Wed, Jun 06, 2012 at 05:31:27AM +0400, Dmitry V. Levin wrote: > On Tue, Jun 05, 2012 at 04:10:35PM +0300, Kirill A. Shutemov wrote: > > On Tue, Jun 05, 2012 at 04:46:03PM +0400, Dmitry V. Levin wrote: > > > On Tue, Jun 05, 2012 at 03:37:19PM +0300, Kirill A. Shutemov wrote: > > > > On Tue, Jun 05, 2012 at 01:08:28PM +0400, Dmitry V. Levin wrote: > > > > > On Tue, Jun 05, 2012 at 09:06:22AM +0300, Kirill A. Shutemov wrote: > > > > > > Похоже вот на это: > > > > > > > > > > > > http://lkml.org/lkml/2012/6/3/34 > > > > > > > > > > > > Ниже по трэду Пол предлагает возможное решение. > > > > > > > > > > Спасибо, откат на 3.2.14-std-def-alt1 радикально улучшил картинку: > > > > > # env -i strace -r -eprocess /usr/bin/unshare -i /bin/true > > > > > 0.000000 execve("/usr/bin/unshare", ["/usr/bin/unshare", "-i", "/bin/true"], [/* 0 vars */]) = 0 > > > > > 0.001357 arch_prctl(ARCH_SET_FS, 0x7f49add73700) = 0 > > > > > 0.000457 unshare(CLONE_NEWIPC) = 0 > > > > > 0.000200 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > > > 0.000350 exit_group(0) = ? > > > > > 0.156461 +++ exited with 0 +++ > > > > > > > > > > Хотя до идеала еще далеко: > > > > > # env -i strace -r /bin/true > > > > > 0.000000 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > > > 0.000628 exit_group(0) = ? > > > > > 0.000329 +++ exited with 0 +++ > > > > > > > > exit_group() дорогой только для последнего процесса в namespace, так? > > > > > > Да, конечно. > > > > > > > Думаю, это цена которую можно заплатить. > > > > > > 0.15 секунды это очень долго, то же самое ядро на более простых серверах > > > завершает последний процесс в namespace на 1-2 порядка быстрее. Так что > > > вопрос, что не так и как с этим бороться, пока остается. > > > > RCU_FAST_NO_HZ не предназначена для больших машин. О чём в явном виде > > написано в описании опции. Так что CONFIG_RCU_FAST_NO_HZ=y было ошибкой > > для дистрибутивного ядра. > > > > Когда моя большая машинка (40 ядер + ht) освободится я попробую > > поэксперементировать с этим немного. Есть подозрение, что отмонирование > > файловой системы (внутриядерной, в случае CLONE_NEWIPC) плохо > > масштабируется на большое количество процессоров даже без RCU_FAST_NO_HZ. > > Для справки: на той же машинке (где "rpm --eval %__nprocs" показывает 32) с > 3.3.8-std-def-alt1 (с отключенным CONFIG_RCU_FAST_NO_HZ) время завершения > "unshare -i /bin/true" уменьшилось примерно в полтора раза по сравнению с > 3.2.14-std-def-alt1 (с 0.15 до 0.10 секунды). Дима, можешь проверить поможет ли патчик, прежде чем я покажу его апстриму: >From b76600918d021ec9836659dbb991f4d9a92de795 Mon Sep 17 00:00:00 2001 From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com> Date: Fri, 8 Jun 2012 15:30:31 +0300 Subject: [PATCH] fs: push rcu_barrier() from deactivate_locked_super() to filesystems There's no reason to call rcu_barrier() on every deactivate_locked_super(). We only need to make sure that all delayed rcu free inodes are flushed before we destroy related cache. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> --- fs/9p/v9fs.c | 5 +++++ fs/adfs/super.c | 5 +++++ fs/affs/super.c | 5 +++++ fs/afs/super.c | 5 +++++ fs/befs/linuxvfs.c | 5 +++++ fs/bfs/inode.c | 5 +++++ fs/btrfs/extent_io.c | 6 ++++++ fs/btrfs/inode.c | 5 +++++ fs/ceph/super.c | 5 +++++ fs/cifs/cifsfs.c | 5 +++++ fs/coda/inode.c | 5 +++++ fs/ecryptfs/main.c | 6 ++++++ fs/efs/super.c | 5 +++++ fs/exofs/super.c | 5 +++++ fs/ext2/super.c | 5 +++++ fs/ext3/super.c | 5 +++++ fs/ext4/super.c | 5 +++++ fs/fat/inode.c | 5 +++++ fs/freevxfs/vxfs_super.c | 5 +++++ fs/fuse/inode.c | 6 ++++++ fs/hfs/super.c | 6 ++++++ fs/hfsplus/super.c | 6 ++++++ fs/hpfs/super.c | 5 +++++ fs/hugetlbfs/inode.c | 5 +++++ fs/isofs/inode.c | 5 +++++ fs/jffs2/super.c | 6 ++++++ fs/jfs/super.c | 6 ++++++ fs/logfs/inode.c | 5 +++++ fs/minix/inode.c | 5 +++++ fs/ncpfs/inode.c | 5 +++++ fs/nfs/inode.c | 5 +++++ fs/nilfs2/super.c | 6 ++++++ fs/ntfs/super.c | 6 ++++++ fs/ocfs2/dlmfs/dlmfs.c | 5 +++++ fs/ocfs2/super.c | 5 +++++ fs/openpromfs/inode.c | 5 +++++ fs/qnx4/inode.c | 5 +++++ fs/qnx6/inode.c | 5 +++++ fs/reiserfs/super.c | 5 +++++ fs/romfs/super.c | 5 +++++ fs/squashfs/super.c | 5 +++++ fs/super.c | 6 ------ fs/sysv/inode.c | 5 +++++ fs/ubifs/super.c | 6 ++++++ fs/udf/super.c | 5 +++++ fs/ufs/super.c | 5 +++++ fs/xfs/xfs_super.c | 5 +++++ 47 files changed, 240 insertions(+), 6 deletions(-) diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c index b85efa7..392c5da 100644 --- a/fs/9p/v9fs.c +++ b/fs/9p/v9fs.c @@ -560,6 +560,11 @@ static int v9fs_init_inode_cache(void) */ static void v9fs_destroy_inode_cache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(v9fs_inode_cache); } diff --git a/fs/adfs/super.c b/fs/adfs/super.c index 06fdcc9..f137165 100644 --- a/fs/adfs/super.c +++ b/fs/adfs/super.c @@ -276,6 +276,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(adfs_inode_cachep); } diff --git a/fs/affs/super.c b/fs/affs/super.c index 0782653..4fe18a8 100644 --- a/fs/affs/super.c +++ b/fs/affs/super.c @@ -129,6 +129,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(affs_inode_cachep); } diff --git a/fs/afs/super.c b/fs/afs/super.c index f02b31e..af69050 100644 --- a/fs/afs/super.c +++ b/fs/afs/super.c @@ -123,6 +123,11 @@ void __exit afs_fs_exit(void) BUG(); } + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(afs_inode_cachep); _leave(""); } diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c index e18da23..02f3331 100644 --- a/fs/befs/linuxvfs.c +++ b/fs/befs/linuxvfs.c @@ -454,6 +454,11 @@ befs_init_inodecache(void) static void befs_destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(befs_inode_cachep); } diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c index 9870417..d5fc598 100644 --- a/fs/bfs/inode.c +++ b/fs/bfs/inode.c @@ -280,6 +280,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(bfs_inode_cachep); } diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 2c8f7b2..010623a 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -106,6 +106,12 @@ void extent_io_exit(void) list_del(&eb->leak_list); kmem_cache_free(extent_buffer_cache, eb); } + + /* + * Make sure all delayed rcu free are flushed before we + * destroy caches. + */ + rcu_barrier(); if (extent_state_cache) kmem_cache_destroy(extent_state_cache); if (extent_buffer_cache) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index f6ab6f5..971d222 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -6976,6 +6976,11 @@ static void init_once(void *foo) void btrfs_destroy_cachep(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); if (btrfs_inode_cachep) kmem_cache_destroy(btrfs_inode_cachep); if (btrfs_trans_handle_cachep) diff --git a/fs/ceph/super.c b/fs/ceph/super.c index 1e67dd7..ecc251e 100644 --- a/fs/ceph/super.c +++ b/fs/ceph/super.c @@ -602,6 +602,11 @@ bad_cap: static void destroy_caches(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(ceph_inode_cachep); kmem_cache_destroy(ceph_cap_cachep); kmem_cache_destroy(ceph_dentry_cachep); diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index 8b6e344..93ce9b3f 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c @@ -975,6 +975,11 @@ cifs_init_inodecache(void) static void cifs_destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(cifs_inode_cachep); } diff --git a/fs/coda/inode.c b/fs/coda/inode.c index f181312..0c70460 100644 --- a/fs/coda/inode.c +++ b/fs/coda/inode.c @@ -85,6 +85,11 @@ int coda_init_inodecache(void) void coda_destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(coda_inode_cachep); } diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c index 6895493..f6acf8a 100644 --- a/fs/ecryptfs/main.c +++ b/fs/ecryptfs/main.c @@ -693,6 +693,12 @@ static void ecryptfs_free_kmem_caches(void) { int i; + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); + for (i = 0; i < ARRAY_SIZE(ecryptfs_cache_infos); i++) { struct ecryptfs_cache_info *info; diff --git a/fs/efs/super.c b/fs/efs/super.c index e755ec7..2002431 100644 --- a/fs/efs/super.c +++ b/fs/efs/super.c @@ -96,6 +96,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(efs_inode_cachep); } diff --git a/fs/exofs/super.c b/fs/exofs/super.c index 4337836..d271f96 100644 --- a/fs/exofs/super.c +++ b/fs/exofs/super.c @@ -206,6 +206,11 @@ static int init_inodecache(void) */ static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(exofs_inode_cachep); } diff --git a/fs/ext2/super.c b/fs/ext2/super.c index b3621cb..de2051c 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c @@ -204,6 +204,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(ext2_inode_cachep); } diff --git a/fs/ext3/super.c b/fs/ext3/super.c index 8c3a44b..bd60e08 100644 --- a/fs/ext3/super.c +++ b/fs/ext3/super.c @@ -543,6 +543,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(ext3_inode_cachep); } diff --git a/fs/ext4/super.c b/fs/ext4/super.c index eb7aa3e..4e2aacb 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -1046,6 +1046,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(ext4_inode_cachep); } diff --git a/fs/fat/inode.c b/fs/fat/inode.c index a3d81eb..35113bc 100644 --- a/fs/fat/inode.c +++ b/fs/fat/inode.c @@ -526,6 +526,11 @@ static int __init fat_init_inodecache(void) static void __exit fat_destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(fat_inode_cachep); } diff --git a/fs/freevxfs/vxfs_super.c b/fs/freevxfs/vxfs_super.c index d4fabd2..fed2c8a 100644 --- a/fs/freevxfs/vxfs_super.c +++ b/fs/freevxfs/vxfs_super.c @@ -279,6 +279,11 @@ static void __exit vxfs_cleanup(void) { unregister_filesystem(&vxfs_fs_type); + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(vxfs_inode_cachep); } diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 1cd6165..9078173 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -1171,6 +1171,12 @@ static void fuse_fs_cleanup(void) { unregister_filesystem(&fuse_fs_type); unregister_fuseblk(); + + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(fuse_inode_cachep); } diff --git a/fs/hfs/super.c b/fs/hfs/super.c index 7b4c537..373a9e5 100644 --- a/fs/hfs/super.c +++ b/fs/hfs/super.c @@ -483,6 +483,12 @@ static int __init init_hfs_fs(void) static void __exit exit_hfs_fs(void) { unregister_filesystem(&hfs_fs_type); + + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(hfs_inode_cachep); } diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c index a9bca4b..bde9ecf 100644 --- a/fs/hfsplus/super.c +++ b/fs/hfsplus/super.c @@ -615,6 +615,12 @@ static int __init init_hfsplus_fs(void) static void __exit exit_hfsplus_fs(void) { unregister_filesystem(&hfsplus_fs_type); + + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(hfsplus_inode_cachep); } diff --git a/fs/hpfs/super.c b/fs/hpfs/super.c index 706a12c..3cb1da5 100644 --- a/fs/hpfs/super.c +++ b/fs/hpfs/super.c @@ -210,6 +210,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(hpfs_inode_cachep); } diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index cc9281b..b482175 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -1042,6 +1042,11 @@ static int __init init_hugetlbfs_fs(void) static void __exit exit_hugetlbfs_fs(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(hugetlbfs_inode_cachep); kern_unmount(hugetlbfs_vfsmount); unregister_filesystem(&hugetlbfs_fs_type); diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c index 29037c3..f94cde4 100644 --- a/fs/isofs/inode.c +++ b/fs/isofs/inode.c @@ -114,6 +114,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(isofs_inode_cachep); } diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c index 61ea413..ff48795 100644 --- a/fs/jffs2/super.c +++ b/fs/jffs2/super.c @@ -418,6 +418,12 @@ static void __exit exit_jffs2_fs(void) unregister_filesystem(&jffs2_fs_type); jffs2_destroy_slab_caches(); jffs2_compressors_exit(); + + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(jffs2_inode_cachep); } diff --git a/fs/jfs/super.c b/fs/jfs/super.c index 4a82950..2fc7602 100644 --- a/fs/jfs/super.c +++ b/fs/jfs/super.c @@ -898,6 +898,12 @@ static void __exit exit_jfs_fs(void) jfs_proc_clean(); #endif unregister_filesystem(&jfs_fs_type); + + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(jfs_inode_cachep); } diff --git a/fs/logfs/inode.c b/fs/logfs/inode.c index a422f42..3d1b9fa 100644 --- a/fs/logfs/inode.c +++ b/fs/logfs/inode.c @@ -401,5 +401,10 @@ int logfs_init_inode_cache(void) void logfs_destroy_inode_cache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(logfs_inode_cache); } diff --git a/fs/minix/inode.c b/fs/minix/inode.c index 2a503ad..dc8d362 100644 --- a/fs/minix/inode.c +++ b/fs/minix/inode.c @@ -100,6 +100,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(minix_inode_cachep); } diff --git a/fs/ncpfs/inode.c b/fs/ncpfs/inode.c index 333df07..0c62c55 100644 --- a/fs/ncpfs/inode.c +++ b/fs/ncpfs/inode.c @@ -89,6 +89,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(ncp_inode_cachep); } diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index e605d69..39aae2e 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -1566,6 +1566,11 @@ static int __init nfs_init_inodecache(void) static void nfs_destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(nfs_inode_cachep); } diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c index 1099a76..956e5a4 100644 --- a/fs/nilfs2/super.c +++ b/fs/nilfs2/super.c @@ -1386,6 +1386,12 @@ static void nilfs_segbuf_init_once(void *obj) static void nilfs_destroy_cachep(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); + if (nilfs_inode_cachep) kmem_cache_destroy(nilfs_inode_cachep); if (nilfs_transaction_cachep) diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c index b341492..ecc8625 100644 --- a/fs/ntfs/super.c +++ b/fs/ntfs/super.c @@ -3185,6 +3185,12 @@ static void __exit exit_ntfs_fs(void) ntfs_debug("Unregistering NTFS driver."); unregister_filesystem(&ntfs_fs_type); + + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(ntfs_big_inode_cache); kmem_cache_destroy(ntfs_inode_cache); kmem_cache_destroy(ntfs_name_cache); diff --git a/fs/ocfs2/dlmfs/dlmfs.c b/fs/ocfs2/dlmfs/dlmfs.c index e31d6ae..6934459 100644 --- a/fs/ocfs2/dlmfs/dlmfs.c +++ b/fs/ocfs2/dlmfs/dlmfs.c @@ -691,6 +691,11 @@ static void __exit exit_dlmfs_fs(void) flush_workqueue(user_dlm_worker); destroy_workqueue(user_dlm_worker); + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(dlmfs_inode_cache); bdi_destroy(&dlmfs_backing_dev_info); diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index 68f4541..0e91ec2 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c @@ -1818,6 +1818,11 @@ static int ocfs2_initialize_mem_caches(void) static void ocfs2_free_mem_caches(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); if (ocfs2_inode_cachep) kmem_cache_destroy(ocfs2_inode_cachep); ocfs2_inode_cachep = NULL; diff --git a/fs/openpromfs/inode.c b/fs/openpromfs/inode.c index bc49c97..1b76370 100644 --- a/fs/openpromfs/inode.c +++ b/fs/openpromfs/inode.c @@ -463,6 +463,11 @@ static int __init init_openprom_fs(void) static void __exit exit_openprom_fs(void) { unregister_filesystem(&openprom_fs_type); + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(op_inode_cachep); } diff --git a/fs/qnx4/inode.c b/fs/qnx4/inode.c index 552e994..9534b4f 100644 --- a/fs/qnx4/inode.c +++ b/fs/qnx4/inode.c @@ -391,6 +391,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(qnx4_inode_cachep); } diff --git a/fs/qnx6/inode.c b/fs/qnx6/inode.c index e44012d..3cba5d2 100644 --- a/fs/qnx6/inode.c +++ b/fs/qnx6/inode.c @@ -652,6 +652,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(qnx6_inode_cachep); } diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c index 651ce76..ad39139 100644 --- a/fs/reiserfs/super.c +++ b/fs/reiserfs/super.c @@ -603,6 +603,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(reiserfs_inode_cachep); } diff --git a/fs/romfs/super.c b/fs/romfs/super.c index e64f6b5..f901eaf 100644 --- a/fs/romfs/super.c +++ b/fs/romfs/super.c @@ -648,6 +648,11 @@ error_register: static void __exit exit_romfs_fs(void) { unregister_filesystem(&romfs_fs_type); + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(romfs_inode_cachep); } diff --git a/fs/squashfs/super.c b/fs/squashfs/super.c index 29cd014..260e392 100644 --- a/fs/squashfs/super.c +++ b/fs/squashfs/super.c @@ -425,6 +425,11 @@ static int __init init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(squashfs_inode_cachep); } diff --git a/fs/super.c b/fs/super.c index cf00177..2d962aa 100644 --- a/fs/super.c +++ b/fs/super.c @@ -256,12 +256,6 @@ void deactivate_locked_super(struct super_block *s) /* caches are now gone, we can safely kill the shrinker now */ unregister_shrinker(&s->s_shrink); - - /* - * We need to call rcu_barrier so all the delayed rcu free - * inodes are flushed before we release the fs module. - */ - rcu_barrier(); put_filesystem(fs); put_super(s); } else { diff --git a/fs/sysv/inode.c b/fs/sysv/inode.c index 08d0b25..a08341c 100644 --- a/fs/sysv/inode.c +++ b/fs/sysv/inode.c @@ -376,5 +376,10 @@ int __init sysv_init_icache(void) void sysv_destroy_icache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(sysv_inode_cachep); } diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index 5862dd9..e8ae748 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c @@ -2302,6 +2302,12 @@ static void __exit ubifs_exit(void) dbg_debugfs_exit(); ubifs_compressors_exit(); unregister_shrinker(&ubifs_shrinker_info); + + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(ubifs_inode_slab); unregister_filesystem(&ubifs_fs_type); } diff --git a/fs/udf/super.c b/fs/udf/super.c index ac8a348..ebe9f52 100644 --- a/fs/udf/super.c +++ b/fs/udf/super.c @@ -170,6 +170,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(udf_inode_cachep); } diff --git a/fs/ufs/super.c b/fs/ufs/super.c index 302f340..f655c1d 100644 --- a/fs/ufs/super.c +++ b/fs/ufs/super.c @@ -1449,6 +1449,11 @@ static int init_inodecache(void) static void destroy_inodecache(void) { + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); kmem_cache_destroy(ufs_inode_cachep); } diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 0d9de41..bbcbf2a 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -1582,6 +1582,11 @@ xfs_init_zones(void) STATIC void xfs_destroy_zones(void) { + /* + * Make sure all delayed rcu free are flushed before we + * destroy caches. + */ + rcu_barrier(); kmem_zone_destroy(xfs_ili_zone); kmem_zone_destroy(xfs_inode_zone); kmem_zone_destroy(xfs_efi_zone); -- Kirill A. Shutemov ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [partially solved] Q: exit_group slowness 2012-06-08 12:46 ` Kirill A. Shutemov @ 2012-06-08 15:31 ` Kirill A. Shutemov 2012-06-08 15:56 ` Dmitry V. Levin 1 sibling, 0 replies; 20+ messages in thread From: Kirill A. Shutemov @ 2012-06-08 15:31 UTC (permalink / raw) To: ALT Devel discussion list On Fri, Jun 08, 2012 at 03:46:29PM +0300, Kirill A. Shutemov wrote: > On Wed, Jun 06, 2012 at 05:31:27AM +0400, Dmitry V. Levin wrote: > > On Tue, Jun 05, 2012 at 04:10:35PM +0300, Kirill A. Shutemov wrote: > > > On Tue, Jun 05, 2012 at 04:46:03PM +0400, Dmitry V. Levin wrote: > > > > On Tue, Jun 05, 2012 at 03:37:19PM +0300, Kirill A. Shutemov wrote: > > > > > On Tue, Jun 05, 2012 at 01:08:28PM +0400, Dmitry V. Levin wrote: > > > > > > On Tue, Jun 05, 2012 at 09:06:22AM +0300, Kirill A. Shutemov wrote: > > > > > > > Похоже вот на это: > > > > > > > > > > > > > > http://lkml.org/lkml/2012/6/3/34 > > > > > > > > > > > > > > Ниже по трэду Пол предлагает возможное решение. > > > > > > > > > > > > Спасибо, откат на 3.2.14-std-def-alt1 радикально улучшил картинку: > > > > > > # env -i strace -r -eprocess /usr/bin/unshare -i /bin/true > > > > > > 0.000000 execve("/usr/bin/unshare", ["/usr/bin/unshare", "-i", "/bin/true"], [/* 0 vars */]) = 0 > > > > > > 0.001357 arch_prctl(ARCH_SET_FS, 0x7f49add73700) = 0 > > > > > > 0.000457 unshare(CLONE_NEWIPC) = 0 > > > > > > 0.000200 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > > > > 0.000350 exit_group(0) = ? > > > > > > 0.156461 +++ exited with 0 +++ > > > > > > > > > > > > Хотя до идеала еще далеко: > > > > > > # env -i strace -r /bin/true > > > > > > 0.000000 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > > > > 0.000628 exit_group(0) = ? > > > > > > 0.000329 +++ exited with 0 +++ > > > > > > > > > > exit_group() дорогой только для последнего процесса в namespace, так? > > > > > > > > Да, конечно. > > > > > > > > > Думаю, это цена которую можно заплатить. > > > > > > > > 0.15 секунды это очень долго, то же самое ядро на более простых серверах > > > > завершает последний процесс в namespace на 1-2 порядка быстрее. Так что > > > > вопрос, что не так и как с этим бороться, пока остается. > > > > > > RCU_FAST_NO_HZ не предназначена для больших машин. О чём в явном виде > > > написано в описании опции. Так что CONFIG_RCU_FAST_NO_HZ=y было ошибкой > > > для дистрибутивного ядра. > > > > > > Когда моя большая машинка (40 ядер + ht) освободится я попробую > > > поэксперементировать с этим немного. Есть подозрение, что отмонирование > > > файловой системы (внутриядерной, в случае CLONE_NEWIPC) плохо > > > масштабируется на большое количество процессоров даже без RCU_FAST_NO_HZ. > > > > Для справки: на той же машинке (где "rpm --eval %__nprocs" показывает 32) с > > 3.3.8-std-def-alt1 (с отключенным CONFIG_RCU_FAST_NO_HZ) время завершения > > "unshare -i /bin/true" уменьшилось примерно в полтора раза по сравнению с > > 3.2.14-std-def-alt1 (с 0.15 до 0.10 секунды). > > Дима, можешь проверить поможет ли патчик, прежде чем я покажу его > апстриму: > > From b76600918d021ec9836659dbb991f4d9a92de795 Mon Sep 17 00:00:00 2001 > From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com> > Date: Fri, 8 Jun 2012 15:30:31 +0300 > Subject: [PATCH] fs: push rcu_barrier() from deactivate_locked_super() to > filesystems > > There's no reason to call rcu_barrier() on every deactivate_locked_super(). > We only need to make sure that all delayed rcu free inodes are flushed > before we destroy related cache. > > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> С этим патчем exit_group() у меня отрабатывает за 0.005 - 0.012 секунды. Приемлимо? -- Kirill A. Shutemov ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [partially solved] Q: exit_group slowness 2012-06-08 12:46 ` Kirill A. Shutemov 2012-06-08 15:31 ` Kirill A. Shutemov @ 2012-06-08 15:56 ` Dmitry V. Levin 2012-06-12 7:00 ` Kirill A. Shutemov 1 sibling, 1 reply; 20+ messages in thread From: Dmitry V. Levin @ 2012-06-08 15:56 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 3010 bytes --] On Fri, Jun 08, 2012 at 03:46:29PM +0300, Kirill A. Shutemov wrote: > On Wed, Jun 06, 2012 at 05:31:27AM +0400, Dmitry V. Levin wrote: > > On Tue, Jun 05, 2012 at 04:10:35PM +0300, Kirill A. Shutemov wrote: > > > On Tue, Jun 05, 2012 at 04:46:03PM +0400, Dmitry V. Levin wrote: > > > > On Tue, Jun 05, 2012 at 03:37:19PM +0300, Kirill A. Shutemov wrote: > > > > > On Tue, Jun 05, 2012 at 01:08:28PM +0400, Dmitry V. Levin wrote: > > > > > > On Tue, Jun 05, 2012 at 09:06:22AM +0300, Kirill A. Shutemov wrote: > > > > > > > Похоже вот на это: > > > > > > > > > > > > > > http://lkml.org/lkml/2012/6/3/34 > > > > > > > > > > > > > > Ниже по трэду Пол предлагает возможное решение. > > > > > > > > > > > > Спасибо, откат на 3.2.14-std-def-alt1 радикально улучшил картинку: > > > > > > # env -i strace -r -eprocess /usr/bin/unshare -i /bin/true > > > > > > 0.000000 execve("/usr/bin/unshare", ["/usr/bin/unshare", "-i", "/bin/true"], [/* 0 vars */]) = 0 > > > > > > 0.001357 arch_prctl(ARCH_SET_FS, 0x7f49add73700) = 0 > > > > > > 0.000457 unshare(CLONE_NEWIPC) = 0 > > > > > > 0.000200 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > > > > 0.000350 exit_group(0) = ? > > > > > > 0.156461 +++ exited with 0 +++ > > > > > > > > > > > > Хотя до идеала еще далеко: > > > > > > # env -i strace -r /bin/true > > > > > > 0.000000 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > > > > 0.000628 exit_group(0) = ? > > > > > > 0.000329 +++ exited with 0 +++ > > > > > > > > > > exit_group() дорогой только для последнего процесса в namespace, так? > > > > > > > > Да, конечно. > > > > > > > > > Думаю, это цена которую можно заплатить. > > > > > > > > 0.15 секунды это очень долго, то же самое ядро на более простых серверах > > > > завершает последний процесс в namespace на 1-2 порядка быстрее. Так что > > > > вопрос, что не так и как с этим бороться, пока остается. > > > > > > RCU_FAST_NO_HZ не предназначена для больших машин. О чём в явном виде > > > написано в описании опции. Так что CONFIG_RCU_FAST_NO_HZ=y было ошибкой > > > для дистрибутивного ядра. > > > > > > Когда моя большая машинка (40 ядер + ht) освободится я попробую > > > поэксперементировать с этим немного. Есть подозрение, что отмонирование > > > файловой системы (внутриядерной, в случае CLONE_NEWIPC) плохо > > > масштабируется на большое количество процессоров даже без RCU_FAST_NO_HZ. > > > > Для справки: на той же машинке (где "rpm --eval %__nprocs" показывает 32) с > > 3.3.8-std-def-alt1 (с отключенным CONFIG_RCU_FAST_NO_HZ) время завершения > > "unshare -i /bin/true" уменьшилось примерно в полтора раза по сравнению с > > 3.2.14-std-def-alt1 (с 0.15 до 0.10 секунды). > > Дима, можешь проверить поможет ли патчик, прежде чем я покажу его > апстриму: Спасибо, с этим патчем "unshare -i /bin/true" отрабатывает ровно в 3 раза быстрее, чем без этого патча. -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [partially solved] Q: exit_group slowness 2012-06-08 15:56 ` Dmitry V. Levin @ 2012-06-12 7:00 ` Kirill A. Shutemov 2012-06-13 0:32 ` Dmitry V. Levin 0 siblings, 1 reply; 20+ messages in thread From: Kirill A. Shutemov @ 2012-06-12 7:00 UTC (permalink / raw) To: ALT Devel discussion list On Fri, Jun 08, 2012 at 07:56:38PM +0400, Dmitry V. Levin wrote: > On Fri, Jun 08, 2012 at 03:46:29PM +0300, Kirill A. Shutemov wrote: > > On Wed, Jun 06, 2012 at 05:31:27AM +0400, Dmitry V. Levin wrote: > > > On Tue, Jun 05, 2012 at 04:10:35PM +0300, Kirill A. Shutemov wrote: > > > > On Tue, Jun 05, 2012 at 04:46:03PM +0400, Dmitry V. Levin wrote: > > > > > On Tue, Jun 05, 2012 at 03:37:19PM +0300, Kirill A. Shutemov wrote: > > > > > > On Tue, Jun 05, 2012 at 01:08:28PM +0400, Dmitry V. Levin wrote: > > > > > > > On Tue, Jun 05, 2012 at 09:06:22AM +0300, Kirill A. Shutemov wrote: > > > > > > > > Похоже вот на это: > > > > > > > > > > > > > > > > http://lkml.org/lkml/2012/6/3/34 > > > > > > > > > > > > > > > > Ниже по трэду Пол предлагает возможное решение. > > > > > > > > > > > > > > Спасибо, откат на 3.2.14-std-def-alt1 радикально улучшил картинку: > > > > > > > # env -i strace -r -eprocess /usr/bin/unshare -i /bin/true > > > > > > > 0.000000 execve("/usr/bin/unshare", ["/usr/bin/unshare", "-i", "/bin/true"], [/* 0 vars */]) = 0 > > > > > > > 0.001357 arch_prctl(ARCH_SET_FS, 0x7f49add73700) = 0 > > > > > > > 0.000457 unshare(CLONE_NEWIPC) = 0 > > > > > > > 0.000200 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > > > > > 0.000350 exit_group(0) = ? > > > > > > > 0.156461 +++ exited with 0 +++ > > > > > > > > > > > > > > Хотя до идеала еще далеко: > > > > > > > # env -i strace -r /bin/true > > > > > > > 0.000000 execve("/bin/true", ["/bin/true"], [/* 0 vars */]) = 0 > > > > > > > 0.000628 exit_group(0) = ? > > > > > > > 0.000329 +++ exited with 0 +++ > > > > > > > > > > > > exit_group() дорогой только для последнего процесса в namespace, так? > > > > > > > > > > Да, конечно. > > > > > > > > > > > Думаю, это цена которую можно заплатить. > > > > > > > > > > 0.15 секунды это очень долго, то же самое ядро на более простых серверах > > > > > завершает последний процесс в namespace на 1-2 порядка быстрее. Так что > > > > > вопрос, что не так и как с этим бороться, пока остается. > > > > > > > > RCU_FAST_NO_HZ не предназначена для больших машин. О чём в явном виде > > > > написано в описании опции. Так что CONFIG_RCU_FAST_NO_HZ=y было ошибкой > > > > для дистрибутивного ядра. > > > > > > > > Когда моя большая машинка (40 ядер + ht) освободится я попробую > > > > поэксперементировать с этим немного. Есть подозрение, что отмонирование > > > > файловой системы (внутриядерной, в случае CLONE_NEWIPC) плохо > > > > масштабируется на большое количество процессоров даже без RCU_FAST_NO_HZ. > > > > > > Для справки: на той же машинке (где "rpm --eval %__nprocs" показывает 32) с > > > 3.3.8-std-def-alt1 (с отключенным CONFIG_RCU_FAST_NO_HZ) время завершения > > > "unshare -i /bin/true" уменьшилось примерно в полтора раза по сравнению с > > > 3.2.14-std-def-alt1 (с 0.15 до 0.10 секунды). > > > > Дима, можешь проверить поможет ли патчик, прежде чем я покажу его > > апстриму: > > Спасибо, с этим патчем "unshare -i /bin/true" отрабатывает ровно в 3 раза > быстрее, чем без этого патча. Andrew Morton взял патч в -mm. Если ничего плохого не случится, должен быть в v3.6. -- Kirill A. Shutemov ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [partially solved] Q: exit_group slowness 2012-06-12 7:00 ` Kirill A. Shutemov @ 2012-06-13 0:32 ` Dmitry V. Levin 2012-08-10 19:41 ` Michael Shigorin 0 siblings, 1 reply; 20+ messages in thread From: Dmitry V. Levin @ 2012-06-13 0:32 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 614 bytes --] On Tue, Jun 12, 2012 at 10:00:08AM +0300, Kirill A. Shutemov wrote: > On Fri, Jun 08, 2012 at 07:56:38PM +0400, Dmitry V. Levin wrote: > > On Fri, Jun 08, 2012 at 03:46:29PM +0300, Kirill A. Shutemov wrote: [...] > > > Дима, можешь проверить поможет ли патчик, прежде чем я покажу его > > > апстриму: > > > > Спасибо, с этим патчем "unshare -i /bin/true" отрабатывает ровно в 3 раза > > быстрее, чем без этого патча. > > Andrew Morton взял патч в -mm. Если ничего плохого не случится, должен > быть в v3.6. Давайте тогда приложим его в std-def и другие наши ядра, не дожидаясь v3.6? -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [partially solved] Q: exit_group slowness 2012-06-13 0:32 ` Dmitry V. Levin @ 2012-08-10 19:41 ` Michael Shigorin 0 siblings, 0 replies; 20+ messages in thread From: Michael Shigorin @ 2012-08-10 19:41 UTC (permalink / raw) To: ALT Devel discussion list On Wed, Jun 13, 2012 at 04:32:15AM +0400, Dmitry V. Levin wrote: > > Andrew Morton взял патч в -mm. Если ничего плохого не > > случится, должен быть в v3.6. > Давайте тогда приложим его в std-def и другие наши ядра, > не дожидаясь v3.6? JFYI, сегодня имел неосторожность почистить старые ядра на сборочном узле и потом долго мучился, пытаясь найти подходящее для работы. Остановился на 2.6.32-ovz-el-alt71, на остальных (2.6.32-el-smp-alt39, 3.4.7-std-def-alt1, 3.5.0-un-def-alt2) сборка мелких образов в mkimage всё так же занимает почти вдвое больше времени за счёт hsh-initroot. -- ---- WBR, Michael Shigorin <mike@altlinux.ru> ------ Linux.Kiev http://www.linux.kiev.ua/ ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] Q: exit_group slowness 2012-06-04 21:11 [devel] Q: exit_group slowness Dmitry V. Levin 2012-06-04 22:30 ` Kirill A. Shutemov @ 2012-06-04 22:35 ` Led 2012-06-04 22:39 ` Kirill A. Shutemov 2012-06-06 8:43 ` Michael Shigorin 2 siblings, 1 reply; 20+ messages in thread From: Led @ 2012-06-04 22:35 UTC (permalink / raw) To: ALT Devel discussion list On Tuesday 05 June 2012 00:11:17 Dmitry V. Levin wrote: > Hi, > > Наблюдаю странный эффект: > $ time /usr/libexec/hasher-priv/hasher-priv chrootuid2 > /tmp/.private/bee1/hasher/chroot /bin/true 0.00user 0.00system > 0:08.61elapsed 0%CPU (0avgtext+0avgdata 3152maxresident)k 0inputs+0outputs > (0major+321minor)pagefaults 0swaps > $ uname -rm > 3.3.7-std-def-alt1 x86_64 > > Воспроизводимость 100%, разброс примерно от 2 до 16 секунд. С момента > запуска команды до момента завершения всех системных вызовов exit_group(0) > проходит 0 секунд, остальные несколько секунд уходят на то, чтобы > проинформировать parent (bash, strace) о завершении child'а (hasher-priv). > > Кто-нибудь когда-нибудь сталкивался с чем-нибудь подобным? А grep cgroup /proc/mounts при этом пустой? -- Led ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] Q: exit_group slowness 2012-06-04 22:35 ` [devel] " Led @ 2012-06-04 22:39 ` Kirill A. Shutemov 2012-06-04 22:47 ` Led 0 siblings, 1 reply; 20+ messages in thread From: Kirill A. Shutemov @ 2012-06-04 22:39 UTC (permalink / raw) To: ALT Linux Team development discussions On Tue, Jun 05, 2012 at 01:35:36AM +0300, Led wrote: > > > On Tuesday 05 June 2012 00:11:17 Dmitry V. Levin wrote: > > Hi, > > > > Наблюдаю странный эффект: > > $ time /usr/libexec/hasher-priv/hasher-priv chrootuid2 > > /tmp/.private/bee1/hasher/chroot /bin/true 0.00user 0.00system > > 0:08.61elapsed 0%CPU (0avgtext+0avgdata 3152maxresident)k 0inputs+0outputs > > (0major+321minor)pagefaults 0swaps > > $ uname -rm > > 3.3.7-std-def-alt1 x86_64 > > > > Воспроизводимость 100%, разброс примерно от 2 до 16 секунд. С момента > > запуска команды до момента завершения всех системных вызовов exit_group(0) > > проходит 0 секунд, остальные несколько секунд уходят на то, чтобы > > проинформировать parent (bash, strace) о завершении child'а (hasher-priv). > > > > Кто-нибудь когда-нибудь сталкивался с чем-нибудь подобным? > > А > grep cgroup /proc/mounts > при этом пустой? А как это может быть связано? -- Kirill A. Shutemov ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] Q: exit_group slowness 2012-06-04 22:39 ` Kirill A. Shutemov @ 2012-06-04 22:47 ` Led 0 siblings, 0 replies; 20+ messages in thread From: Led @ 2012-06-04 22:47 UTC (permalink / raw) To: ALT Linux Team development discussions On Tuesday 05 June 2012 01:39:29 Kirill A. Shutemov wrote: > On Tue, Jun 05, 2012 at 01:35:36AM +0300, Led wrote: > > On Tuesday 05 June 2012 00:11:17 Dmitry V. Levin wrote: > > > Hi, > > > > > > Наблюдаю странный эффект: > > > $ time /usr/libexec/hasher-priv/hasher-priv chrootuid2 > > > /tmp/.private/bee1/hasher/chroot /bin/true 0.00user 0.00system > > > 0:08.61elapsed 0%CPU (0avgtext+0avgdata 3152maxresident)k > > > 0inputs+0outputs (0major+321minor)pagefaults 0swaps > > > $ uname -rm > > > 3.3.7-std-def-alt1 x86_64 > > > > > > Воспроизводимость 100%, разброс примерно от 2 до 16 секунд. С момента > > > запуска команды до момента завершения всех системных вызовов > > > exit_group(0) проходит 0 секунд, остальные несколько секунд уходят на > > > то, чтобы проинформировать parent (bash, strace) о завершении child'а > > > (hasher-priv). > > > > > > Кто-нибудь когда-нибудь сталкивался с чем-нибудь подобным? > > > > А > > grep cgroup /proc/mounts > > при этом пустой? > > А как это может быть связано? Не знаю. Но у меня была завидная повторяемость: стОит смонтировать cgroup и hasher становится неюзабельным. Размонтрование cgroup не помогает - только ребут. -- Led ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] Q: exit_group slowness 2012-06-04 21:11 [devel] Q: exit_group slowness Dmitry V. Levin 2012-06-04 22:30 ` Kirill A. Shutemov 2012-06-04 22:35 ` [devel] " Led @ 2012-06-06 8:43 ` Michael Shigorin 2 siblings, 0 replies; 20+ messages in thread From: Michael Shigorin @ 2012-06-06 8:43 UTC (permalink / raw) To: ALT Devel discussion list On Tue, Jun 05, 2012 at 01:11:17AM +0400, Dmitry V. Levin wrote: > Кто-нибудь когда-нибудь сталкивался с чем-нибудь подобным? Месяц тому писал в жабер aspsk@ следующий подземный стук: --- [07.05.2012 12:28:44] <mike> привет! вчера к ночи загрузил сборочный узел под el-smp вместо сизифного std-def и получил назад более-менее похожие на правду времена сборки в mkimage (это формирование стопки hasher-чрутов плюс заворачивание squashfs): должно быть менее минуты, выходило около двух на глаз заметно, что под std-def очень медленно происходит hsh-initroot: Unpacked ....rpm for fakedata и такое ощущение, что надолго (порядка секунды) задумывается на лоченье workdir'а при hsh-run при этом на гораздо более слабом (C2D) ноуте под std-pae минимальные исошки начали собираться быстрее -- порядка минуты постараюсь выяснить локально, в чём именно дело [skip], но JFYI -- вдруг ещё где подобное замечено... --- Судя по датам в /boot, речь была про 3.3.4-std-def-alt1 (CONFIG_RCU_FAST_NO_HZ там было уже включено). -- ---- WBR, Michael Shigorin <mike@altlinux.ru> ------ Linux.Kiev http://www.linux.kiev.ua/ ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2012-08-10 19:41 UTC | newest] Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-06-04 21:11 [devel] Q: exit_group slowness Dmitry V. Levin 2012-06-04 22:30 ` Kirill A. Shutemov 2012-06-05 0:20 ` Dmitry V. Levin 2012-06-05 6:06 ` Kirill A. Shutemov 2012-06-05 9:08 ` [devel] [partially solved] " Dmitry V. Levin 2012-06-05 12:37 ` Kirill A. Shutemov 2012-06-05 12:46 ` Dmitry V. Levin 2012-06-05 13:10 ` Kirill A. Shutemov 2012-06-06 1:31 ` Dmitry V. Levin 2012-06-06 18:40 ` Kirill A. Shutemov 2012-06-08 12:46 ` Kirill A. Shutemov 2012-06-08 15:31 ` Kirill A. Shutemov 2012-06-08 15:56 ` Dmitry V. Levin 2012-06-12 7:00 ` Kirill A. Shutemov 2012-06-13 0:32 ` Dmitry V. Levin 2012-08-10 19:41 ` Michael Shigorin 2012-06-04 22:35 ` [devel] " Led 2012-06-04 22:39 ` Kirill A. Shutemov 2012-06-04 22:47 ` Led 2012-06-06 8:43 ` Michael Shigorin
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git