* random_generator=lfsr overhead with more disks?
@ 2018-03-13 19:23 Michael Green
2018-03-16 18:45 ` Jeff Furlong
0 siblings, 1 reply; 11+ messages in thread
From: Michael Green @ 2018-03-13 19:23 UTC (permalink / raw)
To: fio@vger.kernel.org
Hello collective wisdom,
First post here, apologize if this has been asked before and would appreciate appropriate pointers or tips how to search the archives more effectively.
I work for E8 Storage and been testing our product with FIO for quite some time now. I’ve encountered this interesting affect that random_generator=lfsr seems to have on the results. Would appreciate your thoughts.
Here are two jobs. Both are 4k 100 RR, attacking 1 volume. The first job is with lfsr, the second without.
[root@sm28 csv]# /opt/E8/bin/fio --name=global --thread=1 --direct=1 --group_reporting=1 --iomem_align=4k --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --size=450GiB --runtime=120 --filename='/dev/e8b0' --ioengine=libaio --numa_cpu_nodes=0 --random_generator=lfsr
PT7: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=40
...
fio-2.2.11
Starting 8 threads
Jobs: 8 (f=8): [r(8)] [100.0% done] [3774MB/0KB/0KB /s] [966K/0/0 iops] [eta 00m:00s]
PT7: (groupid=0, jobs=8): err= 0: pid=25976: Tue Mar 13 20:56:48 2018
read : io=447350MB, bw=3727.1MB/s, iops=954339, runt=120001msec
slat (usec): min=1, max=540, avg= 3.81, stdev= 4.14
clat (usec): min=46, max=4793, avg=330.67, stdev=76.39
lat (usec): min=50, max=4838, avg=334.65, stdev=76.47
[root@sm28 csv]# /opt/E8/bin/fio --name=global --thread=1 --direct=1 --group_reporting=1 --iomem_align=4k --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --size=450GiB --runtime=120 --filename='/dev/e8b0' --ioengine=libaio --numa_cpu_nodes=0
PT7: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=40
...
fio-2.2.11
Starting 8 threads
Jobs: 8 (f=8): [r(8)] [100.0% done] [3729MB/0KB/0KB /s] [955K/0/0 iops] [eta 00m:00s]
PT7: (groupid=0, jobs=8): err= 0: pid=18605: Tue Mar 13 20:17:27 2018
read : io=447243MB, bw=3726.2MB/s, iops=954110, runt=120001msec
slat (usec): min=1, max=629, avg= 3.73, stdev= 4.08
clat (usec): min=45, max=4327, avg=330.66, stdev=77.61
lat (usec): min=47, max=4329, avg=334.55, stdev=77.65
Now the same with 16 volumes. Notice how latency went up and IOPS down with lfsr generator:
[root@sm28 csv]# /opt/E8/bin/fio --name=global --thread=1 --direct=1 --group_reporting=1 --iomem_align=4k --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --size=450GiB --runtime=120
--filename='/dev/e8b0:/dev/e8b1:/dev/e8b2:/dev/e8b3:/dev/e8b4:/dev/e8b5:/dev/e8b6:/dev/e8b7:/dev/e8b8:/dev/e8b9:/dev/e8b10:/dev/e8b11:/dev/e8b12:/dev/e8b13:/dev/e8b14:/dev/e8b15' --ioengine=libaio --numa_cpu_nodes=0
PT7: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=40
...
fio-2.2.11
Starting 8 threads
Jobs: 8 (f=0): [r(8)] [12.7% done] [3641MB/0KB/0KB /s] [932K/0/0 iops] [eta 13m:50s] s]
PT7: (groupid=0, jobs=8): err= 0: pid=27644: Tue Mar 13 21:04:24 2018
read : io=443136MB, bw=3692.8MB/s, iops=945349, runt=120001msec
slat (usec): min=1, max=1409, avg= 4.41, stdev= 6.90
clat (usec): min=24, max=5222, avg=332.95, stdev=113.74
lat (usec): min=38, max=5250, avg=337.53, stdev=113.11
[root@sm28 csv]# /opt/E8/bin/fio --name=global --thread=1 --direct=1 --group_reporting=1 --iomem_align=4k --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --size=450GiB --runtime=120
--filename='/dev/e8b0:/dev/e8b1:/dev/e8b2:/dev/e8b3:/dev/e8b4:/dev/e8b5:/dev/e8b6:/dev/e8b7:/dev/e8b8:/dev/e8b9:/dev/e8b10:/dev/e8b11:/dev/e8b12:/dev/e8b13:/dev/e8b14:/dev/e8b15' --ioengine=libaio --numa_cpu_nodes=0 --random_generator=lfsr
PT7: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=40
...
fio-2.2.11
Starting 8 threads
Jobs: 8 (f=128): [r(8)] [100.0% done] [3199MB/0KB/0KB /s] [819K/0/0 iops] [eta 00m:00s]
PT7: (groupid=0, jobs=8): err= 0: pid=29711: Tue Mar 13 21:16:13 2018
read : io=382920MB, bw=3190.1MB/s, iops=816888, runt=120001msec
slat (usec): min=1, max=1069, avg= 3.77, stdev= 4.33
clat (usec): min=16, max=3593, avg=387.12, stdev=189.09
lat (usec): min=36, max=3613, avg=391.06, stdev=189.05
Between 1 and 16, I’ve tried 4, 8 and 12 volumes. The performance gradually worsens with LFSR as the number of volumes increases, but stays flat without LFSR.
--
Thanks,
Michael Green
^ permalink raw reply [flat|nested] 11+ messages in thread* RE: random_generator=lfsr overhead with more disks? 2018-03-13 19:23 random_generator=lfsr overhead with more disks? Michael Green @ 2018-03-16 18:45 ` Jeff Furlong 2018-03-16 21:16 ` Michael Green ` (2 more replies) 0 siblings, 3 replies; 11+ messages in thread From: Jeff Furlong @ 2018-03-16 18:45 UTC (permalink / raw) To: Michael Green, fio@vger.kernel.org A few comments: -How does the cpu utilization look compared between the lfsr and default tausworthe generators? Is the cpu util actually higher on lfsr? If it is near saturated on 16 devices, then naturally throughput would decrease. -It seems you are intentionally trying to write each block once. So not using the norandommap parameter. -Does a runtime of 2 minutes collect enough data points to assess the condition? What happens if you extend the runtime? Regards, Jeff -----Original Message----- From: fio-owner@vger.kernel.org [mailto:fio-owner@vger.kernel.org] On Behalf Of Michael Green Sent: Tuesday, March 13, 2018 12:24 PM To: fio@vger.kernel.org Subject: random_generator=lfsr overhead with more disks? Hello collective wisdom, First post here, apologize if this has been asked before and would appreciate appropriate pointers or tips how to search the archives more effectively. I work for E8 Storage and been testing our product with FIO for quite some time now. I’ve encountered this interesting affect that random_generator=lfsr seems to have on the results. Would appreciate your thoughts. Here are two jobs. Both are 4k 100 RR, attacking 1 volume. The first job is with lfsr, the second without. [root@sm28 csv]# /opt/E8/bin/fio --name=global --thread=1 --direct=1 --group_reporting=1 --iomem_align=4k --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --size=450GiB --runtime=120 --filename='/dev/e8b0' --ioengine=libaio --numa_cpu_nodes=0 --random_generator=lfsr PT7: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=40 ... fio-2.2.11 Starting 8 threads Jobs: 8 (f=8): [r(8)] [100.0% done] [3774MB/0KB/0KB /s] [966K/0/0 iops] [eta 00m:00s] PT7: (groupid=0, jobs=8): err= 0: pid=25976: Tue Mar 13 20:56:48 2018 read : io=447350MB, bw=3727.1MB/s, iops=954339, runt=120001msec slat (usec): min=1, max=540, avg= 3.81, stdev= 4.14 clat (usec): min=46, max=4793, avg=330.67, stdev=76.39 lat (usec): min=50, max=4838, avg=334.65, stdev=76.47 [root@sm28 csv]# /opt/E8/bin/fio --name=global --thread=1 --direct=1 --group_reporting=1 --iomem_align=4k --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --size=450GiB --runtime=120 --filename='/dev/e8b0' --ioengine=libaio --numa_cpu_nodes=0 PT7: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=40 ... fio-2.2.11 Starting 8 threads Jobs: 8 (f=8): [r(8)] [100.0% done] [3729MB/0KB/0KB /s] [955K/0/0 iops] [eta 00m:00s] PT7: (groupid=0, jobs=8): err= 0: pid=18605: Tue Mar 13 20:17:27 2018 read : io=447243MB, bw=3726.2MB/s, iops=954110, runt=120001msec slat (usec): min=1, max=629, avg= 3.73, stdev= 4.08 clat (usec): min=45, max=4327, avg=330.66, stdev=77.61 lat (usec): min=47, max=4329, avg=334.55, stdev=77.65 Now the same with 16 volumes. Notice how latency went up and IOPS down with lfsr generator: [root@sm28 csv]# /opt/E8/bin/fio --name=global --thread=1 --direct=1 --group_reporting=1 --iomem_align=4k --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --size=450GiB --runtime=120 --filename='/dev/e8b0:/dev/e8b1:/dev/e8b2:/dev/e8b3:/dev/e8b4:/dev/e8b5:/dev/e8b6:/dev/e8b7:/dev/e8b8:/dev/e8b9:/dev/e8b10:/dev/e8b11:/dev/e8b12:/dev/e8b13:/dev/e8b14:/dev/e8b15' --ioengine=libaio --numa_cpu_nodes=0 PT7: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=40 ... fio-2.2.11 Starting 8 threads Jobs: 8 (f=0): [r(8)] [12.7% done] [3641MB/0KB/0KB /s] [932K/0/0 iops] [eta 13m:50s] s] PT7: (groupid=0, jobs=8): err= 0: pid=27644: Tue Mar 13 21:04:24 2018 read : io=443136MB, bw=3692.8MB/s, iops=945349, runt=120001msec slat (usec): min=1, max=1409, avg= 4.41, stdev= 6.90 clat (usec): min=24, max=5222, avg=332.95, stdev=113.74 lat (usec): min=38, max=5250, avg=337.53, stdev=113.11 [root@sm28 csv]# /opt/E8/bin/fio --name=global --thread=1 --direct=1 --group_reporting=1 --iomem_align=4k --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --size=450GiB --runtime=120 --filename='/dev/e8b0:/dev/e8b1:/dev/e8b2:/dev/e8b3:/dev/e8b4:/dev/e8b5:/dev/e8b6:/dev/e8b7:/dev/e8b8:/dev/e8b9:/dev/e8b10:/dev/e8b11:/dev/e8b12:/dev/e8b13:/dev/e8b14:/dev/e8b15' --ioengine=libaio --numa_cpu_nodes=0 --random_generator=lfsr PT7: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=40 ... fio-2.2.11 Starting 8 threads Jobs: 8 (f=128): [r(8)] [100.0% done] [3199MB/0KB/0KB /s] [819K/0/0 iops] [eta 00m:00s] PT7: (groupid=0, jobs=8): err= 0: pid=29711: Tue Mar 13 21:16:13 2018 read : io=382920MB, bw=3190.1MB/s, iops=816888, runt=120001msec slat (usec): min=1, max=1069, avg= 3.77, stdev= 4.33 clat (usec): min=16, max=3593, avg=387.12, stdev=189.09 lat (usec): min=36, max=3613, avg=391.06, stdev=189.05 Between 1 and 16, I’ve tried 4, 8 and 12 volumes. The performance gradually worsens with LFSR as the number of volumes increases, but stays flat without LFSR. -- Thanks, Michael Green-- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: random_generator=lfsr overhead with more disks? 2018-03-16 18:45 ` Jeff Furlong @ 2018-03-16 21:16 ` Michael Green 2018-03-16 21:16 ` Michael Green 2018-03-21 14:34 ` Jens Axboe 2 siblings, 0 replies; 11+ messages in thread From: Michael Green @ 2018-03-16 21:16 UTC (permalink / raw) To: Jeff Furlong, fio@vger.kernel.org > -How does the cpu utilization look compared between the lfsr and default tausworthe generators? Is the cpu util actually higher on lfsr? It is actually less when using LFSR with 16 volumes: Without LFSR (CPU utilization is 5th column): [root@sm28 ~]# ps -eLo ppid,pid,pri,psr,pcpu,stat,wchan:14,comm | grep fio PPID PID PRI PSR %CPU STAT WCHAN COMMAND 2239 24684 19 0 0.7 Sl+ hrtimer_nanosl fio 2239 24684 19 0 0.2 Sl+ futex_wait_que fio 2239 24684 19 3 60.4 Rl+ - fio 2239 24684 19 6 60.5 Sl+ - fio 2239 24684 19 1 61.2 Rl+ - fio 2239 24684 19 23 62.5 Sl+ - fio 2239 24684 19 7 60.6 Rl+ - fio 2239 24684 19 18 61.0 Rl+ - fio 2239 24684 19 16 61.0 Rl+ - fio 2239 24684 19 4 62.0 Rl+ - fio With LFSR: [root@sm28 ~]# ps -eLo ppid,pid,pri,psr,pcpu,stat,wchan:14,comm | grep fio 2239 25589 19 20 2.7 Sl+ hrtimer_nanosl fio 2239 25589 19 25 0.3 Sl+ futex_wait_que fio 2239 25589 19 16 80.1 Rl+ - fio 2239 25589 19 22 78.0 Rl+ - fio 2239 25589 19 5 82.6 Rl+ - fio 2239 25589 19 4 78.0 Rl+ - fio 2239 25589 19 18 82.7 Rl+ - fio 2239 25589 19 17 80.7 Sl+ 14051005663345 fio 2239 25589 19 23 76.6 Sl+ - fio 2239 25589 19 0 77.6 Rl+ - fio But almost the same with 1 volume: Without LFSR [root@sm28 ~]# ps -eLo ppid,pid,pri,psr,pcpu,stat,wchan:14,comm | grep fio 2239 27559 19 7 4.0 Sl+ hrtimer_nanosl fio 2239 27559 19 2 0.0 Sl+ futex_wait_que fio 2239 27559 19 18 79.4 Rl+ - fio 2239 27559 19 17 79.0 Rl+ - fio 2239 27559 19 6 78.6 Rl+ - fio 2239 27559 19 5 77.6 Rl+ - fio 2239 27559 19 23 82.6 Rl+ - fio 2239 27559 19 3 77.4 Rl+ - fio 2239 27559 19 4 77.1 Sl+ - fio 2239 27559 19 16 75.9 Rl+ - fio With LFSR: [root@sm28 ~]# ps -eLo ppid,pid,pri,psr,pcpu,stat,wchan:14,comm | grep fio 2239 27174 19 20 2.0 Sl+ hrtimer_nanosl fio 2239 27174 19 25 0.0 Sl+ futex_wait_que fio 2239 27174 19 16 80.0 Rl+ - fio 2239 27174 19 6 78.4 Rl+ - fio 2239 27174 19 3 77.5 Rl+ - fio 2239 27174 19 5 76.4 Sl+ - fio 2239 27174 19 19 77.1 Rl+ - fio 2239 27174 19 4 76.4 Rl+ - fio 2239 27174 19 7 77.0 Rl+ - fio 2239 27174 19 1 75.8 Rl+ - fio > -Does a runtime of 2 minutes collect enough data points to assess the condition? What happens if you extend the runtime? Yes, it does. Shortening the test to 20 sec or extending to 10 min, doesn’t change a thing. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: random_generator=lfsr overhead with more disks? 2018-03-16 18:45 ` Jeff Furlong 2018-03-16 21:16 ` Michael Green @ 2018-03-16 21:16 ` Michael Green [not found] ` <BN3PR0401MB145715070B7B9F0C71A902318FD70@BN3PR0401MB1457.namprd04.prod.outlook.com> 2018-03-21 14:34 ` Jens Axboe 2 siblings, 1 reply; 11+ messages in thread From: Michael Green @ 2018-03-16 21:16 UTC (permalink / raw) To: Jeff Furlong, fio@vger.kernel.org > -How does the cpu utilization look compared between the lfsr and default tausworthe generators? Is the cpu util actually higher on lfsr? It is actually less when using LFSR with 16 volumes: Without LFSR (CPU utilization is 5th column): [root@sm28 ~]# ps -eLo ppid,pid,pri,psr,pcpu,stat,wchan:14,comm | grep fio PPID PID PRI PSR %CPU STAT WCHAN COMMAND 2239 24684 19 0 0.7 Sl+ hrtimer_nanosl fio 2239 24684 19 0 0.2 Sl+ futex_wait_que fio 2239 24684 19 3 60.4 Rl+ - fio 2239 24684 19 6 60.5 Sl+ - fio 2239 24684 19 1 61.2 Rl+ - fio 2239 24684 19 23 62.5 Sl+ - fio 2239 24684 19 7 60.6 Rl+ - fio 2239 24684 19 18 61.0 Rl+ - fio 2239 24684 19 16 61.0 Rl+ - fio 2239 24684 19 4 62.0 Rl+ - fio With LFSR: [root@sm28 ~]# ps -eLo ppid,pid,pri,psr,pcpu,stat,wchan:14,comm | grep fio 2239 25589 19 20 2.7 Sl+ hrtimer_nanosl fio 2239 25589 19 25 0.3 Sl+ futex_wait_que fio 2239 25589 19 16 80.1 Rl+ - fio 2239 25589 19 22 78.0 Rl+ - fio 2239 25589 19 5 82.6 Rl+ - fio 2239 25589 19 4 78.0 Rl+ - fio 2239 25589 19 18 82.7 Rl+ - fio 2239 25589 19 17 80.7 Sl+ 14051005663345 fio 2239 25589 19 23 76.6 Sl+ - fio 2239 25589 19 0 77.6 Rl+ - fio But almost the same with 1 volume: Without LFSR [root@sm28 ~]# ps -eLo ppid,pid,pri,psr,pcpu,stat,wchan:14,comm | grep fio 2239 27559 19 7 4.0 Sl+ hrtimer_nanosl fio 2239 27559 19 2 0.0 Sl+ futex_wait_que fio 2239 27559 19 18 79.4 Rl+ - fio 2239 27559 19 17 79.0 Rl+ - fio 2239 27559 19 6 78.6 Rl+ - fio 2239 27559 19 5 77.6 Rl+ - fio 2239 27559 19 23 82.6 Rl+ - fio 2239 27559 19 3 77.4 Rl+ - fio 2239 27559 19 4 77.1 Sl+ - fio 2239 27559 19 16 75.9 Rl+ - fio With LFSR: [root@sm28 ~]# ps -eLo ppid,pid,pri,psr,pcpu,stat,wchan:14,comm | grep fio 2239 27174 19 20 2.0 Sl+ hrtimer_nanosl fio 2239 27174 19 25 0.0 Sl+ futex_wait_que fio 2239 27174 19 16 80.0 Rl+ - fio 2239 27174 19 6 78.4 Rl+ - fio 2239 27174 19 3 77.5 Rl+ - fio 2239 27174 19 5 76.4 Sl+ - fio 2239 27174 19 19 77.1 Rl+ - fio 2239 27174 19 4 76.4 Rl+ - fio 2239 27174 19 7 77.0 Rl+ - fio 2239 27174 19 1 75.8 Rl+ - fio > -Does a runtime of 2 minutes collect enough data points to assess the condition? What happens if you extend the runtime? Yes, it does. Shortening the test to 20 sec or extending to 10 min, doesn’t change a thing. ^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <BN3PR0401MB145715070B7B9F0C71A902318FD70@BN3PR0401MB1457.namprd04.prod.outlook.com>]
[parent not found: <902A0A2A-8708-4A94-A09E-5D3C9BFB48FF@gmail.com>]
[parent not found: <SN6PR04MB4064D865EBEB79DE2219218D8FD70@SN6PR04MB4064.namprd04.prod.outlook.com>]
* Re: random_generator=lfsr overhead with more disks? [not found] ` <SN6PR04MB4064D865EBEB79DE2219218D8FD70@SN6PR04MB4064.namprd04.prod.outlook.com> @ 2018-03-16 22:32 ` Michael Green 2018-03-17 5:42 ` Sitsofe Wheeler 0 siblings, 1 reply; 11+ messages in thread From: Michael Green @ 2018-03-16 22:32 UTC (permalink / raw) To: Jeff Furlong, fio Possibly. Who can have a look at the code? > On Mar 16, 2018, at 6:30 PM, Jeff Furlong <jeff.furlong@wdc.com> wrote: > > OK, 61% cpu with lfsr and 82% cpu without lfsr. But the throughput is propositionally higher without lfsr, so perhaps that's why cpu util is higher. > > I'm wondering if the lfsr code is single threaded in nature or stuck waiting on a mutex, thereby slowing down the throughput and hence the lower latency. > > Regards, > Jeff > > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: random_generator=lfsr overhead with more disks? 2018-03-16 22:32 ` Michael Green @ 2018-03-17 5:42 ` Sitsofe Wheeler 2018-03-29 7:24 ` Michael Green 0 siblings, 1 reply; 11+ messages in thread From: Sitsofe Wheeler @ 2018-03-17 5:42 UTC (permalink / raw) To: Michael Green; +Cc: Jeff Furlong, fio On 16 March 2018 at 22:32, Michael Green <mishagreen@gmail.com> wrote: > Possibly. Who can have a look at the code? > >> On Mar 16, 2018, at 6:30 PM, Jeff Furlong <jeff.furlong@wdc.com> wrote: >> >> OK, 61% cpu with lfsr and 82% cpu without lfsr. But the throughput is propositionally higher without lfsr, so perhaps that's why cpu util is higher. >> >> I'm wondering if the lfsr code is single threaded in nature or stuck waiting on a mutex, thereby slowing down the throughput and hence the lower latency. Sounds unlikely - there are no locks at all in https://github.com/axboe/fio/blob/master/lib/lfsr.c and each file gets its own lsfr generator. > fio-2.2.11 > Starting 8 threads Could you repeat the problem on a recent version of fio (see https://github.com/axboe/fio/releases for what we're up to)? If it happens there we could do with the output from Linux's perf for each of the runs to see what might be sucking the time. It would also help if you strip the line you are using down to the bare minimum that still shows the problem (e.g. if you can remove numa, lock it to CPUs make it happen on a pure randread workload etc). I did two runs using the null ioengine on a four CPU system: fio --thread=1 --direct=1 --group_reporting=1 --ioengine=null --name=PT7 --rw=randrw --rwmixread=100 --iodepth=1 --numjobs=4 --bs=4096 --size=450GiB --runtime=10 PT7: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=null, iodepth=40 ... fio-3.5-57-g5b2f-dirty [...] Run status group 0 (all jobs): READ: bw=545MiB/s (572MB/s), 545MiB/s-545MiB/s (572MB/s-572MB/s), io=5455MiB (5720MB), run=10001-10001msec fio --thread=1 --direct=1 --group_reporting=1 --ioengine=null --name=PT7 --rw=randrw --rwmixread=100 --iodepth=1 --numjobs=4 --bs=4096 --size=450GiB --runtime=10 --random_generator=lfsr PT7: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=null, iodepth=40 ... fio-3.5-57-g5b2f-dirty [...] Run status group 0 (all jobs): READ: bw=637MiB/s (668MB/s), 637MiB/s-637MiB/s (668MB/s-668MB/s), io=6374MiB (6684MB), run=10001-10001msec Here the bandwidth was higher with --random_generator=lfsr suggesting it had lower overhead in my case. -- Sitsofe | http://sucs.org/~sits/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: random_generator=lfsr overhead with more disks? 2018-03-17 5:42 ` Sitsofe Wheeler @ 2018-03-29 7:24 ` Michael Green 2018-03-29 8:56 ` Sitsofe Wheeler 0 siblings, 1 reply; 11+ messages in thread From: Michael Green @ 2018-03-29 7:24 UTC (permalink / raw) To: fio; +Cc: Jeff Furlong, Sitsofe Wheeler Sorry for the delay here. Please see below inline. > On Mar 17, 2018, at 1:42 AM, Sitsofe Wheeler <sitsofe@gmail.com> wrote: > > Could you repeat the problem on a recent version of fio (see > https://github.com/axboe/fio/releases for what we're up to)? Sure. Here are the results with latest fio. With LFSR [root@sm28 fio-master]# fio --name=global --thread=1 --direct=1 --group_reporting=1 --iomem_align=4k --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --size=450GiB --runtime=120 --filename='/dev/e8b0:/dev/e8b1:/dev/e8b2:/dev/e8b3:/dev/e8b4:/dev/e8b5:/dev/e8b6:/dev/e8b7:/dev/e8b8:/dev/e8b9:/dev/e8b10:/dev/e8b11:/dev/e8b12:/dev/e8b13:/dev/e8b14:/dev/e8b15' --ioengine=libaio --numa_cpu_nodes=0 --random_generator=lfsr PT7: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=40 ... fio-3.5-80-gb348 Starting 8 threads Jobs: 8 (f=128): [r(8)][100.0%][r=3532MiB/s,w=0KiB/s][r=904k,w=0 IOPS][eta 00m:00s] PT7: (groupid=0, jobs=8): err= 0: pid=28376: Thu Mar 29 07:35:44 2018 read: IOPS=895k, BW=3496MiB/s (3666MB/s)(410GiB/120002msec) slat (nsec): min=1619, max=964358, avg=3682.85, stdev=4806.21 clat (usec): min=25, max=13002, avg=353.13, stdev=192.55 lat (usec): min=35, max=13007, avg=356.96, stdev=192.42 clat percentiles (usec): | 1.00th=[ 91], 5.00th=[ 141], 10.00th=[ 169], 20.00th=[ 206], | 30.00th=[ 239], 40.00th=[ 269], 50.00th=[ 306], 60.00th=[ 347], | 70.00th=[ 400], 80.00th=[ 474], 90.00th=[ 603], 95.00th=[ 742], | 99.00th=[ 1020], 99.50th=[ 1123], 99.90th=[ 1352], 99.95th=[ 1434], | 99.99th=[ 1647] bw ( KiB/s): min=373440, max=481952, per=12.50%, avg=447480.00, stdev=12566.36, samples=1918 iops : min=93360, max=120488, avg=111869.99, stdev=3141.58, samples=1918 lat (usec) : 50=0.02%, 100=1.45%, 250=32.29%, 500=49.13%, 750=12.35% lat (usec) : 1000=3.60% lat (msec) : 2=1.15%, 4=0.01%, 10=0.01%, 20=0.01% cpu : usr=17.66%, sys=49.66%, ctx=9942380, majf=0, minf=4898 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0% issued rwts: total=107404316,0,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=40 Run status group 0 (all jobs): READ: bw=3496MiB/s (3666MB/s), 3496MiB/s-3496MiB/s (3666MB/s-3666MB/s), io=410GiB (440GB), run=120002-120002msec Disk stats (read/write): e8b0: ios=6710489/0, merge=0/0, ticks=1818366/0, in_queue=1822176, util=99.74% e8b1: ios=6710487/0, merge=0/0, ticks=1993186/0, in_queue=1995781, util=99.75% e8b2: ios=6710490/0, merge=0/0, ticks=2076054/0, in_queue=2080427, util=99.76% e8b3: ios=6710491/0, merge=0/0, ticks=2101963/0, in_queue=2107744, util=99.80% e8b4: ios=6710493/0, merge=0/0, ticks=2167111/0, in_queue=2169552, util=99.79% e8b5: ios=6710496/0, merge=0/0, ticks=2149837/0, in_queue=2153109, util=99.85% e8b6: ios=6710497/0, merge=0/0, ticks=1966688/0, in_queue=1970940, util=99.85% e8b7: ios=6710496/0, merge=0/0, ticks=1984307/0, in_queue=1989317, util=99.87% e8b8: ios=6710497/0, merge=0/0, ticks=1985081/0, in_queue=1989662, util=99.88% e8b9: ios=6710498/0, merge=0/0, ticks=1995815/0, in_queue=2000669, util=99.92% e8b10: ios=6710498/0, merge=0/0, ticks=2005176/0, in_queue=2009368, util=99.94% e8b11: ios=6710498/0, merge=0/0, ticks=2022758/0, in_queue=2027682, util=99.99% e8b12: ios=6710499/0, merge=0/0, ticks=1996747/0, in_queue=2001118, util=100.00% e8b13: ios=6710502/0, merge=0/0, ticks=2034211/0, in_queue=2039490, util=100.00% e8b14: ios=6710502/0, merge=0/0, ticks=2035394/0, in_queue=2040469, util=100.00% e8b15: ios=6710505/0, merge=0/0, ticks=2010598/0, in_queue=2017014, util=100.00% Without LFSR [root@sm28 fio-master]# fio --name=global --thread=1 --direct=1 --group_reporting=1 --iomem_align=4k --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --size=450GiB --runtime=120 --filename='/dev/e8b0:/dev/e8b1:/dev/e8b2:/dev/e8b3:/dev/e8b4:/dev/e8b5:/dev/e8b6:/dev/e8b7:/dev/e8b8:/dev/e8b9:/dev/e8b10:/dev/e8b11:/dev/e8b12:/dev/e8b13:/dev/e8b14:/dev/e8b15' --ioengine=libaio --numa_cpu_nodes=0 PT7: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=40 ... fio-3.5-80-gb348 Starting 8 threads Jobs: 8 (f=128): [r(8)][100.0%][r=3729MiB/s,w=0KiB/s][r=955k,w=0 IOPS][eta 00m:00s] PT7: (groupid=0, jobs=8): err= 0: pid=28564: Thu Mar 29 07:40:09 2018 read: IOPS=943k, BW=3684MiB/s (3863MB/s)(432GiB/120007msec) slat (nsec): min=1656, max=1601.7k, avg=4342.55, stdev=6792.60 clat (usec): min=31, max=12646, avg=333.84, stdev=102.52 lat (usec): min=38, max=12648, avg=338.34, stdev=101.86 clat percentiles (usec): | 1.00th=[ 120], 5.00th=[ 167], 10.00th=[ 204], 20.00th=[ 249], | 30.00th=[ 281], 40.00th=[ 310], 50.00th=[ 334], 60.00th=[ 363], | 70.00th=[ 392], 80.00th=[ 420], 90.00th=[ 457], 95.00th=[ 482], | 99.00th=[ 545], 99.50th=[ 594], 99.90th=[ 865], 99.95th=[ 955], | 99.99th=[ 1254] bw ( KiB/s): min=390520, max=518192, per=12.50%, avg=471560.73, stdev=13752.55, samples=1914 iops : min=97630, max=129548, avg=117890.14, stdev=3438.13, samples=1914 lat (usec) : 50=0.01%, 100=0.37%, 250=20.22%, 500=76.31%, 750=2.87% lat (usec) : 1000=0.20% lat (msec) : 2=0.03%, 4=0.01%, 10=0.01%, 20=0.01% cpu : usr=23.47%, sys=59.78%, ctx=10930907, majf=0, minf=299365 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0% issued rwts: total=113187098,0,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=40 Run status group 0 (all jobs): READ: bw=3684MiB/s (3863MB/s), 3684MiB/s-3684MiB/s (3863MB/s-3863MB/s), io=432GiB (464GB), run=120007-120007msec Disk stats (read/write): e8b0: ios=7070562/0, merge=0/0, ticks=1862741/0, in_queue=1868144, util=99.78% e8b1: ios=7070570/0, merge=0/0, ticks=1996123/0, in_queue=1999170, util=99.79% e8b2: ios=7070580/0, merge=0/0, ticks=2019351/0, in_queue=2024920, util=99.78% e8b3: ios=7070581/0, merge=0/0, ticks=2018430/0, in_queue=2024167, util=99.80% e8b4: ios=7070585/0, merge=0/0, ticks=2069985/0, in_queue=2072530, util=99.78% e8b5: ios=7070586/0, merge=0/0, ticks=2032085/0, in_queue=2035097, util=99.81% e8b6: ios=7070586/0, merge=0/0, ticks=1838167/0, in_queue=1842676, util=99.79% e8b7: ios=7070589/0, merge=0/0, ticks=1838162/0, in_queue=1843175, util=99.83% e8b8: ios=7070587/0, merge=0/0, ticks=1837259/0, in_queue=1842283, util=99.86% e8b9: ios=7070595/0, merge=0/0, ticks=1836983/0, in_queue=1841398, util=99.89% e8b10: ios=7070601/0, merge=0/0, ticks=1835967/0, in_queue=1840679, util=99.91% e8b11: ios=7070605/0, merge=0/0, ticks=1835374/0, in_queue=1840121, util=99.94% e8b12: ios=7070609/0, merge=0/0, ticks=1834964/0, in_queue=1839546, util=99.98% e8b13: ios=7070609/0, merge=0/0, ticks=1835191/0, in_queue=1839604, util=100.00% e8b14: ios=7070608/0, merge=0/0, ticks=1835130/0, in_queue=1840084, util=100.00% e8b15: ios=7070611/0, merge=0/0, ticks=1835606/0, in_queue=1842956, util=100.00% Initially, I thought that there is a clear improvement here as the latency gap is smaller now. But then I decided to follow your advice of stripping the command down to the bare minimum. > It would also > help if you strip the line you are using down to the bare minimum that > still shows the problem (e.g. if you can remove numa, lock it to CPUs > make it happen on a pure randread workload etc). Now when it comes to removing the flags, I didn’t want to remove the --numa flag because in E8 architecture that may adversely affect latency standard deviation. Reason being that FIO may occasionally get scheduled to run on the same core where where e8 driver is running. So the two flags that I could get rid of were --iomem_align and --size. After experimenting a bit, I eventually set out to run a series of tests with every permutation of the two flags, including a test without them. For every permutation, the test was repeated 3 times and latencies recorded. Nothing else was running on either the storage controller or the host during the testing. base command was fio --name=global --thread=1 --direct=1 --group_reporting=1 --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --runtime=120 --filename='/dev/e8b0:/dev/e8b1:/dev/e8b2:/dev/e8b3:/dev/e8b4:/dev/e8b5:/dev/e8b6:/dev/e8b7:/dev/e8b8:/dev/e8b9:/dev/e 8b10:/dev/e8b11:/dev/e8b12:/dev/e8b13:/dev/e8b14:/dev/e8b15' --ioengine=libaio --random_generator=lfsr and fio --name=global --thread=1 --direct=1 --group_reporting=1 --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --runtime=120 --filename='/dev/e8b0:/dev/e8b1:/dev/e8b2:/dev/e8b3:/dev/e8b4:/dev/e8b5:/dev/e8b6:/dev/e8b7:/dev/e8b8:/dev/e8b9:/dev/e 8b10:/dev/e8b11:/dev/e8b12:/dev/e8b13:/dev/e8b14:/dev/e8b15' --ioengine=libaio The only difference is --random_generator=lfsr or not. The iomem and size flags were iomem_align=4k and size=450GiB Here are the latency numbers I’ve got: LFSR + iomem + size = 348.07, 347.68, 347.59 nothing = 344.28, 344.84, 345.04 + size=349.28, 348.37, 348.37 + iomem = 346.81, 346.05, 344.74 NO LFSR + iomem + size = 344.03, 344.29, 345.47 nothing = 347.05, 346.00, 346.03 + size = 345.43, 343.55, 343.98 + iomem = 347.87, 347.02, 347.84 It appears that with both flags, LFSR is still behind NO LFSR even so minimally. When both flags are omitted the picture reverses. Looking at the overall picture, I cannot identify clear winner here. It’s almost like the differences are within measurement error. > If it > happens there we could do with the output from Linux's perf Not sure what “Linux’s perf” exactly means. Michael ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: random_generator=lfsr overhead with more disks? 2018-03-29 7:24 ` Michael Green @ 2018-03-29 8:56 ` Sitsofe Wheeler 0 siblings, 0 replies; 11+ messages in thread From: Sitsofe Wheeler @ 2018-03-29 8:56 UTC (permalink / raw) To: Michael Green; +Cc: fio, Jeff Furlong On 29 March 2018 at 08:24, Michael Green <mishagreen@gmail.com> wrote: > Sorry for the delay here. Please see below inline. > >> On Mar 17, 2018, at 1:42 AM, Sitsofe Wheeler <sitsofe@gmail.com> wrote: >> >> Could you repeat the problem on a recent version of fio (see >> https://github.com/axboe/fio/releases for what we're up to)? > > Sure. Here are the results with latest fio. > > With LFSR > > [root@sm28 fio-master]# fio --name=global --thread=1 --direct=1 --group_reporting=1 --iomem_align=4k --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --size=450GiB --runtime=120 --filename='/dev/e8b0:/dev/e8b1:/dev/e8b2:/dev/e8b3:/dev/e8b4:/dev/e8b5:/dev/e8b6:/dev/e8b7:/dev/e8b8:/dev/e8b9:/dev/e8b10:/dev/e8b11:/dev/e8b12:/dev/e8b13:/dev/e8b14:/dev/e8b15' --ioengine=libaio --numa_cpu_nodes=0 --random_generator=lfsr > PT7: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=40 > ... > fio-3.5-80-gb348 > Starting 8 threads > Jobs: 8 (f=128): [r(8)][100.0%][r=3532MiB/s,w=0KiB/s][r=904k,w=0 IOPS][eta 00m:00s] > PT7: (groupid=0, jobs=8): err= 0: pid=28376: Thu Mar 29 07:35:44 2018 > read: IOPS=895k, BW=3496MiB/s (3666MB/s)(410GiB/120002msec) > slat (nsec): min=1619, max=964358, avg=3682.85, stdev=4806.21 > clat (usec): min=25, max=13002, avg=353.13, stdev=192.55 > lat (usec): min=35, max=13007, avg=356.96, stdev=192.42 > clat percentiles (usec): > | 1.00th=[ 91], 5.00th=[ 141], 10.00th=[ 169], 20.00th=[ 206], > | 30.00th=[ 239], 40.00th=[ 269], 50.00th=[ 306], 60.00th=[ 347], > | 70.00th=[ 400], 80.00th=[ 474], 90.00th=[ 603], 95.00th=[ 742], > | 99.00th=[ 1020], 99.50th=[ 1123], 99.90th=[ 1352], 99.95th=[ 1434], > | 99.99th=[ 1647] > bw ( KiB/s): min=373440, max=481952, per=12.50%, avg=447480.00, stdev=12566.36, samples=1918 > iops : min=93360, max=120488, avg=111869.99, stdev=3141.58, samples=1918 > lat (usec) : 50=0.02%, 100=1.45%, 250=32.29%, 500=49.13%, 750=12.35% > lat (usec) : 1000=3.60% > lat (msec) : 2=1.15%, 4=0.01%, 10=0.01%, 20=0.01% > cpu : usr=17.66%, sys=49.66%, ctx=9942380, majf=0, minf=4898 > IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0% > submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% > complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0% > issued rwts: total=107404316,0,0,0 short=0,0,0,0 dropped=0,0,0,0 > latency : target=0, window=0, percentile=100.00%, depth=40 > > Run status group 0 (all jobs): > READ: bw=3496MiB/s (3666MB/s), 3496MiB/s-3496MiB/s (3666MB/s-3666MB/s), io=410GiB (440GB), run=120002-120002msec > > Disk stats (read/write): > e8b0: ios=6710489/0, merge=0/0, ticks=1818366/0, in_queue=1822176, util=99.74% > e8b1: ios=6710487/0, merge=0/0, ticks=1993186/0, in_queue=1995781, util=99.75% > e8b2: ios=6710490/0, merge=0/0, ticks=2076054/0, in_queue=2080427, util=99.76% > e8b3: ios=6710491/0, merge=0/0, ticks=2101963/0, in_queue=2107744, util=99.80% > e8b4: ios=6710493/0, merge=0/0, ticks=2167111/0, in_queue=2169552, util=99.79% > e8b5: ios=6710496/0, merge=0/0, ticks=2149837/0, in_queue=2153109, util=99.85% > e8b6: ios=6710497/0, merge=0/0, ticks=1966688/0, in_queue=1970940, util=99.85% > e8b7: ios=6710496/0, merge=0/0, ticks=1984307/0, in_queue=1989317, util=99.87% > e8b8: ios=6710497/0, merge=0/0, ticks=1985081/0, in_queue=1989662, util=99.88% > e8b9: ios=6710498/0, merge=0/0, ticks=1995815/0, in_queue=2000669, util=99.92% > e8b10: ios=6710498/0, merge=0/0, ticks=2005176/0, in_queue=2009368, util=99.94% > e8b11: ios=6710498/0, merge=0/0, ticks=2022758/0, in_queue=2027682, util=99.99% > e8b12: ios=6710499/0, merge=0/0, ticks=1996747/0, in_queue=2001118, util=100.00% > e8b13: ios=6710502/0, merge=0/0, ticks=2034211/0, in_queue=2039490, util=100.00% > e8b14: ios=6710502/0, merge=0/0, ticks=2035394/0, in_queue=2040469, util=100.00% > e8b15: ios=6710505/0, merge=0/0, ticks=2010598/0, in_queue=2017014, util=100.00% > > > Without LFSR > > [root@sm28 fio-master]# fio --name=global --thread=1 --direct=1 --group_reporting=1 --iomem_align=4k --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --size=450GiB --runtime=120 --filename='/dev/e8b0:/dev/e8b1:/dev/e8b2:/dev/e8b3:/dev/e8b4:/dev/e8b5:/dev/e8b6:/dev/e8b7:/dev/e8b8:/dev/e8b9:/dev/e8b10:/dev/e8b11:/dev/e8b12:/dev/e8b13:/dev/e8b14:/dev/e8b15' --ioengine=libaio --numa_cpu_nodes=0 > PT7: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=40 > ... > fio-3.5-80-gb348 > Starting 8 threads > Jobs: 8 (f=128): [r(8)][100.0%][r=3729MiB/s,w=0KiB/s][r=955k,w=0 IOPS][eta 00m:00s] > PT7: (groupid=0, jobs=8): err= 0: pid=28564: Thu Mar 29 07:40:09 2018 > read: IOPS=943k, BW=3684MiB/s (3863MB/s)(432GiB/120007msec) > slat (nsec): min=1656, max=1601.7k, avg=4342.55, stdev=6792.60 > clat (usec): min=31, max=12646, avg=333.84, stdev=102.52 > lat (usec): min=38, max=12648, avg=338.34, stdev=101.86 > clat percentiles (usec): > | 1.00th=[ 120], 5.00th=[ 167], 10.00th=[ 204], 20.00th=[ 249], > | 30.00th=[ 281], 40.00th=[ 310], 50.00th=[ 334], 60.00th=[ 363], > | 70.00th=[ 392], 80.00th=[ 420], 90.00th=[ 457], 95.00th=[ 482], > | 99.00th=[ 545], 99.50th=[ 594], 99.90th=[ 865], 99.95th=[ 955], > | 99.99th=[ 1254] > bw ( KiB/s): min=390520, max=518192, per=12.50%, avg=471560.73, stdev=13752.55, samples=1914 > iops : min=97630, max=129548, avg=117890.14, stdev=3438.13, samples=1914 > lat (usec) : 50=0.01%, 100=0.37%, 250=20.22%, 500=76.31%, 750=2.87% > lat (usec) : 1000=0.20% > lat (msec) : 2=0.03%, 4=0.01%, 10=0.01%, 20=0.01% > cpu : usr=23.47%, sys=59.78%, ctx=10930907, majf=0, minf=299365 > IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0% > submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% > complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0% > issued rwts: total=113187098,0,0,0 short=0,0,0,0 dropped=0,0,0,0 > latency : target=0, window=0, percentile=100.00%, depth=40 > > Run status group 0 (all jobs): > READ: bw=3684MiB/s (3863MB/s), 3684MiB/s-3684MiB/s (3863MB/s-3863MB/s), io=432GiB (464GB), run=120007-120007msec > > Disk stats (read/write): > e8b0: ios=7070562/0, merge=0/0, ticks=1862741/0, in_queue=1868144, util=99.78% > e8b1: ios=7070570/0, merge=0/0, ticks=1996123/0, in_queue=1999170, util=99.79% > e8b2: ios=7070580/0, merge=0/0, ticks=2019351/0, in_queue=2024920, util=99.78% > e8b3: ios=7070581/0, merge=0/0, ticks=2018430/0, in_queue=2024167, util=99.80% > e8b4: ios=7070585/0, merge=0/0, ticks=2069985/0, in_queue=2072530, util=99.78% > e8b5: ios=7070586/0, merge=0/0, ticks=2032085/0, in_queue=2035097, util=99.81% > e8b6: ios=7070586/0, merge=0/0, ticks=1838167/0, in_queue=1842676, util=99.79% > e8b7: ios=7070589/0, merge=0/0, ticks=1838162/0, in_queue=1843175, util=99.83% > e8b8: ios=7070587/0, merge=0/0, ticks=1837259/0, in_queue=1842283, util=99.86% > e8b9: ios=7070595/0, merge=0/0, ticks=1836983/0, in_queue=1841398, util=99.89% > e8b10: ios=7070601/0, merge=0/0, ticks=1835967/0, in_queue=1840679, util=99.91% > e8b11: ios=7070605/0, merge=0/0, ticks=1835374/0, in_queue=1840121, util=99.94% > e8b12: ios=7070609/0, merge=0/0, ticks=1834964/0, in_queue=1839546, util=99.98% > e8b13: ios=7070609/0, merge=0/0, ticks=1835191/0, in_queue=1839604, util=100.00% > e8b14: ios=7070608/0, merge=0/0, ticks=1835130/0, in_queue=1840084, util=100.00% > e8b15: ios=7070611/0, merge=0/0, ticks=1835606/0, in_queue=1842956, util=100.00% > > > Initially, I thought that there is a clear improvement here as the latency gap is smaller now. But then I decided to follow your advice of stripping the command down to the bare minimum. > >> It would also >> help if you strip the line you are using down to the bare minimum that >> still shows the problem (e.g. if you can remove numa, lock it to CPUs >> make it happen on a pure randread workload etc). > > > Now when it comes to removing the flags, I didn’t want to remove the --numa flag because in E8 architecture that may adversely affect latency standard deviation. Reason being that FIO may occasionally get scheduled to run on the same core where where e8 driver is running. So the two flags that I could get rid of were --iomem_align and --size. After experimenting a bit, I eventually set out to run a series of tests with every permutation of the two flags, including a test without them. For every permutation, the test was repeated 3 times and latencies recorded. Nothing else was running on either the storage controller or the host during the testing. > > base command was > fio --name=global --thread=1 --direct=1 --group_reporting=1 --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --runtime=120 --filename='/dev/e8b0:/dev/e8b1:/dev/e8b2:/dev/e8b3:/dev/e8b4:/dev/e8b5:/dev/e8b6:/dev/e8b7:/dev/e8b8:/dev/e8b9:/dev/e > 8b10:/dev/e8b11:/dev/e8b12:/dev/e8b13:/dev/e8b14:/dev/e8b15' --ioengine=libaio --random_generator=lfsr > > and > > fio --name=global --thread=1 --direct=1 --group_reporting=1 --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --runtime=120 --filename='/dev/e8b0:/dev/e8b1:/dev/e8b2:/dev/e8b3:/dev/e8b4:/dev/e8b5:/dev/e8b6:/dev/e8b7:/dev/e8b8:/dev/e8b9:/dev/e > 8b10:/dev/e8b11:/dev/e8b12:/dev/e8b13:/dev/e8b14:/dev/e8b15' --ioengine=libaio > > The only difference is --random_generator=lfsr or not. > The iomem and size flags were iomem_align=4k and size=450GiB > > Here are the latency numbers I’ve got: > > LFSR > > + iomem + size = 348.07, 347.68, 347.59 > nothing = 344.28, 344.84, 345.04 > + size=349.28, 348.37, 348.37 > + iomem = 346.81, 346.05, 344.74 > > NO LFSR > > + iomem + size = 344.03, 344.29, 345.47 > nothing = 347.05, 346.00, 346.03 > + size = 345.43, 343.55, 343.98 > + iomem = 347.87, 347.02, 347.84 > > It appears that with both flags, LFSR is still behind NO LFSR even so minimally. When both flags are omitted the picture reverses. > Looking at the overall picture, I cannot identify clear winner here. It’s almost like the differences are within measurement error. If you start cutting down the number of disks being used does that help or make things worse? >> If it >> happens there we could do with the output from Linux's perf > > Not sure what “Linux’s perf” exactly means. The tool referred to over in http://www.brendangregg.com/perf.html and https://perf.wiki.kernel.org/index.php/Main_Page . It's distributed with the kernel but these days most distros should package it. -- Sitsofe | http://sucs.org/~sits/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: random_generator=lfsr overhead with more disks? 2018-03-16 18:45 ` Jeff Furlong 2018-03-16 21:16 ` Michael Green 2018-03-16 21:16 ` Michael Green @ 2018-03-21 14:34 ` Jens Axboe 2018-03-29 7:28 ` Michael Green 2 siblings, 1 reply; 11+ messages in thread From: Jens Axboe @ 2018-03-21 14:34 UTC (permalink / raw) To: Jeff Furlong, Michael Green, fio@vger.kernel.org On 3/16/18 12:45 PM, Jeff Furlong wrote: > A few comments: > > -How does the cpu utilization look compared between the lfsr and > default tausworthe generators? Is the cpu util actually higher on > lfsr? If it is near saturated on 16 devices, then naturally > throughput would decrease. The LFSR generator is constant overhead, and it should not degrade as more jobs are using it. There's no shared state at all. If I were to guess, then the identical offsets of the jobs is probably a likely clue, since that is the only real difference between the two random generators. Are these 16 volumes all completely separate? Finally, you are having 8 jobs all accessing the same 16 devices. You'll likely get more consistent performance if you split things up a bit by having 4 jobs, each doing IO to just two of the disks. This shouldn't really be impacted by the random generator, but your current setup is prone to performance fluctuations. -- Jens Axboe ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: random_generator=lfsr overhead with more disks? 2018-03-21 14:34 ` Jens Axboe @ 2018-03-29 7:28 ` Michael Green 2018-03-29 8:50 ` Sitsofe Wheeler 0 siblings, 1 reply; 11+ messages in thread From: Michael Green @ 2018-03-29 7:28 UTC (permalink / raw) To: Jens Axboe; +Cc: Jeff Furlong, fio@vger.kernel.org > On Mar 21, 2018, at 7:34 AM, Jens Axboe <axboe@kernel.dk> wrote: > > On 3/16/18 12:45 PM, Jeff Furlong wrote: >> A few comments: >> >> -How does the cpu utilization look compared between the lfsr and >> default tausworthe generators? Is the cpu util actually higher on >> lfsr? If it is near saturated on 16 devices, then naturally >> throughput would decrease. > > The LFSR generator is constant overhead, and it should not degrade as > more jobs are using it. There's no shared state at all. Actually it’s only one job. > > If I were to guess, then the identical offsets of the jobs is probably a > likely clue, since that is the only real difference between the two > random generators. Are these 16 volumes all completely separate? > The 16 volumes are coming from the same E8 storage controller. the volumes share the same RAID6 array and the data traffic is flowing through the same Ethernet infrastructure, 100Gb end to en. From E8 host driver perspective, there is no overhead for more volumes - 1 or 1000 it’s all the same. Michael ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: random_generator=lfsr overhead with more disks? 2018-03-29 7:28 ` Michael Green @ 2018-03-29 8:50 ` Sitsofe Wheeler 0 siblings, 0 replies; 11+ messages in thread From: Sitsofe Wheeler @ 2018-03-29 8:50 UTC (permalink / raw) To: Michael Green; +Cc: Jens Axboe, Jeff Furlong, fio@vger.kernel.org On 29 March 2018 at 08:28, Michael Green <mishagreen@gmail.com> wrote: > >> On Mar 21, 2018, at 7:34 AM, Jens Axboe <axboe@kernel.dk> wrote: >> >> On 3/16/18 12:45 PM, Jeff Furlong wrote: >>> A few comments: >>> >>> -How does the cpu utilization look compared between the lfsr and >>> default tausworthe generators? Is the cpu util actually higher on >>> lfsr? If it is near saturated on 16 devices, then naturally >>> throughput would decrease. >> >> The LFSR generator is constant overhead, and it should not degrade as >> more jobs are using it. There's no shared state at all. > > Actually it’s only one job. In this case we mean "fio jobs" (rather than fio invocations). From the line in one of your other emails: fio --name=global --thread=1 --direct=1 --group_reporting=1 --name=PT7 --rw=randrw --rwmixread=100 --iodepth=40 --numjobs=8 --bs=4096 --runtime=120 --filename='/dev/e8b0:/dev/e8b1:/dev/e8b2:/dev/e8b3:/dev/e8b4:/dev/e8b5:/dev/e8b6:/dev/e8b7:/dev/e8b8:/dev/e8b9:/dev/e8b10:/dev/e8b11:/dev/e8b12:/dev/e8b13:/dev/e8b14:/dev/e8b15' --ioengine=libaio --random_generator=lfsr You have --numjobs=8 (http://fio.readthedocs.io/en/latest/fio_doc.html#cmdoption-arg-numjobs ) there so you are spawning 8 fio internal jobs which all work on those same files simultaneously. -- Sitsofe | http://sucs.org/~sits/ ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2018-03-29 8:57 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-13 19:23 random_generator=lfsr overhead with more disks? Michael Green
2018-03-16 18:45 ` Jeff Furlong
2018-03-16 21:16 ` Michael Green
2018-03-16 21:16 ` Michael Green
[not found] ` <BN3PR0401MB145715070B7B9F0C71A902318FD70@BN3PR0401MB1457.namprd04.prod.outlook.com>
[not found] ` <902A0A2A-8708-4A94-A09E-5D3C9BFB48FF@gmail.com>
[not found] ` <SN6PR04MB4064D865EBEB79DE2219218D8FD70@SN6PR04MB4064.namprd04.prod.outlook.com>
2018-03-16 22:32 ` Michael Green
2018-03-17 5:42 ` Sitsofe Wheeler
2018-03-29 7:24 ` Michael Green
2018-03-29 8:56 ` Sitsofe Wheeler
2018-03-21 14:34 ` Jens Axboe
2018-03-29 7:28 ` Michael Green
2018-03-29 8:50 ` Sitsofe Wheeler
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox