|
Description
|
zdb(1M) should take a new option, '-S', to display blkptr signatures, such as:
heavy# zdb -SS bigIO
0 8 7 512 0:0:0:0 3
0 8 7 512 0:0:0:0 3
0 8 7 512 0:0:0:0 3
0 11 7 512 b3f8e66e7:42045f7cf1c:c7548b48ced9:19c6e6bf11cb73 3
0 10 7 5120 13a31f0bb95:35c329dae9c71:5b0c77808d7d6c2:2f19464669f73e0f 3
0 10 7 4608 13b2209a295:2e9cc4c3f463f:4647c570afedfac:ee230a1ed862dc1d 3
...
Where the columns represent: level, type, checksum algorithm, PSIZE, actual checksum, and
number of DVAs.
Better yet and in addition, we can add a stable USDT probe (zdb:::bp-signature) that would
have a blkptr_t* as its argument. Then users can utilize aggregations to better parse
the data.
For example, you could use the USDT probe to display the total size of user data and the
relevant blkptr signatures of just user data, such as (this is on a very simple pool):
heavy# dtrace -ZCs user_dedup.d -q -c 'zdb -S bigIO'
4096
3 0 19 6 512 a6b6a65:0:14d6d4ca0:0
2 0 19 6 512 a736569706f63:0:14e6cad2e0dec60:0
1 0 19 6 1024 0:0:0:0
1 0 19 6 512 6720736569706f63:a7975:e40e6cad2e0dec60:14f2ea0
heavy#
Where the tabbed separated columns represent count (same signatures), level, type, checksum
algorithm, PSIZE, checksum. For example, the first row tells us that we have three of the
exact same bkptr signatures.
Users can then parse that information further to do interesting things...
Turns out using dtrace isn't a good solution - for large pools, its just too memory
intensive.
So we'll just have zdb print out the signatures.
|