Re: Latest vfs scalability patch

From: Anton Blanchard
Date: Thu Oct 15 2009 - 07:27:42 EST



Hi Nick,

> I wonder what other good performance tests you can add to your test
> framework? creat/unlink is another easy one. And for each case, putting
> threads in their own cwd versus a common cwd are the variants.

I did try the two combinations of creat/unlink but haven't had a chance to
digest the profiles yet. I've attached them (taken at 64 cores, ie worst
case :)

In both cases performance was significantly better than mainline.

> BTW. for these cases in your tests it will be nice if you can run on
> ramfs because that will isolate purely the vfs. Perhaps also include
> other filesystems as you get time, but I think ramfs is the most
> useful for us to start with.

Good point. I'll add that into the setup scripts.

Anton
# Samples: 82617
#
# Overhead Command Shared Object Symbol
# ........ ............... ................................. ......
#
99.16% unlink1_process [kernel] [k] ._spin_lock
|
|--99.98%-- ._spin_lock
| |
| |--49.80%-- .path_get
| | (nil)
| | |
| | |--71.62%-- .path_init
| | | |
| | | |--51.37%-- .do_path_lookup
| | | | .user_path_parent
| | | | .do_unlinkat
| | | | syscall_exit
| | | | 0xfff8e90bd4c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff8e84f33c
| | | | 0xfff8e84f55c
| | | | (nil)
| | | |
| | | --48.63%-- .do_filp_open
| | | .do_sys_open
| | | syscall_exit
| | | 0xfff8e909c7c
| | | .testcase
| | | .affinitize
| | | .new_task
| | | .main
| | | 0xfff8e84f33c
| | | 0xfff8e84f55c
| | | (nil)
| | |
| | --28.38%-- .path_walk
| | |
| | |--50.49%-- .do_filp_open
| | | .do_sys_open
| | | syscall_exit
| | | 0xfff8e909c7c
| | | .testcase
| | | .affinitize
| | | .new_task
| | | .main
| | | 0xfff8e84f33c
| | | 0xfff8e84f55c
| | | (nil)
| | |
| | --49.51%-- .do_path_lookup
| | .user_path_parent
| | .do_unlinkat
| | syscall_exit
| | 0xfff8e90bd4c
| | .testcase
| | .affinitize
| | .new_task
| | .main
| | 0xfff8e84f33c
| | 0xfff8e84f55c
| | (nil)
| |
| |--49.58%-- .dput
| | (nil)
| | |
| | |--64.21%-- .path_put
| | | |
| | | |--48.48%-- .path_walk
| | | | |
| | | | |--51.00%-- .do_path_lookup
| | | | | .user_path_parent
| | | | | .do_unlinkat
| | | | | syscall_exit
| | | | | 0xfff8e90bd4c
| | | | | .testcase
| | | | | .affinitize
| | | | | .new_task
| | | | | .main
| | | | | 0xfff8e84f33c
| | | | | 0xfff8e84f55c
| | | | | (nil)
| | | | |
| | | | --49.00%-- .do_filp_open
| | | | .do_sys_open
| | | | syscall_exit
| | | | 0xfff8e909c7c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff8e84f33c
| | | | 0xfff8e84f55c
| | | | (nil)
| | | |
| | | |--25.79%-- .do_filp_open
| | | | .do_sys_open
| | | | syscall_exit
| | | | 0xfff8e909c7c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff8e84f33c
| | | | 0xfff8e84f55c
| | | | (nil)
| | | |
| | | |--25.72%-- .do_path_lookup
| | | | .user_path_parent
| | | | .do_unlinkat
| | | | syscall_exit
| | | | 0xfff8e90bd4c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff8e84f33c
| | | | 0xfff8e84f55c
| | | | (nil)
| | | --0.00%-- [...]
| | |
| | |--35.78%-- .__link_path_walk
| | | .path_walk
| | | |
| | | |--50.81%-- .do_path_lookup
| | | | .user_path_parent
| | | | .do_unlinkat
| | | | syscall_exit
| | | | 0xfff8e90bd4c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff8e84f33c
| | | | 0xfff8e84f55c
| | | | (nil)
| | | |
| | | --49.19%-- .do_filp_open
| | | .do_sys_open
| | | syscall_exit
| | | 0xfff8e909c7c
| | | .testcase
| | | .affinitize
| | | .new_task
| | | .main
| | | 0xfff8e84f33c
| | | 0xfff8e84f55c
| | | (nil)
| | --0.01%-- [...]
| --0.62%-- [...]
--0.02%-- [...]
# Samples: 101253
#
# Overhead Command Shared Object Symbol
# ........ ............... ................................. ......
#
 99.15% unlink2_process [kernel] [k] ._spin_lock
