<div dir="ltr"><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px">Hi,</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px"><br></div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px">We have been pushing thin pool performance beyond what most would normally do. In the process we have noticed an IOPS performance ceiling within a single thin pool. Jon Bernard started an email thread about this problem which is linked below.</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px"><br></div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px"><a href="https://www.redhat.com/archives/dm-devel/2016-July/msg00264.html" target="_blank" id="gmail-LPlnk746378"><span id="gmail-LPlnk746378">https://www.redhat.com/archives/dm-devel/2016-July/msg00264.html</span></a><br></div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px"><br></div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px">To give you a brief rundown, our array can handle over 1.2m IOPS at a 4k block size, and the performance between thick and thin device compares very well until you reach about 200k IOPS (read or write). Beyond this it appears that the performance is bottlenecked by a spinlock in the thin pool.</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px"><br></div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px">What tells us that there is much more headroom available is that we can create 4 separate thin pools and get a aggregate of 800k IOPS across thin devices created within them (200k per pool). Adding additional pools beyond this gives diminishing returns. </div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px"><br></div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px">We have tried a variety of tests to isolate the issue including:</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px"><br></div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px">- multiple chunk-sizes between 64k and 512k</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px">- zero provisioning turned off and on</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px">- filling the thin devices fully before running the tests</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px">- using device mapper directly and bypassing LVM2</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px">- enabling blk-mq</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px">- kernel versions from 3.10.327 through 4.6</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px">- IO on a single thin device, or spread across many within the same pool</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px"><br></div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px">Or testing centers around FIO and random reads, but have also looked at writes and sequential IO. Here is our FIO job configuration which can reproduce the results.</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px"><br></div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px;margin-top:0px;margin-bottom:0px"> </div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">[random]</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">direct=1 </div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">rw=randrw </div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">zero_buffers </div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">norandommap </div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">randrepeat=0 </div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">ioengine=libaio</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">group_reporting</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">rwmixread=100 </div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">bs=4k </div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">iodepth=32 </div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">numjobs=16 </div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">runtime=600</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px"><br></div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">I would appreciate any ideas or thoughts you might have on this issue. Please let me know if there is any other information I can provide. The thread I linked to above has the lock stat output. </div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px"><br></div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">Regards,</div><div style="color:rgb(0,0,0);font-family:calibri,arial,helvetica,sans-serif;font-size:16px">Ryan</div></div>