Project

General

Profile

Bug #7606

dmu_objset_find_dp() takes a long time while importing pool

Added by Prakash Surya almost 3 years ago. Updated almost 3 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
zfs - Zettabyte File System
Start date:
2016-11-21
Due date:
% Done:

100%

Estimated time:
Difficulty:
Medium
Tags:
needs-triage

Description

When importing a pool with a large number of filesystems within the same
parent filesystem, we see that dmu_objset_find_dp() takes a long time.
It is called from 3 places: spa_check_logs(), spa_ld_claim_log_blocks(),
and spa_load_verify().

There are several ways to improve performance here:

1. We don't really need to do spa_check_logs() or
spa_ld_claim_log_blocks() if the pool was closed cleanly.
2. spa_load_verify() uses dmu_objset_find_dp() to check that no
datasets have too long of names.
3. dmu_objset_find_dp() is slow because it's doing
zap_value_search() (which is O(N sibling datasets)) to determine
the name of each dsl_dir when it's opened. In this case we
actually know the name when we are opening it, so we can provide
it and avoid the lookup.
This change implements fix #3 from the above list; i.e. make
dmu_objset_find_dp() provide the name of the dataset so that we don't
have to search for it.

History

#1

Updated by Electric Monk almost 3 years ago

  • % Done changed from 0 to 100
  • Status changed from New to Closed

git commit 7588687e6ba67c47bf7c9805086dec4a97fcac7b

commit  7588687e6ba67c47bf7c9805086dec4a97fcac7b
Author: Matthew Ahrens <mahrens@delphix.com>
Date:   2016-11-30T20:51:54.000Z

    7606 dmu_objset_find_dp() takes a long time while importing pool
    Reviewed by: Steve Gonczi <steve.gonczi@delphix.com>
    Reviewed by: George Wilson <george.wilson@delphix.com>
    Reviewed by: Prashanth Sreenivasa <prashksp@gmail.com>
    Approved by: Gordon Ross <gordon.w.ross@gmail.com>

Also available in: Atom PDF