Hi,
In current implementation Zoned block device issues one bio at a time
based on the range of the offset and zones specified from userspace
tools like blkzone. Worst case scenario it will issue N requests which
are equal to the number of the zones when the application wants to
reset the drive, e.g. mkfs.
Zone Block devices allow issuing zone reset all operation [1]
which can essentially reset all the available zones with only one
command.
This patch series introduces new REQ_OP_ZONE_RESET_ALL operation. Along
with that, we also introduce QUEUE_FLAG_ZONE_RESETALL (and respective
helpers) which is needed to be set by the low-level driver in order to
enable the REQ_OP_ZONE_RESET_ALL.
In this series we implement the REQ_OP_ZONE_RESET_ALL for sd and
null_blk block drivers.
Following is the performance difference measured for null_blk when
configured with 16TB size with zone size = 64MB for collecting
the overhead only for the Linux Block Layer. Please note that this
doesn't include any device overhead which will be additional on the
top of these numbers.
# modprobe null_blk zone_size=64 gb=16384 nr_devices=1 zoned=1
# for i in 1 2 3 4 5 ; do time blkzone reset /dev/nullb0 ; done
------------------------------------------------------
| Time | REQ_OP_ZONE_RESET | REQ_OP_ZONE_RESET_ALL |
------------------------------------------------------
| real | 0m4.622s| 0m0.014s|
| user | 0m0.000s| 0m0.000s|
| sys | 0m2.762s| 0m0.011s|
|---------------------------------------------------|
| real | 0m4.565s| 0m0.013s|
| user | 0m0.000s| 0m0.000s|
| sys | 0m2.729s| 0m0.010s|
|---------------------------------------------------|
| real | 0m4.536s| 0m0.013s|
| user | 0m0.001s| 0m0.000s|
| sys | 0m2.703s| 0m0.011s|
|---------------------------------------------------|
| real | 0m4.619s| 0m0.013s|
| user | 0m0.001s| 0m0.002s|
| sys | 0m2.759s| 0m0.009s|
|---------------------------------------------------|
| real | 0m4.529s| 0m0.012s|
| user | 0m0.002s| 0m0.000s|
| sys | 0m2.696s| 0m0.010s|
------------------------------------------------------
In case anyone is interested please have a look at the test log.
We mainly test 4 scenarios:-
1. TCMU-Runner REQ_OP_ZONE_RESET :-
Issue zone reset in reverse order and observe the zone report cmd
wptr. This scenario should translate into issuing N block layer
REQ_OP_ZONE_RESET requests. On success Zone write pointer values
should be set to 0x0 in the blkzone report command in the reverse
order.
(blkzone -o ${zone_start_offset} ${DEV})
2. TCMU-Runner REQ_OP_ZONE_RESET_ALL :-
Issue zone reset with the length of the device, this should translate
into the REQ_OP_ZONE_RESET_ALL and observe the zone report cmd wptr.
(blkzone reset ${DEV})
3. Test for null_blk REQ_OP_ZONE_RESET :-
Same as #1.
4. Test for null_blk REQ_OP_ZONE_RESET_ALL :-
Same as #2.
Chaitanya Kulkarni (4):
block: add req op to reset all zones and flag
blk-zoned: implement REQ_OP_ZONE_RESET_ALL
scsi: implement REQ_OP_ZONE_RESET_ALL
null_blk: implement REQ_OP_ZONE_RESET_ALL
block/blk-core.c | 5 +++++
block/blk-zoned.c | 40 ++++++++++++++++++++++++++++++++++
drivers/block/null_blk_main.c | 3 +++
drivers/block/null_blk_zoned.c | 28 +++++++++++++++++++-----
drivers/scsi/sd.c | 7 +++++-
drivers/scsi/sd.h | 5 +++--
drivers/scsi/sd_zbc.c | 9 ++++++--
include/linux/blk_types.h | 2 ++
include/linux/blkdev.h | 3 +++
9 files changed, 91 insertions(+), 11 deletions(-)
Following are the test results for the null_blk and tcmu-runner based
sd device :-
1. TCMU-Runner REQ_OP_ZONE_RESET:-
a. Populate the zones :-
# ./reset_all_test.sh /dev/sdd
dd if=/dev/zero of=/dev/sdd bs=4096 count=1 seek=0
dd if=/dev/zero of=/dev/sdd bs=4096 count=2 seek=32768
dd if=/dev/zero of=/dev/sdd bs=4096 count=4 seek=65536
dd if=/dev/zero of=/dev/sdd bs=4096 count=8 seek=98304
dd if=/dev/zero of=/dev/sdd bs=4096 count=16 seek=131072
dd if=/dev/zero of=/dev/sdd bs=4096 count=32 seek=163840
dd if=/dev/zero of=/dev/sdd bs=4096 count=64 seek=196608
dd if=/dev/zero of=/dev/sdd bs=4096 count=128 seek=229376
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000040 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000080 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000100 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000200 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000400 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
b. Now Issue zone reset (REQ_OP_ZONE_RESET) starting from the last zone to the
0rth and report zones :-
Starting REQ_OP_ZONE_RESET test :-
blkzone reset -o 1835008 /dev/sdd
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000040 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000080 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000100 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000200 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 7 :- REQ_OP_ZONE_RESET : Pass
---------------------------------------------------------------
blkzone reset -o 1572864 /dev/sdd
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000040 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000080 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000100 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 6 :- REQ_OP_ZONE_RESET : Pass
---------------------------------------------------------------
blkzone reset -o 1310720 /dev/sdd
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000040 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000080 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 5 :- REQ_OP_ZONE_RESET : Pass
---------------------------------------------------------------
blkzone reset -o 1048576 /dev/sdd
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000040 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 4 :- REQ_OP_ZONE_RESET : Pass
---------------------------------------------------------------
blkzone reset -o 786432 /dev/sdd
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 3 :- REQ_OP_ZONE_RESET : Pass
---------------------------------------------------------------
blkzone reset -o 524288 /dev/sdd
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 2 :- REQ_OP_ZONE_RESET : Pass
---------------------------------------------------------------
blkzone reset -o 262144 /dev/sdd
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 1 :- REQ_OP_ZONE_RESET : Pass
---------------------------------------------------------------
blkzone reset -o 0 /dev/sdd
start: 0x000000000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 0 :- REQ_OP_ZONE_RESET : Pass
---------------------------------------------------------------
2. TCMU-Runner REQ_OP_ZONE_RESET_ALL:-
a. Populate the zones :-
dd if=/dev/zero of=/dev/sdd bs=4096 count=1 seek=0
dd if=/dev/zero of=/dev/sdd bs=4096 count=2 seek=32768
dd if=/dev/zero of=/dev/sdd bs=4096 count=4 seek=65536
dd if=/dev/zero of=/dev/sdd bs=4096 count=8 seek=98304
dd if=/dev/zero of=/dev/sdd bs=4096 count=16 seek=131072
dd if=/dev/zero of=/dev/sdd bs=4096 count=32 seek=163840
dd if=/dev/zero of=/dev/sdd bs=4096 count=64 seek=196608
dd if=/dev/zero of=/dev/sdd bs=4096 count=128 seek=229376
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000040 reset:0 non-seq:0, zcond:
4(cl) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000080 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000100 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000200 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000400 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
-------------------------------------------------
b. Issue REQ_OP_ZONE_RESET_ALL and report :-
blkzone reset /dev/sdd
start: 0x000000000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
REQ_OP_ZONE_RESET_ALL : Pass
#
3. Test for null_blk (REQ_OP_ZONE_RESET) :-
a. Load the null_blk and populate the zones :-
# modprobe null_blk zoned=1 zone_size=128 gb=1 bs=4096
# ./reset_all_test.sh /dev/nullb0
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=1 seek=0
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=2 seek=32768
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=4 seek=65536
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=8 seek=98304
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=16 seek=131072
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=32 seek=163840
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=64 seek=196608
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=128 seek=229376
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000040 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000080 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000100 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000200 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000400 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
b. Now Issue zone reset (REQ_OP_ZONE_RESET) starting from the last zone to the
0rth and report zones :-
Starting REQ_OP_ZONE_RESET test :-
blkzone reset -o 1835008 /dev/nullb0
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000040 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000080 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000100 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000200 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 7 :- ---------------------------------------------------------------
blkzone reset -o 1572864 /dev/nullb0
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000040 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000080 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000100 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 6 :- ---------------------------------------------------------------
blkzone reset -o 1310720 /dev/nullb0
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000040 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000080 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 5 :- ---------------------------------------------------------------
blkzone reset -o 1048576 /dev/nullb0
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000040 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 4 :- ---------------------------------------------------------------
blkzone reset -o 786432 /dev/nullb0
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 3 :- ---------------------------------------------------------------
blkzone reset -o 524288 /dev/nullb0
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 2 :- ---------------------------------------------------------------
blkzone reset -o 262144 /dev/nullb0
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 1 :- ---------------------------------------------------------------
blkzone reset -o 0 /dev/nullb0
start: 0x000000000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
ZONEID 0 :- ---------------------------------------------------------------
4. Test for null_blk (REQ_OP_ZONE_RESET_ALL) :-
a. Populate the zones :-
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=1 seek=0
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=2 seek=32768
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=4 seek=65536
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=8 seek=98304
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=16 seek=131072
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=32 seek=163840
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=64 seek=196608
dd if=/dev/zero of=/dev/nullb0 bs=4096 count=128 seek=229376
start: 0x000000000, len 0x040000, wptr 0x000008 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000010 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000020 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000040 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000080 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000100 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000200 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000400 reset:0 non-seq:0, zcond:
2(oi) [type: 2(SEQ_WRITE_REQUIRED)]
-------------------------------------------------
b. Issue REQ_OP_ZONE_RESET_ALL and report :-
blkzone reset /dev/sdd
start: 0x000000000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000040000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000080000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0000c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000100000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000140000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x000180000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x0001c0000, len 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond:
1(em) [type: 2(SEQ_WRITE_REQUIRED)]
#
--
2.17.0