mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-23 02:44:41 +03:00
Add new kstat for monitoring time in dmu_tx_assign
This change adds a new kstat to gain some visibility into the amount of
time spent in each call to dmu_tx_assign. A histogram is exported via
a new dmu_tx_assign_histogram-$POOLNAME file. The information contained
in this histogram is the frequency dmu_tx_assign took to complete given
an interval range. For example, given the below histogram file:
$ cat /proc/spl/kstat/zfs/dmu_tx_assign_histogram-tank
12 1 0x01 32 1536 19792068076691 20516481514522
name type data
1 us 4 859
2 us 4 252
4 us 4 171
8 us 4 2
16 us 4 0
32 us 4 2
64 us 4 0
128 us 4 0
256 us 4 0
512 us 4 0
1024 us 4 0
2048 us 4 0
4096 us 4 0
8192 us 4 0
16384 us 4 0
32768 us 4 1
65536 us 4 1
131072 us 4 1
262144 us 4 4
524288 us 4 0
1048576 us 4 0
2097152 us 4 0
4194304 us 4 0
8388608 us 4 0
16777216 us 4 0
33554432 us 4 0
67108864 us 4 0
134217728 us 4 0
268435456 us 4 0
536870912 us 4 0
1073741824 us 4 0
2147483648 us 4 0
one can see most calls to dmu_tx_assign completed in 32us or less, but a
few outliers did not. Specifically, 4 of the calls took between 262144us
and 131072us. This information is difficult, if not impossible, to gather
without this change.
Signed-off-by: Prakash Surya <surya1@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #1584
This commit is contained in:
committed by
Brian Behlendorf
parent
bf89c19914
commit
92334b14ec
@@ -89,6 +89,7 @@ typedef struct dsl_pool {
|
||||
uint64_t dp_root_dir_obj;
|
||||
struct taskq *dp_iput_taskq;
|
||||
kstat_t *dp_txg_kstat;
|
||||
kstat_t *dp_tx_assign_kstat;
|
||||
|
||||
/* No lock needed - sync context only */
|
||||
blkptr_t dp_meta_rootbp;
|
||||
@@ -111,6 +112,8 @@ typedef struct dsl_pool {
|
||||
uint64_t dp_mos_uncompressed_delta;
|
||||
uint64_t dp_txg_history_size;
|
||||
list_t dp_txg_history;
|
||||
uint64_t dp_tx_assign_size;
|
||||
kstat_named_t *dp_tx_assign_buckets;
|
||||
|
||||
|
||||
/* Has its own locking */
|
||||
@@ -162,6 +165,8 @@ extern int dsl_pool_user_release(dsl_pool_t *dp, uint64_t dsobj,
|
||||
extern void dsl_pool_clean_tmp_userrefs(dsl_pool_t *dp);
|
||||
int dsl_pool_open_special_dir(dsl_pool_t *dp, const char *name, dsl_dir_t **);
|
||||
|
||||
void dsl_pool_tx_assign_add_usecs(dsl_pool_t *dp, uint64_t usecs);
|
||||
|
||||
txg_history_t *dsl_pool_txg_history_add(dsl_pool_t *dp, uint64_t txg);
|
||||
txg_history_t *dsl_pool_txg_history_get(dsl_pool_t *dp, uint64_t txg);
|
||||
void dsl_pool_txg_history_put(txg_history_t *th);
|
||||
|
||||
Reference in New Issue
Block a user