In the previous post we saw two images one showing the QOS curve as advertised by the python API (image 1) and the other generated by a standalone python script (image 2)
Image 1
Image 2
In this post I will cover how we worked out the cost for each I/O size and the associated QOS values.
Working out the cost of an I/O
As we can see from the first image the SolidFire presents us with some guidance on the QOS curve and the documentation states that IOPS are normalised to a 4Kb I/O size. To work out the max IOPS and BW for a volume given a specific I/O size we need to look at the QOS curve. This is defined as follows: I/O size in kb:cost
costs = {4:100,8:160,16:270,32:500,64:1000,128:1950,256:3900,512:7600,1024:15000}
This shows that 4Kb would have a cost of 100, now to get a cost for an I/O size for say 17Kb we need to know where the I/O size falls between the lower and upper I/O size buckets.
As such we have upper bucket = 500(32kb) and lower = 270(16kb) as we fall into this range. So to get the cost for the values in between we do the following:
upper bucket cost - lower bucket cost costep = ------------------------------------- (upper bucket I/O size /2)
This gives:
500 - 270 = 230 / 16 = 14.375
So we have a cost step value of 14.375, now we need to work out the current i/o sizes cost with the following formula.
curcost = (( current I/O size - lower bucket I/O size ) * costep ) + lower bucket cost (( 17 - 16 = 1 ) * 14.375 + 270 = 284.375
Now we need to normalize this against the 4Kb cost to get the
curlimit = max_iops_limit * ( 4kb cost ) ----------- curcost
15000 * 100 ------- 284.375 = 5274.72 IOPS - rounded to 5275
Below we can see the min/max/burst for a qos rule of 3000/15000/20000
IOSIZE COST MINIOPS MAXIOPS BIOPS MINMB MAXMB BURSTMB 17 284 1055 5275 7033 18 88 117
We can then use this to build a table of all I/O sizes and associated QOS values.
BIOPS = Burst IOPS **
IOSIZE COST MINIOPS MAXIOPS BIOPS MINMB MAXMB BURSTMB 1 100 3000 15000 20000 3 15 20 2 100 3000 15000 20000 6 29 39 3 100 3000 15000 20000 9 44 59 4 100 3000 15000 20000 12 59 78 5 115 2609 13043 17391 13 64 85 6 130 2308 11538 15385 14 68 90 7 145 2069 10345 13793 14 71 94 8 160 1875 9375 12500 15 73 98 9 173 1727 8633 11511 15 76 101 10 187 1600 8000 10667 16 78 104 11 201 1491 7453 9938 16 80 107 12 215 1395 6977 9302 16 82 109 13 228 1311 6557 8743 17 83 111 14 242 1237 6186 8247 17 85 113 15 256 1171 5854 7805 17 86 114 16 270 1111 5556 7407 17 87 116 17 284 1055 5275 7033 18 88 117 18 298 1004 5021 6695 18 88 118 19 313 958 4790 6387 18 89 119 20 327 916 4580 6107 18 89 119 21 341 878 4388 5850 18 90 120 22 356 842 4211 5614 18 90 121 23 370 809 4047 5396 18 91 121 24 385 779 3896 5195 18 91 122 25 399 751 3756 5008 18 92 122 26 413 725 3625 4834 18 92 123 27 428 701 3504 4672 18 92 123 28 442 678 3390 4520 19 93 124 29 456 657 3283 4378 19 93 124 30 471 637 3183 4244 19 93 124 31 485 618 3089 4118 19 94 125 32 500 600 3000 4000 19 94 125 33 515 582 2909 3879 19 94 125 34 531 565 2824 3765 19 94 125 35 546 549 2743 3657 19 94 125 36 562 533 2667 3556 19 94 125 37 578 519 2595 3459 19 94 125 38 593 505 2526 3368 19 94 125 39 609 492 2462 3282 19 94 125 40 625 480 2400 3200 19 94 125 41 640 468 2341 3122 19 94 125 42 656 457 2286 3048 19 94 125 43 671 447 2233 2977 19 94 125 44 687 436 2182 2909 19 94 125 45 703 427 2133 2844 19 94 125 46 718 417 2087 2783 19 94 125 47 734 409 2043 2723 19 94 125 48 750 400 2000 2667 19 94 125 49 765 392 1959 2612 19 94 125 50 781 384 1920 2560 19 94 125 51 796 376 1882 2510 19 94 125 52 812 369 1846 2462 19 94 125 53 828 362 1811 2415 19 94 125 54 843 356 1778 2370 19 94 125 55 859 349 1745 2327 19 94 125 56 875 343 1714 2286 19 94 125 57 890 337 1684 2246 19 94 125 58 906 331 1655 2207 19 94 125 59 921 325 1627 2169 19 94 125 60 937 320 1600 2133 19 94 125 61 953 315 1574 2098 19 94 125 62 968 310 1548 2065 19 94 125 63 984 305 1524 2032 19 94 125 64 1000 300 1500 2000 19 94 125 65 1014 296 1478 1971 19 94 125 66 1029 291 1457 1942 19 94 125 67 1044 287 1436 1915 19 94 125 68 1059 283 1416 1888 19 94 125 69 1074 279 1396 1862 19 94 125 70 1089 275 1377 1836 19 94 126 71 1103 272 1359 1812 19 94 126 72 1118 268 1341 1788 19 94 126 73 1133 265 1323 1764 19 94 126 74 1148 261 1306 1741 19 94 126 75 1163 258 1289 1719 19 94 126 76 1178 255 1273 1698 19 94 126 77 1192 251 1257 1676 19 95 126 78 1207 248 1242 1656 19 95 126 79 1222 245 1227 1636 19 95 126 80 1237 242 1212 1616 19 95 126 81 1252 240 1198 1597 19 95 126 82 1267 237 1184 1578 19 95 126 83 1282 234 1170 1560 19 95 126 84 1296 231 1157 1542 19 95 127 85 1311 229 1144 1525 19 95 127 86 1326 226 1131 1508 19 95 127 87 1341 224 1118 1491 19 95 127 88 1356 221 1106 1475 19 95 127 89 1371 219 1094 1459 19 95 127 90 1385 216 1082 1443 19 95 127 91 1400 214 1071 1428 19 95 127 92 1415 212 1060 1413 19 95 127 93 1430 210 1049 1398 19 95 127 94 1445 208 1038 1384 19 95 127 95 1460 205 1027 1370 19 95 127 96 1475 203 1017 1356 19 95 127 97 1489 201 1007 1342 19 95 127 98 1504 199 997 1329 19 95 127 99 1519 197 987 1316 19 95 127 100 1534 196 978 1303 19 95 127 101 1549 194 968 1291 19 95 127 102 1564 192 959 1279 19 96 127 103 1578 190 950 1267 19 96 127 104 1593 188 941 1255 19 96 127 105 1608 186 932 1243 19 96 127 106 1623 185 924 1232 19 96 128 107 1638 183 916 1221 19 96 128 108 1653 181 907 1210 19 96 128 109 1667 180 899 1199 19 96 128 110 1682 178 891 1188 19 96 128 111 1697 177 884 1178 19 96 128 112 1712 175 876 1168 19 96 128 113 1727 174 868 1158 19 96 128 114 1742 172 861 1148 19 96 128 115 1757 171 854 1138 19 96 128 116 1771 169 847 1129 19 96 128 117 1786 168 840 1119 19 96 128 118 1801 167 833 1110 19 96 128 119 1816 165 826 1101 19 96 128 120 1831 164 819 1092 19 96 128 121 1846 163 813 1083 19 96 128 122 1860 161 806 1075 19 96 128 123 1875 160 800 1066 19 96 128 124 1890 159 793 1058 19 96 128 125 1905 157 787 1050 19 96 128 126 1920 156 781 1041 19 96 128 127 1935 155 775 1034 19 96 128 128 1950 154 769 1026 19 96 128 129 1965 153 763 1018 19 96 128 130 1980 151 757 1010 19 96 128 131 1995 150 752 1002 19 96 128 132 2010 149 746 995 19 96 128 133 2026 148 740 987 19 96 128 134 2041 147 735 980 19 96 128 135 2056 146 729 972 19 96 128 136 2071 145 724 965 19 96 128 137 2087 144 719 958 19 96 128 138 2102 143 713 951 19 96 128 139 2117 142 708 944 19 96 128 140 2132 141 703 938 19 96 128 141 2148 140 698 931 19 96 128 142 2163 139 693 925 19 96 128 143 2178 138 689 918 19 96 128 144 2193 137 684 912 19 96 128 145 2208 136 679 905 19 96 128 146 2224 135 674 899 19 96 128 147 2239 134 670 893 19 96 128 148 2254 133 665 887 19 96 128 149 2269 132 661 881 19 96 128 150 2285 131 656 875 19 96 128 151 2300 130 652 869 19 96 128 152 2315 130 648 864 19 96 128 153 2330 129 644 858 19 96 128 154 2346 128 639 852 19 96 128 155 2361 127 635 847 19 96 128 156 2376 126 631 842 19 96 128 157 2391 125 627 836 19 96 128 158 2407 125 623 831 19 96 128 159 2422 124 619 826 19 96 128 160 2437 123 615 821 19 96 128 161 2452 122 612 815 19 96 128 162 2467 122 608 810 19 96 128 163 2483 121 604 805 19 96 128 164 2498 120 600 801 19 96 128 165 2513 119 597 796 19 96 128 166 2528 119 593 791 19 96 128 167 2544 118 590 786 19 96 128 168 2559 117 586 781 19 96 128 169 2574 117 583 777 19 96 128 170 2589 116 579 772 19 96 128 171 2605 115 576 768 19 96 128 172 2620 114 572 763 19 96 128 173 2635 114 569 759 19 96 128 174 2650 113 566 754 19 96 128 175 2666 113 563 750 19 96 128 176 2681 112 559 746 19 96 128 177 2696 111 556 742 19 96 128 178 2711 111 553 738 19 96 128 179 2726 110 550 733 19 96 128 180 2742 109 547 729 19 96 128 181 2757 109 544 725 19 96 128 182 2772 108 541 721 19 96 128 183 2787 108 538 717 19 96 128 184 2803 107 535 713 19 96 128 185 2818 106 532 710 19 96 128 186 2833 106 529 706 19 96 128 187 2848 105 527 702 19 96 128 188 2864 105 524 698 19 96 128 189 2879 104 521 695 19 96 128 190 2894 104 518 691 19 96 128 191 2909 103 516 687 19 96 128 192 2925 103 513 684 19 96 128 193 2940 102 510 680 19 96 128 194 2955 102 508 677 19 96 128 195 2970 101 505 673 19 96 128 196 2985 100 502 670 19 96 128 197 3001 100 500 666 19 96 128 198 3016 99 497 663 19 96 128 199 3031 99 495 660 19 96 128 200 3046 98 492 656 19 96 128 201 3062 98 490 653 19 96 128 202 3077 97 487 650 19 96 128 203 3092 97 485 647 19 96 128 204 3107 97 483 644 19 96 128 205 3123 96 480 640 19 96 128 206 3138 96 478 637 19 96 128 207 3153 95 476 634 19 96 128 208 3168 95 473 631 19 96 128 209 3183 94 471 628 19 96 128 210 3199 94 469 625 19 96 128 211 3214 93 467 622 19 96 128 212 3229 93 464 619 19 96 128 213 3244 92 462 616 19 96 128 214 3260 92 460 613 19 96 128 215 3275 92 458 611 19 96 128 216 3290 91 456 608 19 96 128 217 3305 91 454 605 19 96 128 218 3321 90 452 602 19 96 128 219 3336 90 450 599 19 96 128 220 3351 90 448 597 19 96 128 221 3366 89 446 594 19 96 128 222 3382 89 444 591 19 96 128 223 3397 88 442 589 19 96 128 224 3412 88 440 586 19 96 128 225 3427 88 438 583 19 96 128 226 3442 87 436 581 19 96 128 227 3458 87 434 578 19 96 128 228 3473 86 432 576 19 96 128 229 3488 86 430 573 19 96 128 230 3503 86 428 571 19 96 128 231 3519 85 426 568 19 96 128 232 3534 85 424 566 19 96 128 233 3549 85 423 563 19 96 128 234 3564 84 421 561 19 96 128 235 3580 84 419 559 19 96 128 236 3595 83 417 556 19 96 128 237 3610 83 415 554 19 96 128 238 3625 83 414 552 19 96 128 239 3641 82 412 549 19 96 128 240 3656 82 410 547 19 96 128 241 3671 82 409 545 19 96 128 242 3686 81 407 542 19 96 128 243 3701 81 405 540 19 96 128 244 3717 81 404 538 19 96 128 245 3732 80 402 536 19 96 128 246 3747 80 400 534 19 96 128 247 3762 80 399 532 19 96 128 248 3778 79 397 529 19 96 128 249 3793 79 395 527 19 96 128 250 3808 79 394 525 19 96 128 251 3823 78 392 523 19 96 128 252 3839 78 391 521 19 96 128 253 3854 78 389 519 19 96 128 254 3869 78 388 517 19 96 128 255 3884 77 386 515 19 96 128 256 3900 77 385 513 19 96 128 . . . . 1000 14653 20 102 136 20 100 133 1001 14667 20 102 136 20 100 133 1002 14682 20 102 136 20 100 133 1003 14696 20 102 136 20 100 133 1004 14710 20 102 136 20 100 133 1005 14725 20 102 136 20 100 133 1006 14739 20 102 136 20 100 133 1007 14754 20 102 136 20 100 133 1008 14768 20 102 135 20 100 133 1009 14783 20 101 135 20 100 133 1010 14797 20 101 135 20 100 133 1011 14812 20 101 135 20 100 133 1012 14826 20 101 135 20 100 133 1013 14841 20 101 135 20 100 133 1014 14855 20 101 135 20 100 133 1015 14869 20 101 134 20 100 133 1016 14884 20 101 134 20 100 133 1017 14898 20 101 134 20 100 133 1018 14913 20 101 134 20 100 133 1019 14927 20 100 134 20 100 133 1020 14942 20 100 134 20 100 133 1021 14956 20 100 134 20 100 133 1022 14971 20 100 134 20 100 133 1023 14985 20 100 133 20 100 133 1024 15000 20 100 133 20 100 133
You can use the following python script to generate this data
#!/bin/python # Allan McAleavy Created This. # Copyright (c) 2018 Allan McAleavy # Licensed under the Apache License, Version 2.0 (the "License") # Get QOS details for SolidFire I/O Sizes. import collections import math import argparse examples = """examples: ./table.py min_iops max_iops burst_iops """ # arguments parser = argparse.ArgumentParser( description="Gather performance data from SolidFire Arrays", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=examples) parser.add_argument("min", default=1500, help="Min IOPS") parser.add_argument("max", default=3000, help="Max IOPS") parser.add_argument("burst",default=200000, help="Burst IOPS") args = parser.parse_args() min_iops=int(args.min) max_iops=int(args.max) burst_iops=int(args.burst) costs = {4:100,8:160,16:270,32:500,64:1000,128:1950,256:3900,512:7600,1024:15000} od = collections.OrderedDict(sorted(costs.items())) print("%-8s %-8s %-8s %-8s %-8s %-8s %-8s %-8s " % ("IOSIZE","COST","MINIOPS","MAXIOPS","BIOPS","MINMB","MAXMB","BURSTMB")) for average_iopsize in range(1,1025): hbsize=0 if average_iopsize >=1: hbsize = int(pow(2, math.ceil(math.log(average_iopsize, 2)))) if hbsize < 4: hbsize = 4 lbsize = (hbsize /2) if lbsize < 4: lbsize = 4 lbcost = od[lbsize] hbcost = od[hbsize] costep = float(hbcost - lbcost ) / float(lbsize) curcost = ((average_iopsize - lbsize) * costep) + lbcost print ("%-8d %-8d %-8.0f %-8.0f %-8.0f %-8.0f %-8.0f %-8.0f" % (average_iopsize,curcost,(float(100)/float(curcost) * min_iops),(float(100)/float(curcost)) * max_iops,(float(100)/float(curcost) * burst_iops), (average_iopsize * (float(100)/float(curcost) * min_iops))/1024, (average_iopsize * (float(100)/float(curcost) * max_iops))/1024, (average_iopsize * (float(100)/float(curcost) * burst_iops))/1024 ))
And to run the script we input the min/max & burst IOPS figures.
$ ./table.py 3000 15000 20000 |more IOSIZE COST MINIOPS MAXIOPS BIOPS MINMB MAXMB BURSTMB 1 100 3000 15000 20000 3 15 20 2 100 3000 15000 20000 6 29 39 3 100 3000 15000 20000 9 44 59 4 100 3000 15000 20000 12 59 78 5 115 2609 13043 17391 13 64 85 6 130 2308 11538 15385 14 68 90 7 145 2069 10345 13793 14 71 94 8 160 1875 9375 12500 15 73 98
In the next post we will show how we connect to the SolidFire using the python API and monitor QOS values for a specific volume in realtime and what to look out for.
One thought on “SolidFire QOS Part 2”