{"id":1354,"date":"2018-02-24T05:26:40","date_gmt":"2018-02-24T03:26:40","guid":{"rendered":"https:\/\/community.virtono.com\/?p=1354"},"modified":"2023-06-21T08:43:56","modified_gmt":"2023-06-21T05:43:56","slug":"fio-basics","status":"publish","type":"post","link":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/fio-basics\/","title":{"rendered":"Fio basics"},"content":{"rendered":"<p><strong>Learn about Fio:<\/strong><\/p>\n<ol>\n<li><a href=\"https:\/\/virtono.com\/community\/news-announcements\/fio\" target=\"_blank\" rel=\"noopener\">Fio<\/a><\/li>\n<li><a href=\"https:\/\/virtono.com\/community\/news-announcements\/fio-basics\" target=\"_blank\" rel=\"noopener\">Fio Basics<\/a><\/li>\n<li><a href=\"https:\/\/virtono.com\/community\/news-announcements\/compile-fio\" target=\"_blank\" rel=\"noopener\">Compile Fio<\/a><\/li>\n<li><a href=\"https:\/\/www.virtono.com\/community\/tutorial-how-to\/visualize-fio-logs-with-fio2gnuplot\/\">Visualize Fio Logs with fio2gnuplot<\/a><\/li>\n<\/ol>\n<p>Fio is an acronym for\u00a0<b>Flexible IO Tester<\/b>\u00a0and refers to a tool for measuring IO performance.\u00a0With Fio, devices such as hard drives or SSDs can be tested for speed by\u00a0running\u00a0a user-defined\u00a0<b>workload<\/b>\u00a0and collecting performance data.\u00a0The following article provides answers to the most important questions that need to be answered prior to a performance test and their relationship with\u00a0<b>Fio parameters<\/b><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_73 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.virtono.com\/community\/tutorial-how-to\/fio-basics\/#Testing_an_entire_device_or_with_individual_files\" title=\"Testing an entire device or with individual files?\">Testing an entire device or with individual files?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.virtono.com\/community\/tutorial-how-to\/fio-basics\/#How_big_should_the_test_files_be\" title=\"How big should the test files be?\">How big should the test files be?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.virtono.com\/community\/tutorial-how-to\/fio-basics\/#Use_of_main_memory_especially_Page_Cache_under_Linux_or_use_of_Direct_I_O\" title=\"Use of main memory (especially Page Cache under Linux) or use of Direct I \/ O?\">Use of main memory (especially Page Cache under Linux) or use of Direct I \/ O?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.virtono.com\/community\/tutorial-how-to\/fio-basics\/#Which_block_size_should_be_used\" title=\"Which block size should be used?\">Which block size should be used?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.virtono.com\/community\/tutorial-how-to\/fio-basics\/#Sequential_or_Random_Access\" title=\"Sequential or Random Access?\">Sequential or Random Access?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.virtono.com\/community\/tutorial-how-to\/fio-basics\/#What_type_of_data_does_Fio_use\" title=\"What type of data does Fio use?\">What type of data does Fio use?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.virtono.com\/community\/tutorial-how-to\/fio-basics\/#How_can_parallel_accesses_be_performed\" title=\"How can parallel accesses be performed?\">How can parallel accesses be performed?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.virtono.com\/community\/tutorial-how-to\/fio-basics\/#libaio_and_iodepth\" title=\"libaio and iodepth\">libaio and iodepth<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.virtono.com\/community\/tutorial-how-to\/fio-basics\/#How_do_I_limit_the_duration_of_a_test\" title=\"How do I limit the duration of a test?\">How do I limit the duration of a test?<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Testing_an_entire_device_or_with_individual_files\"><\/span><span id=\"Testen_eines_ganzen_Devices_oder_mit_einzelnen_Dateien.3F\" class=\"mw-headline\">Testing an entire device or with individual files?<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>This question is\u00a0answered\u00a0via the parameter &#8221;\u00a0<b>&#8211;filename<\/b>\u00a0&#8220;.\u00a0For this parameter, either an entire block device can be entered or a file name can be specified.<\/p>\n<p><b>Attention<\/b>\u00a0: Using a block device overwrites the whole device!<\/p>\n<p>If the parameter is not used, Fio\u00a0<b>creates<\/b>\u00a0the test files\u00a0based on the parameter &#8221;\u00a0<b>&#8211;name<\/b>\u00a0&#8220;.\u00a0Specifying the size of the file is obligatory in this case, when using a block\u00a0device\u00a0without &#8221;\u00a0<b>&#8211;size<\/b>\u00a0&#8221; the whole device is used.<\/p>\n<pre>$ fio - rw = write - name = test --size = 10M\n[...]\n$ ls -sh\ntotally 10M\n10M test.1.0\n$ fio --rw = write --name = test --size = 10M --filename = file1\n[...]\n$ ls -sh\ntotally 10M\n10M file1\n<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"How_big_should_the_test_files_be\"><\/span><span id=\"Wie_gro.C3.9F_sollen_die_Test-Dateien_werden.3F\" class=\"mw-headline\">How big should the test files be?<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The parameter &#8221;\u00a0<b>&#8211;size<\/b>\u00a0&#8221; indicates the size of the files.\u00a0By means of &#8221;\u00a0<b>&#8211;filename<\/b>\u00a0&#8221; an entire block device used, the whole device is used without a &#8220;&#8211;size&#8221;.<\/p>\n<pre>$ fio - rw = write - name = test - size = 20M\n[...]\n$ ls -sh\ntotally 20M\n20M test.1.0\n<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Use_of_main_memory_especially_Page_Cache_under_Linux_or_use_of_Direct_I_O\"><\/span><span id=\"Verwendung_des_Arbeitsspeichers_.28v.a._Page_Cache_unter_Linux.29_oder_Einsatz_von_Direct_I.2FO.3F\" class=\"mw-headline\">Use of main memory (especially Page Cache under Linux) or use of Direct I \/ O?<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The use of &#8221;\u00a0<b>&#8211;direct = 1<\/b>\u00a0&#8221;\u00a0activates\u00a0the use of\u00a0Direct_und_synchronized_I \/ O_unter_Linux # O_DIRECT Direct I \/ O.\u00a0This means, above all, that the\u00a0<b>page cache is bypassed<\/b>\u00a0and therefore\u00a0the\u00a0<b>memory<\/b>\u00a0is\u00a0<b>no<\/b>\u00a0longer\u00a0used.<b><\/b><\/p>\n<p>For the use of asynchronous accesses (eg via the library libaio) &#8220;&#8211;direct&#8221; is a prerequisite because the page cache can not be addressed asynchronously.<\/p>\n<pre> \n$ fio - rw = write - name = test --size = 20M --direct = 1\n[...]\nRun status group 0 (all jobs):\n  WRITE: io = 20480KB, aggrb = 28563KB \/ s\n<\/pre>\n<p>Without &#8220;&#8211;direct&#8221; the speed of the main memory is measured:<\/p>\n<pre>$ fio - rw = write - name = test - size = 20M\n[...]\nRun status group 0 (all jobs):\n  WRITE: io = 20480KB, aggrb = 930909KB \/ s\n<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Which_block_size_should_be_used\"><\/span><span id=\"Welche_Blockgr.C3.B6.C3.9Fe_soll_eingesetzt_werden.3F\" class=\"mw-headline\">Which block size should be used?<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>By default, 4 KB is used as the block size.\u00a0The\u00a0desired block size can be passed to the\u00a0parameter &#8221;\u00a0<b>-bs<\/b>\u00a0&#8220;:<\/p>\n<pre>$ fio - rw = write - name = test --size = 20M --direct = 1\ntest: (g = 0): rw = write, bs = 4K-4K \/ 4K-4K\n[...]\n$ fio --rw = write --name = test --size = 20M --direct = 1 --bs = 1024k\ntest: (g = 0): rw = write, bs = 1M-1M \/ 1M-1M, ioengine = sync, iodepth = 1\n<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Sequential_or_Random_Access\"><\/span><span id=\"Sequentielle_oder_Zuf.C3.A4llige_Zugriffe.3F\" class=\"mw-headline\">Sequential or Random Access?<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The parameter &#8221;\u00a0<b>&#8211;rw<\/b>\u00a0&#8221; decides whether the IO accesses are issued sequentially or randomly.\u00a0Once you have decided on a variant, it is also possible to define a mixed workload, for example 50% read and 50% write.\u00a0The following options are available for &#8220;&#8211;rw&#8221;:<\/p>\n<ul>\n<li><b>read<\/b>\u00a0&#8211; Sequential reading<\/li>\n<li><b>write<\/b>\u00a0&#8211; Sequential Write<\/li>\n<li><b>randread<\/b>\u00a0&#8211; random reading<\/li>\n<li><b>randwrite<\/b>\u00a0&#8211; random writing<\/li>\n<li><b>readwrite<\/b>\u00a0,\u00a0<b>rw<\/b>\u00a0&#8211; Mixed, sequential workload<\/li>\n<li><b>randrw<\/b>\u00a0&#8211; Mixed Random Workload<\/li>\n<\/ul>\n<p>By default, for a mixed workload, the read and write percentages are set to 50% \/ 50%.\u00a0In order to achieve a different distribution, the parameter &#8221;\u00a0<b>&#8211;rwmixread<\/b>&#8221; or &#8221;\u00a0<b>&#8211;rwmixwrite<\/b>\u00a0&#8221; can also be specified.<\/p>\n<pre>$ fio - rw = readwrite --name = test --size = 20M --direct = 1 --bs = 1024k\n[...]\n  read: io = 11264KB, bw = 54154KB \/ s, iops = 52, run = 208msec\n[...]\n  write: io = 9216.0KB, bw = 44308KB \/ s, iops = 43, run = 208msec\n[...]\nDisk stats (read \/ write):\n  sda: ios = 14\/12, merge = 0\/0, ticks = 156\/76, in_queue = 232, util = 54.55%\n<\/pre>\n<p>With an 80% to 20% split the result is:<\/p>\n<pre>$ fio - rw = readwrite --name = test --size = 20M --direct = 1 --bs = 1024k --rwmixread = 80\n[...]\n  read: io = 17408KB, bw = 83292KB \/ s, iops = 81, run = 209msec\n[...]\n  write: io = 3072.0KB, bw = 14699KB \/ s, iops = 14, run = 209msec\n[...]\nDisk stats (read \/ write):\n  sda: ios = 24\/3, merge = 0\/0, ticks = 192\/16, in_queue = 216, util = 56.67%\n<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"What_type_of_data_does_Fio_use\"><\/span><span id=\"Welche_Art_von_Daten_setzt_Fio_ein.3F\" class=\"mw-headline\">What type of data does Fio use?<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Fio\u00a0<b>always<\/b>\u00a0uses\u00a0<b>random data<\/b>\u00a0.\u00a0To reduce the overhead of generating the random data, a buffer of random data is created at the beginning, which is used continuously during the test.\u00a0In most cases, however, these random data should also be compressible.<\/p>\n<p>This reuse of the buffer in actual SSDs (eg, the\u00a0Intel 520 Series SSDs\u00a0) actually causes the SSD controller to compress data.\u00a0Performance is almost the same as when all zeros are used as data &#8211; eg with option &#8221;\u00a0<b>&#8211;zero_buffers<\/b>\u00a0&#8220;.<\/p>\n<p>To\u00a0<b>bypass<\/b>\u00a0this\u00a0<b>SSD compression effect<\/b>\u00a0, Fio can be\u00a0instructed\u00a0with &#8221;\u00a0<b>&#8211;refill_buffers<\/b>\u00a0&#8221; to refill the buffer for each IO\u00a0<b>submit<\/b>\u00a0:<\/p>\n<blockquote><p><i>refill_buffers If this option is given, fio will refill the IO buffer on every submit.<\/i><\/p><\/blockquote>\n<p>Here is an example demonstrating the above effect with the\u00a0Intel 520 Series SSDs\u00a0.<\/p>\n<ul>\n<li>By default, data can be compressed.\u00a0See the specifications in (intel.com):\n<ul>\n<li>Compressible Performance &#8211; Sequential Write Sata 6Gbps: 520MB \/ sec<\/li>\n<li>Incompressible Performance &#8211; Sequential Write (up to): 235 MB \/ s<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre>\/ usr \/ local \/ bin \/ fio - rw = write --name = intel520-run0 --bs = 128k --direct = 1 --filename = \/ dev \/ sdb --numjobs = 1 --ioengine = libaio - iodepth = 32\nintel520-run0: (g = 0): rw = write, bs = 128k-128k \/ 128k-128k, ioengine = libaio, iodepth = 32\nJobs: 1 (f = 1): [W] [100.0% done] [0K \/ 475.7M \/ s] [0\/3629 iops] [eta 00m: 00s]\n  write: io = 228937MB, bw = 394254KB \/ s, iops = 3080, run = 594619msec\n<\/pre>\n<p>With &#8220;&#8211;zero_buffers&#8221; the performance stays almost the same:<\/p>\n<pre>\/ usr \/ local \/ bin \/ fio - rw = write --name = intel520-run0 --bs = 128k --direct = 1 --filename = \/ dev \/ sdb --numjobs = 1 --ioengine = libaio - iodepth = 32 - zero_buffers\nintel520-run0: (g = 0): rw = write, bs = 128k-128k \/ 128k-128k, ioengine = libaio, iodepth = 32\nJobs: 1 (f = 1): [W] [100.0% done] [0K \/ 490.4M \/ s] [0\/3741 iops] [eta 00m: 00s]\nintel520-run0: (groupid = 0, jobs = 1): err = 0: pid = 13274\n  write: io = 228937MB, bw = 401393KB \/ s, iops = 3135, run = 584044msec\n<\/pre>\n<p>With the option &#8220;&#8211;refill-buffers&#8221; the Incompressible Performance is achieved:<\/p>\n<pre>\/ usr \/ local \/ bin \/ fio - rw = write --name = intel520-run0 --bs = 128k --direct = 1 --filename = \/ dev \/ sdb --numjobs = 1 --ioengine = libaio - iodepth = 32 --refill_buffers\nJobs: 1 (f = 1): [W] [100.0% done] [0K \/ 242.8M \/ s] [0\/1852 iops] [eta 00m: 00s]\nintel520-run0: (groupid = 0, jobs = 1): err = 0: pid = 13289\n  write: io = 228937MB, bw = 203629KB \/ s, iops = 1590, run = 1151267msec\n<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"How_can_parallel_accesses_be_performed\"><\/span><span id=\"Wie_k.C3.B6nnen_parallele_Zugriffe_durchgef.C3.BChrt_werden.3F\" class=\"mw-headline\">How can parallel accesses be performed?<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Parallel accesses can be realized via different ways.\u00a0On the one hand, several processes can be started which execute jobs in parallel (&#8221;\u00a0<b>&#8211;numjobs<\/b>\u00a0&#8220;), on the other hand,\u00a0<b>the I \/ O depth<\/b>\u00a0can be increased by means of an\u00a0<b>asynchronous I \/ O engine<\/b>\u00a0.\u00a0Especially for SSDs, parallel I \/ O requests increase performance as SSDs internally have several Flash channels for processing (see\u00a0Intel SSDs at a glance\u00a0).<\/p>\n<ul>\n<li>numjobs<\/li>\n<\/ul>\n<p>Specifies the number of processes that each generate the defined workload (default 1).\u00a0Values&gt; 1 generate numbjobs = n, n parallel processes that execute the same workload \/ job.\u00a0Especially the parameter &#8221;\u00a0<b>&#8211;size<\/b>\u00a0&#8221; has to be considered, because eg with numjobs = 4, 4 * size storage space is needed.<\/p>\n<ul>\n<li>group_reporting<\/li>\n<\/ul>\n<p>When enabled, this option generates a group report for tests with numjobs&gt; 1 (instead of individual job reports).<\/p>\n<pre>$ fio - rw = readwrite --name = test --size = 50M --direct = 1 --bs = 1024k --numjobs = 2\ntest: (g = 0): rw = rw, bs = 1M-1M \/ 1M-1M, ioengine = sync, iodepth = 1\ntest: (g = 0): rw = rw, bs = 1M-1M \/ 1M-1M, ioengine = sync, iodepth = 1\nfio-2.0.8-9-gfb9f0\nStarting 2 processes\n[...]\ntest: (groupid = 0, jobs = 1): err = 0: pid = 25753: Thu Aug 30 10:40:30 2012\n[...]\ntest: (groupid = 0, jobs = 1): err = 0: pid = 25754: Thu Aug 30 10:40:30 2012\n[...]\n$ ls -sh\ntotally 100M\n50M test.1.0 50M test.2.0\n<\/pre>\n<p>&#8220;&#8211;group_reporting&#8221; summarizes the statistics:<\/p>\n<pre>$ fio --rw = readwrite --name = test --size = 50M --direct = 1 --bs = 1024k --numjobs = 2 --group_reporting\ntest: (g = 0): rw = rw, bs = 1M-1M \/ 1M-1M, ioengine = sync, iodepth = 1\ntest: (g = 0): rw = rw, bs = 1M-1M \/ 1M-1M, ioengine = sync, iodepth = 1\nfio-2.0.8-9-gfb9f0\nStarting 2 processes\nJobs: 2 (f = 2)\ntest: (groupid = 0, jobs = 2): err = 0: pid = 25773: Thu Aug 30 10:43:00 2012\n  read: io = 56320KB, bw = 41020KB \/ s, iops = 40, run = 1373msec\n[...]\n$ ls -sh\ntotally 100M\n50M test.1.0 50M test.2.0\n<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"libaio_and_iodepth\"><\/span><span id=\"libaio_und_iodepth\" class=\"mw-headline\">libaio and iodepth<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>libaio\u00a0\u00a0enables asynchronous access from the application level.\u00a0This allows parallel I \/ O requests to be issued.\u00a0The parameter &#8221;\u00a0<b>&#8211;iodepth<\/b>\u00a0&#8221; can be used to specify the number of requests.\u00a0&#8221;\u00a0<b>&#8211;libaio<\/b>\u00a0&#8221; also requires the option &#8220;-\u00a0<b>-direct = 1<\/b>\u00a0&#8221; because the page cache can not be addressed asynchronously under Linux:<\/p>\n<p>Here&#8217;s an example using 16 as the IO depth:<\/p>\n<pre>$ fio --rw = readwrite --name = test --size = 50M --direct = 1 --bs = 1024k --ioengine = libaio --iodepth = 16\ntest: (g = 0): rw = rw, bs = 1M-1M \/ 1M-1M, ioengine = libaio, iodepth = 16\n[...]\n IO depths: 1 = 2.0%, 2 = 4.0%, 4 = 8.0%, 8 = 16.0%, 16 = 70.0%, 32 = 0.0%,&gt; = 64 = 0.0%\n[...]\n<\/pre>\n<p>As the example shows, the exact distribution of the IO depths can be checked after a job run.\u00a0This is advantageous in that, because of OS restrictions, the IO depth can not always be forced:<\/p>\n<blockquote><p><i>Even async engines may impose OS restrictions causing the desired depth not to be [&#8230;] achieved.<\/i><\/p><\/blockquote>\n<h2><span class=\"ez-toc-section\" id=\"How_do_I_limit_the_duration_of_a_test\"><\/span><span id=\"Wie_beschr.C3.A4nke_ich_die_Laufzeit_eines_Tests.3F\" class=\"mw-headline\">How do I limit the duration of a test?<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>How long a test should run can be\u00a0specified\u00a0by the parameter &#8221;\u00a0<b>&#8211;runtime<\/b>\u00a0&#8220;.\u00a0If you want to make sure that the test is not ended earlier than the specified time, the parameter &#8221;\u00a0<b>&#8211;time_based<\/b>\u00a0&#8221;\u00a0is recommended\u00a0.\u00a0It repeats the workload until the desired runtime has been reached.<\/p>\n<pre>$ fio --rw = readwrite --name = test --size = 50M --direct = 1 --bs = 1024k --numjobs = 2 --group_reporting --runtime = 2\n[...]\n  read: io = 50176KB, bw = 36545KB \/ s, iops = 35, run = 1373msec\n[...]\n<\/pre>\n<p>The duration of this test is 1.373 seconds, despite the specification of &#8220;&#8211;runtime&#8221;.\u00a0With &#8220;&#8211;time_based&#8221; the exact runtime can be reached:<\/p>\n<pre>$ fio --rw = readwrite --name = test --size = 50M --direct = 1 --bs = 1024k --numjobs = 2 --group_reporting --runtime = 2 --time_based\n[...]\n  read: io = 77824KB, bw = 38718KB \/ s, iops = 37, run = 2010msec\n[...]\n<\/pre>\n<p>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn about Fio: Fio Fio Basics Compile Fio Visualize Fio Logs with fio2gnuplot Fio is an acronym for\u00a0Flexible IO Tester\u00a0and refers to a tool for measuring IO performance.\u00a0With Fio, devices such as hard drives or SSDs can be tested for speed by\u00a0running\u00a0a user-defined\u00a0workload\u00a0and collecting performance data.\u00a0The following article provides answers<\/p>\n","protected":false},"author":4,"featured_media":1359,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3],"tags":[],"class_list":["post-1354","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial-how-to"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2018\/02\/handson-lab-how-to-unleash-your-storage-performance-by-using-nvm-express-based-pci-express-solidstate-drives-30-638.jpg?fit=638%2C359&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p7ISfL-lQ","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1355,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/compile-fio\/","url_meta":{"origin":1354,"position":0},"title":"Compile Fio","author":"Shreyash Sharma","date":"February 25, 2018","format":false,"excerpt":"Learn about Fio: Fio Fio Basics Compile Fio Visualize Fio Logs with fio2gnuplot Fio\u00a0is a tool for measuring IO performance.\u00a0This article shows how you can\u00a0compile\u00a0Fio yourself with the associated source code\u00a0.\u00a0You can also use the source code from the git repository. Obtain source code By download The Fio source code\u2026","rel":"","context":"In &quot;Tutorials&quot;","block_context":{"text":"Tutorials","link":"https:\/\/www.virtono.com\/community\/category\/tutorial-how-to\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2018\/02\/97b5ea945a196ef49b38d973fbc02d9c_medium.png?fit=555%2C480&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2018\/02\/97b5ea945a196ef49b38d973fbc02d9c_medium.png?fit=555%2C480&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2018\/02\/97b5ea945a196ef49b38d973fbc02d9c_medium.png?fit=555%2C480&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":1353,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/fio\/","url_meta":{"origin":1354,"position":1},"title":"Fio","author":"Shreyash Sharma","date":"February 23, 2018","format":false,"excerpt":"Learn about Fio: Fio Fio Basics Compile Fio Visualize Fio Logs with fio2gnuplot What is Fio? Fio\u00a0(Flexible I \/ O Tester) is an I \/ O performance benchmarking tool for Linux, other Unix systems as well as Windows.\u00a0Fio's author is\u00a0Jens Axboe\u00a0, maintainer of the block layer of the Linux kernel.In\u2026","rel":"","context":"In &quot;Tutorials&quot;","block_context":{"text":"Tutorials","link":"https:\/\/www.virtono.com\/community\/category\/tutorial-how-to\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2018\/02\/dotlayer.com-how-to-use-fio-to-measure-disk-performance-in-linux.jpeg?fit=1200%2C672&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2018\/02\/dotlayer.com-how-to-use-fio-to-measure-disk-performance-in-linux.jpeg?fit=1200%2C672&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2018\/02\/dotlayer.com-how-to-use-fio-to-measure-disk-performance-in-linux.jpeg?fit=1200%2C672&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2018\/02\/dotlayer.com-how-to-use-fio-to-measure-disk-performance-in-linux.jpeg?fit=1200%2C672&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2018\/02\/dotlayer.com-how-to-use-fio-to-measure-disk-performance-in-linux.jpeg?fit=1200%2C672&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":1356,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/visualize-fio-logs-with-fio2gnuplot\/","url_meta":{"origin":1354,"position":2},"title":"Visualize Fio Logs with fio2gnuplot","author":"Daniel Draga","date":"February 26, 2018","format":false,"excerpt":"Learn about Fio: Fio Fio Basics Compile Fio Visualize Fio Logs with fio2gnuplot Fio offers the possibility to\u00a0log\u00a0the performance values with\u00a0log files\u00a0during test runs\u00a0.\u00a0At certain intervals, the achieved\u00a0performance values are written\u00a0to a file.\u00a0fio2gnuplot\u00a0is a script that\u00a0generates\u00a0graphs\u00a0from these log files\u00a0.\u00a0It can also\u00a0generate\u00a0comparative\u00a0graphs\u00a0from multiple logs\u00a0. installation fio2gnuplot\u00a0since\u00a0Fio\u00a0Version 2.1.2 part of Fio.\u00a0Under\u00a0Ubuntu 14.04\u2026","rel":"","context":"In &quot;Tutorials&quot;","block_context":{"text":"Tutorials","link":"https:\/\/www.virtono.com\/community\/category\/tutorial-how-to\/"},"img":{"alt_text":"Fio2gp-512K-seq-read bw-2Draw.png","src":"https:\/\/i0.wp.com\/www.thomas-krenn.com\/de\/wikiDE\/images\/thumb\/3\/34\/Fio2gp-512K-seq-read_bw-2Draw.png\/120px-Fio2gp-512K-seq-read_bw-2Draw.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":297,"url":"https:\/\/www.virtono.com\/community\/knowledgebase\/mysql-indexing\/","url_meta":{"origin":1354,"position":3},"title":"MySQL Indexing","author":"Daniel Draga","date":"August 7, 2016","format":false,"excerpt":"This article is a fraction of a Number of Articles on MySQL, to access them click here. MySQL Indexing \u00a0 MySQL documentation says: The best way to improve the performance of SELECT operations is to create indexes on one or more of the columns that are tested in the query.\u2026","rel":"","context":"In &quot;Knowledgebase&quot;","block_context":{"text":"Knowledgebase","link":"https:\/\/www.virtono.com\/community\/category\/knowledgebase\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2016\/08\/MySQL_Replication1-3.png?fit=715%2C262&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2016\/08\/MySQL_Replication1-3.png?fit=715%2C262&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2016\/08\/MySQL_Replication1-3.png?fit=715%2C262&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2016\/08\/MySQL_Replication1-3.png?fit=715%2C262&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":3913,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/how-to-install-rust-on-ubuntu-22-04\/","url_meta":{"origin":1354,"position":4},"title":"How to Install Rust on Ubuntu 22.04","author":"George B.","date":"September 21, 2023","format":false,"excerpt":"This step-by-step guide will walk you through the process of installing Rust on Ubuntu 22.04, ensuring a seamless experience for both beginners and experienced developers. Rust has become a strong and cutting-edge option in the world of programming languages. Its emphasis on concurrency, performance, and safety has drawn developers from\u2026","rel":"","context":"In &quot;Tutorials&quot;","block_context":{"text":"Tutorials","link":"https:\/\/www.virtono.com\/community\/category\/tutorial-how-to\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2023\/09\/How-to-Install-Rust-on-Ubuntu.png?fit=360%2C240&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1216,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/samba-server-basics\/","url_meta":{"origin":1354,"position":5},"title":"Samba server basics","author":"Shreyash Sharma","date":"October 31, 2017","format":false,"excerpt":"A\u00a0Samba server\u00a0supports the integration of\u00a0Windows and Unix \/ Linux computers\u00a0.\u00a0For example,\u00a0files can be\u00a0exchanged or\u00a0printers can be\u00a0shared.\u00a0The name Samba originates from the\u00a0Server Message Block\u00a0(SMB) protocol\u00a0, which is used in Windows for network-based data exchange.\u00a0Currently, instead of SMB again and again from the \"\u00a0Common Internet File System\u00a0\" (CIFS) spoken.\u00a0CIFS is an evolution\u2026","rel":"","context":"In &quot;Tutorials&quot;","block_context":{"text":"Tutorials","link":"https:\/\/www.virtono.com\/community\/category\/tutorial-how-to\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/samba-6.jpg?fit=804%2C541&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/samba-6.jpg?fit=804%2C541&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/samba-6.jpg?fit=804%2C541&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/samba-6.jpg?fit=804%2C541&ssl=1&resize=700%2C400 2x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/posts\/1354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/comments?post=1354"}],"version-history":[{"count":5,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/posts\/1354\/revisions"}],"predecessor-version":[{"id":3522,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/posts\/1354\/revisions\/3522"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/media\/1359"}],"wp:attachment":[{"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/media?parent=1354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/categories?post=1354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/tags?post=1354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}