Re: Latest vfs scalability patch

Anton Blanchard
2009-10-15T11:26:58Z

[-- Attachment #1: Type: text/plain, Size: 744 bytes --]

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

[-- Attachment #2: open_unlink.profile --]
[-- Type: text/plain, Size: 10567 bytes --]

# 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%-- [...]

[-- Attachment #3: open_unlink_directories.profile --]
[-- Type: text/plain, Size: 12730 bytes --]

# Samples: 101253
#
# Overhead Command Shared Object Symbol
# ........ ............... ................................. ......
#
^[[31m 99.15%^[[m unlink2_process [kernel] [k] ._spin_lock
|
|^[[31m--99.97%-- ^[[m._spin_lock
| |
| |^[[31m--49.96%-- ^[[m.dput
| | (nil)
| | |
| | |^[[31m--71.64%-- ^[[m.__link_path_walk
| | | .path_walk
| | | |
| | | |^[[31m--50.78%-- ^[[m.do_path_lookup
| | | | .user_path_parent
| | | | .do_unlinkat
| | | | syscall_exit
| | | | 0xfff86a85d4c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff869c933c
| | | | 0xfff869c955c
| | | | (nil)
| | | |
| | | ^[[31m--49.22%-- ^[[m.do_filp_open
| | | .do_sys_open
| | | syscall_exit
| | | 0xfff86a83c7c
| | | .testcase
| | | .affinitize
| | | .new_task
| | | .main
| | | 0xfff869c933c
| | | 0xfff869c955c
| | | (nil)
| | |
| | |^[[31m--28.35%-- ^[[m.path_put
| | | |
| | | |^[[31m--50.91%-- ^[[m.path_walk
| | | | |
| | | | |^[[31m--53.90%-- ^[[m.do_path_lookup
| | | | | .user_path_parent
| | | | | .do_unlinkat
| | | | | syscall_exit
| | | | | 0xfff86a85d4c
| | | | | .testcase
| | | | | .affinitize
| | | | | .new_task
| | | | | .main
| | | | | 0xfff869c933c
| | | | | 0xfff869c955c
| | | | | (nil)
| | | | |
| | | | ^[[31m--46.10%-- ^[[m.do_filp_open
| | | | .do_sys_open
| | | | syscall_exit
| | | | 0xfff86a83c7c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff869c933c
| | | | 0xfff869c955c
| | | | (nil)
| | | |
| | | |^[[31m--25.98%-- ^[[m.do_filp_open
| | | | .do_sys_open
| | | | syscall_exit
| | | | 0xfff86a83c7c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff869c933c
| | | | 0xfff869c955c
| | | | (nil)
| | | |
| | | |^[[31m--23.10%-- ^[[m.do_path_lookup
| | | | .user_path_parent
| | | | .do_unlinkat
| | | | syscall_exit
| | | | 0xfff86a85d4c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff869c933c
| | | | 0xfff869c955c
| | | | (nil)
| | | --0.01%-- [...]
| | --0.01%-- [...]
| |
| |^[[31m--28.88%-- ^[[m.__follow_mount
| | (nil)
| | .do_lookup
| | .__link_path_walk
| | .path_walk
| | |
| | |^[[31m--50.26%-- ^[[m.do_filp_open
| | | .do_sys_open
| | | syscall_exit
| | | 0xfff86a83c7c
| | | .testcase
| | | .affinitize
| | | .new_task
| | | .main
| | | 0xfff869c933c
| | | 0xfff869c955c
| | | (nil)
| | |
| | ^[[31m--49.74%-- ^[[m.do_path_lookup
| | .user_path_parent
| | .do_unlinkat
| | syscall_exit
| | 0xfff86a85d4c
| | .testcase
| | .affinitize
| | .new_task
| | .main
| | 0xfff869c933c
| | 0xfff869c955c
| | (nil)
| |
| |^[[31m--20.33%-- ^[[m.path_get
| | (nil)
| | |
| | |^[[31m--69.39%-- ^[[m.path_init
| | | |
| | | |^[[31m--50.78%-- ^[[m.do_path_lookup
| | | | .user_path_parent
| | | | .do_unlinkat
| | | | syscall_exit
| | | | 0xfff86a85d4c
| | | | .testcase
| | | | .affinitize
| | | | .new_task
| | | | .main
| | | | 0xfff869c933c
| | | | 0xfff869c955c
| | | | (nil)
| | | |
| | | ^[[31m--49.22%-- ^[[m.do_filp_open
| | | .do_sys_open
| | | syscall_exit
| | | 0xfff86a83c7c
| | | .testcase
| | | .affinitize
| | | .new_task
| | | .main
| | | 0xfff869c933c
| | | 0xfff869c955c
| | | (nil)
| | |
| | ^[[31m--30.61%-- ^[[m.path_walk
| | |
| | |^[[31m--53.29%-- ^[[m.do_filp_open
| | | .do_sys_open
| | | syscall_exit
| | | 0xfff86a83c7c
| | | .testcase
| | | .affinitize
| | | .new_task
| | | .main
| | | 0xfff869c933c
| | | 0xfff869c955c
| | | (nil)
| | |
| | ^[[31m--46.71%-- ^[[m.do_path_lookup
| | .user_path_parent
| | .do_unlinkat
| | syscall_exit
| | 0xfff86a85d4c
| | .testcase
| | .affinitize
| | .new_task
| | .main
| | 0xfff869c933c
| | 0xfff869c955c
| | (nil)
| ^[[32m--0.83%-- ^[[m[...]
--0.03%-- …