@@ -152,20 +152,26 @@ typedef struct zio_stats {
152
152
kstat_named_t ziostat_alloc_class_fallbacks ;
153
153
kstat_named_t ziostat_gang_writes ;
154
154
kstat_named_t ziostat_gang_multilevel ;
155
+ kstat_named_t ziostat_zio_total ;
156
+ kstat_named_t ziostat_zio_bp_total ;
155
157
} zio_stats_t ;
156
158
157
159
static zio_stats_t zio_stats = {
158
160
{ "total_allocations" , KSTAT_DATA_UINT64 },
159
161
{ "alloc_class_fallbacks" , KSTAT_DATA_UINT64 },
160
162
{ "gang_writes" , KSTAT_DATA_UINT64 },
161
163
{ "gang_multilevel" , KSTAT_DATA_UINT64 },
164
+ { "zio_total" , KSTAT_DATA_UINT64 },
165
+ { "zio_bp_total" , KSTAT_DATA_UINT64 },
162
166
};
163
167
164
168
struct {
165
169
wmsum_t ziostat_total_allocations ;
166
170
wmsum_t ziostat_alloc_class_fallbacks ;
167
171
wmsum_t ziostat_gang_writes ;
168
172
wmsum_t ziostat_gang_multilevel ;
173
+ wmsum_t ziostat_zio_total ;
174
+ wmsum_t ziostat_zio_bp_total ;
169
175
} ziostat_sums ;
170
176
171
177
#define ZIOSTAT_BUMP (stat ) wmsum_add(&ziostat_sums.stat, 1);
@@ -191,6 +197,10 @@ zio_kstats_update(kstat_t *ksp, int rw)
191
197
wmsum_value (& ziostat_sums .ziostat_gang_writes );
192
198
zs -> ziostat_gang_multilevel .value .ui64 =
193
199
wmsum_value (& ziostat_sums .ziostat_gang_multilevel );
200
+ zs -> ziostat_zio_total .value .ui64 =
201
+ wmsum_value (& ziostat_sums .ziostat_zio_total );
202
+ zs -> ziostat_zio_bp_total .value .ui64 =
203
+ wmsum_value (& ziostat_sums .ziostat_zio_bp_total );
194
204
return (0 );
195
205
}
196
206
@@ -210,6 +220,8 @@ zio_init(void)
210
220
wmsum_init (& ziostat_sums .ziostat_alloc_class_fallbacks , 0 );
211
221
wmsum_init (& ziostat_sums .ziostat_gang_writes , 0 );
212
222
wmsum_init (& ziostat_sums .ziostat_gang_multilevel , 0 );
223
+ wmsum_init (& ziostat_sums .ziostat_zio_total , 0 );
224
+ wmsum_init (& ziostat_sums .ziostat_zio_bp_total , 0 );
213
225
zio_ksp = kstat_create ("zfs" , 0 , "zio_stats" ,
214
226
"misc" , KSTAT_TYPE_NAMED , sizeof (zio_stats ) /
215
227
sizeof (kstat_named_t ), KSTAT_FLAG_VIRTUAL );
@@ -355,6 +367,8 @@ zio_fini(void)
355
367
wmsum_fini (& ziostat_sums .ziostat_alloc_class_fallbacks );
356
368
wmsum_fini (& ziostat_sums .ziostat_gang_writes );
357
369
wmsum_fini (& ziostat_sums .ziostat_gang_multilevel );
370
+ wmsum_fini (& ziostat_sums .ziostat_zio_total );
371
+ wmsum_fini (& ziostat_sums .ziostat_zio_bp_total );
358
372
359
373
kmem_cache_destroy (zio_bp_cache );
360
374
kmem_cache_destroy (zio_link_cache );
@@ -969,6 +983,7 @@ zio_create(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp,
969
983
IMPLY (lsize != psize , (flags & ZIO_FLAG_RAW_COMPRESS ) != 0 );
970
984
971
985
zio = kmem_cache_alloc (zio_cache , KM_SLEEP );
986
+ ZIOSTAT_BUMP (ziostat_zio_total );
972
987
memset (zio , 0 , sizeof (zio_t ));
973
988
974
989
mutex_init (& zio -> io_lock , NULL , MUTEX_NOLOCKDEP , NULL );
@@ -994,6 +1009,7 @@ zio_create(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp,
994
1009
zio -> io_child_type == ZIO_CHILD_DDT ) {
995
1010
zio -> io_bp_copy =
996
1011
kmem_cache_alloc (zio_bp_cache , KM_SLEEP );
1012
+ ZIOSTAT_BUMP (ziostat_zio_bp_total );
997
1013
* zio -> io_bp_copy = * bp ;
998
1014
zio -> io_bp = zio -> io_bp_copy ; /* so caller can free */
999
1015
} else {
@@ -1003,6 +1019,7 @@ zio_create(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp,
1003
1019
zio -> io_child_type != ZIO_CHILD_VDEV ) {
1004
1020
zio -> io_bp_orig =
1005
1021
kmem_cache_alloc (zio_bp_cache , KM_SLEEP );
1022
+ ZIOSTAT_BUMP (ziostat_zio_bp_total );
1006
1023
* zio -> io_bp_orig = * bp ;
1007
1024
}
1008
1025
if (zio -> io_child_type == ZIO_CHILD_LOGICAL )
@@ -1083,6 +1100,7 @@ zio_force_bp(zio_t *zio, const blkptr_t *bp)
1083
1100
ASSERT3U (zio -> io_stage , = = , ZIO_STAGE_DONE );
1084
1101
ASSERT0P (zio -> io_bp_copy );
1085
1102
zio -> io_bp_copy = kmem_cache_alloc (zio_bp_cache , KM_SLEEP );
1103
+ ZIOSTAT_BUMP (ziostat_zio_bp_total );
1086
1104
* zio -> io_bp_copy = * bp ;
1087
1105
zio -> io_bp = zio -> io_bp_copy ;
1088
1106
}
@@ -5343,6 +5361,7 @@ zio_ready(zio_t *zio)
5343
5361
zio -> io_bp_copy =
5344
5362
kmem_cache_alloc (zio_bp_cache , KM_SLEEP );
5345
5363
* zio -> io_bp_copy = * bp ;
5364
+ /* Not bumping ziostat_zio_bp_total for debug. */
5346
5365
}
5347
5366
#endif
5348
5367
0 commit comments