summaryrefslogtreecommitdiffstats
path: root/cmd/arcstat/arcstat.py
diff options
context:
space:
mode:
authorJinshan Xiong <[email protected]>2016-09-21 13:49:47 -0700
committerBrian Behlendorf <[email protected]>2016-10-07 09:45:13 -0700
commit9b7a83cbb6cae54c127fde4c83e73505ad9c9e73 (patch)
tree1b6d67d481b0bd4a9e2b36af04ad95d96485516b /cmd/arcstat/arcstat.py
parent1de321e6260f5b83eb943b6ce2166a3879f42df4 (diff)
OpenZFS 6988 spa_sync() spends half its time in dmu_objset_do_userquota_updates
Using a benchmark which creates 2 million files in one TXG, I observe that the thread running spa_sync() is on CPU almost the entire time we are syncing, and therefore can be a performance bottleneck. About 50% of the time in spa_sync() is in dmu_objset_do_userquota_updates(). The problem is that dmu_objset_do_userquota_updates() calls zap_increment_int(DMU_USERUSED_OBJECT) once for every file that was modified (or created). In this benchmark, all the files are owned by the same user/group, so all 2 million calls to zap_increment_int() are modifying the same entry in the zap. The same issue exists for the DMU_GROUPUSED_OBJECT. We should keep an in-memory map from user to space delta while we are syncing, and when we finish, iterate over the in-memory map and modify the ZAP once per entry. This reduces the number of calls to zap_increment_int() from "number of objects modified" to "number of owners/groups of modified files". This reduced the time spent in spa_sync() in the file create benchmark by ~33%, from 11 seconds to 7 seconds. Upstream bugs: DLPX-44799 Ported by: Ned Bass <[email protected]> OpenZFS-issue: https://www.illumos.org/issues/6988 ZFSonLinux-issue: https://github.com/zfsonlinux/zfs/issues/4642 OpenZFS-commit: unmerged Porting notes: - Added curly braces around declaration of userquota_cache_t cache to quiet compiler warning; - Handled the userobj accounting the same way it proposed in this path. Signed-off-by: Jinshan Xiong <[email protected]>
Diffstat (limited to 'cmd/arcstat/arcstat.py')
0 files changed, 0 insertions, 0 deletions