|
|--99.97%-- ._spin_lock
| |
| |--49.96%-- .dput
| | (nil)
| | |
| | |--71.64%-- .__link_path_walk
| | | .path_walk
| | | |
| | | |--50.78%-- .do_path_lookup
| | | | .user_path_parent
| | | | .do_unlinkat
| | | | syscall_exit
| | | | 0xfff86a85d4c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff869c933c
| | | | 0xfff869c955c
| | | | (nil)
| | | |
| | | --49.22%-- .do_filp_open
| | | .do_sys_open
| | | syscall_exit
| | | 0xfff86a83c7c
| | | .testcase
| | | .affinitize
| | | .new_task
| | | .main
| | | 0xfff869c933c
| | | 0xfff869c955c
| | | (nil)
| | |
| | |--28.35%-- .path_put
| | | |
| | | |--50.91%-- .path_walk
| | | | |
| | | | |--53.90%-- .do_path_lookup
| | | | | .user_path_parent
| | | | | .do_unlinkat
| | | | | syscall_exit
| | | | | 0xfff86a85d4c
| | | | | .testcase
| | | | | .affinitize
| | | | | .new_task
| | | | | .main
| | | | | 0xfff869c933c
| | | | | 0xfff869c955c
| | | | | (nil)
| | | | |
| | | | --46.10%-- .do_filp_open
| | | | .do_sys_open
| | | | syscall_exit
| | | | 0xfff86a83c7c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff869c933c
| | | | 0xfff869c955c
| | | | (nil)
| | | |
| | | |--25.98%-- .do_filp_open
| | | | .do_sys_open
| | | | syscall_exit
| | | | 0xfff86a83c7c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff869c933c
| | | | 0xfff869c955c
| | | | (nil)
| | | |
| | | |--23.10%-- .do_path_lookup
| | | | .user_path_parent
| | | | .do_unlinkat
| | | | syscall_exit
| | | | 0xfff86a85d4c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff869c933c
| | | | 0xfff869c955c
| | | | (nil)
| | | --0.01%-- [...]
| | --0.01%-- [...]
| |
| |--28.88%-- .__follow_mount
| | (nil)
| | .do_lookup
| | .__link_path_walk
| | .path_walk
| | |
| | |--50.26%-- .do_filp_open
| | | .do_sys_open
| | | syscall_exit
| | | 0xfff86a83c7c
| | | .testcase
| | | .affinitize
| | | .new_task
| | | .main
| | | 0xfff869c933c
| | | 0xfff869c955c
| | | (nil)
| | |
| | --49.74%-- .do_path_lookup
| | .user_path_parent
| | .do_unlinkat
| | syscall_exit
| | 0xfff86a85d4c
| | .testcase
| | .affinitize
| | .new_task
| | .main
| | 0xfff869c933c
| | 0xfff869c955c
| | (nil)
| |
| |--20.33%-- .path_get
| | (nil)
| | |
| | |--69.39%-- .path_init
| | | |
| | | |--50.78%-- .do_path_lookup
| | | | .user_path_parent
| | | | .do_unlinkat
| | | | syscall_exit
| | | | 0xfff86a85d4c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff869c933c
| | | | 0xfff869c955c
| | | | (nil)
| | | |
| | | --49.22%-- .do_filp_open
| | | .do_sys_open
| | | syscall_exit
| | | 0xfff86a83c7c
| | | .testcase
| | | .affinitize
| | | .new_task
| | | .main
| | | 0xfff869c933c
| | | 0xfff869c955c
| | | (nil)
| | |
| | --30.61%-- .path_walk
| | |
| | |--53.29%-- .do_filp_open
| | | .do_sys_open
| | | syscall_exit
| | | 0xfff86a83c7c
| | | .testcase
| | | .affinitize
| | | .new_task
| | | .main
| | | 0xfff869c933c
| | | 0xfff869c955c
| | | (nil)
| | |
| | --46.71%-- .do_path_lookup
| | .user_path_parent
| | .do_unlinkat
| | syscall_exit
| | 0xfff86a85d4c
| | .testcase
| | .affinitize
| | .new_task
| | .main
| | 0xfff869c933c
| | 0xfff869c955c
| | (nil)
| --0.83%-- [...]
--0.03%-- [...]