On 2/1/22 06:13, Niklas Cassel wrote: > From: Niklas Cassel <niklas.cassel@xxxxxxx> > > Add two new test cases for the new cmdprio_bssplit format. > > While at it, fixup some small typos in the existing code. > > Signed-off-by: Niklas Cassel <niklas.cassel@xxxxxxx> > --- > t/latency_percentiles.py | 93 ++++++++++++++++++++++++++++++++-------- > 1 file changed, 75 insertions(+), 18 deletions(-) > > diff --git a/t/latency_percentiles.py b/t/latency_percentiles.py > index 62c4cc91..9e37d9fe 100755 > --- a/t/latency_percentiles.py > +++ b/t/latency_percentiles.py > @@ -126,7 +126,8 @@ class FioLatTest(): > "--output-format={output-format}".format(**self.test_options), > ] > for opt in ['slat_percentiles', 'clat_percentiles', 'lat_percentiles', > - 'unified_rw_reporting', 'fsync', 'fdatasync', 'numjobs', 'cmdprio_percentage']: > + 'unified_rw_reporting', 'fsync', 'fdatasync', 'numjobs', > + 'cmdprio_percentage', 'bssplit', 'cmdprio_bssplit']: > if opt in self.test_options: > option = '--{0}={{{0}}}'.format(opt) > fio_args.append(option.format(**self.test_options)) > @@ -761,7 +762,7 @@ class Test008(FioLatTest): > job = self.json_data['jobs'][0] > > retval = True > - if 'read' in job or 'write'in job or 'trim' in job: > + if 'read' in job or 'write' in job or 'trim' in job: > print("Unexpected data direction found in fio output") > retval = False > if not self.check_nocmdprio_lat(job): > @@ -953,7 +954,7 @@ class Test019(FioLatTest): > job = self.json_data['jobs'][0] > > retval = True > - if 'read' in job or 'write'in job or 'trim' in job: > + if 'read' in job or 'write' in job or 'trim' in job: > print("Unexpected data direction found in fio output") > retval = False > > @@ -963,6 +964,27 @@ class Test019(FioLatTest): > return retval > > > +class Test021(FioLatTest): > + """Test object for Test 21.""" > + > + def check(self): > + """Check Test 21 output.""" > + > + job = self.json_data['jobs'][0] > + > + retval = True > + if not self.check_empty(job['trim']): > + print("Unexpected trim data found in output") > + retval = False > + > + retval &= self.check_latencies(job['read'], 0, slat=False, tlat=False, plus=True) > + retval &= self.check_latencies(job['write'], 1, slat=False, tlat=False, plus=True) > + retval &= self.check_prio_latencies(job['read'], clat=True, plus=True) > + retval &= self.check_prio_latencies(job['write'], clat=True, plus=True) > + > + return retval > + > + > def parse_args(): > """Parse command-line arguments.""" > > @@ -1007,7 +1029,7 @@ def main(): > # randread, null > # enable slat, clat, lat > # only clat and lat will appear because > - # because the null ioengine is syncrhonous > + # because the null ioengine is synchronous > "test_id": 1, > "runtime": 2, > "output-format": "json", > @@ -1047,7 +1069,7 @@ def main(): > { > # randread, aio > # enable slat, clat, lat > - # all will appear because liaio is asynchronous > + # all will appear because libaio is asynchronous > "test_id": 4, > "runtime": 5, > "output-format": "json+", > @@ -1153,9 +1175,9 @@ def main(): > # randread, null > # enable slat, clat, lat > # only clat and lat will appear because > - # because the null ioengine is syncrhonous > - # same as Test 1 except > - # numjobs = 4 to test sum_thread_stats() changes > + # because the null ioengine is synchronous > + # same as Test 1 except add numjobs = 4 to test > + # sum_thread_stats() changes > "test_id": 12, > "runtime": 2, > "output-format": "json", > @@ -1170,9 +1192,9 @@ def main(): > { > # randread, aio > # enable slat, clat, lat > - # all will appear because liaio is asynchronous > - # same as Test 4 except > - # numjobs = 4 to test sum_thread_stats() changes > + # all will appear because libaio is asynchronous > + # same as Test 4 except add numjobs = 4 to test > + # sum_thread_stats() changes > "test_id": 13, > "runtime": 5, > "output-format": "json+", > @@ -1187,8 +1209,8 @@ def main(): > { > # 50/50 r/w, aio, unified_rw_reporting > # enable slat, clat, lata > - # same as Test 8 except > - # numjobs = 4 to test sum_thread_stats() changes > + # same as Test 8 except add numjobs = 4 to test > + # sum_thread_stats() changes > "test_id": 14, > "runtime": 5, > "output-format": "json+", > @@ -1204,7 +1226,7 @@ def main(): > { > # randread, aio > # enable slat, clat, lat > - # all will appear because liaio is asynchronous > + # all will appear because libaio is asynchronous > # same as Test 4 except add cmdprio_percentage > "test_id": 15, > "runtime": 5, > @@ -1278,8 +1300,8 @@ def main(): > { > # 50/50 r/w, aio, unified_rw_reporting > # enable slat, clat, lat > - # same as Test 19 except > - # add numjobs = 4 to test sum_thread_stats() changes > + # same as Test 19 except add numjobs = 4 to test > + # sum_thread_stats() changes > "test_id": 20, > "runtime": 5, > "output-format": "json+", > @@ -1293,6 +1315,40 @@ def main(): > 'numjobs': 4, > "test_obj": Test019, > }, > + { > + # r/w, aio > + # enable only clat > + # test bssplit and cmdprio_bssplit > + "test_id": 21, > + "runtime": 5, > + "output-format": "json+", > + "slat_percentiles": 0, > + "clat_percentiles": 1, > + "lat_percentiles": 0, > + "ioengine": aio, > + 'rw': 'randrw', > + 'bssplit': '64k/40:1024k/60', > + 'cmdprio_bssplit': '64k/25/1/1:64k/75/3/2:1024k/0', > + "test_obj": Test021, > + }, > + { > + # r/w, aio > + # enable only clat > + # same as Test 21 except add numjobs = 4 to test > + # sum_thread_stats() changes > + "test_id": 22, > + "runtime": 5, > + "output-format": "json+", > + "slat_percentiles": 0, > + "clat_percentiles": 1, > + "lat_percentiles": 0, > + "ioengine": aio, > + 'rw': 'randrw', > + 'bssplit': '64k/40:1024k/60', > + 'cmdprio_bssplit': '64k/25/1/1:64k/75/3/2:1024k/0', > + 'numjobs': 4, > + "test_obj": Test021, > + }, > ] > > passed = 0 > @@ -1304,9 +1360,10 @@ def main(): > (args.run_only and test['test_id'] not in args.run_only): > skipped = skipped + 1 > outcome = 'SKIPPED (User request)' > - elif (platform.system() != 'Linux' or os.geteuid() != 0) and 'cmdprio_percentage' in test: > + elif (platform.system() != 'Linux' or os.geteuid() != 0) and \ > + ('cmdprio_percentage' in test or 'cmdprio_bssplit' in test): > skipped = skipped + 1 > - outcome = 'SKIPPED (Linux root required for cmdprio_percentage tests)' > + outcome = 'SKIPPED (Linux root required for cmdprio tests)' > else: > test_obj = test['test_obj'](artifact_root, test, args.debug) > status = test_obj.run_fio(fio) Reviewed-by: Damien Le Moal <damien.lemoal@xxxxxxxxxxxxxxxxxx> -- Damien Le Moal Western Digital Research