{"id":21,"date":"2025-10-24T11:32:47","date_gmt":"2025-10-24T11:32:47","guid":{"rendered":"https:\/\/virtualserversvps.com\/blog\/?p=21"},"modified":"2026-10-27T22:03:29","modified_gmt":"2026-10-27T22:03:29","slug":"how-to-benchmark-disk-iops-on-a-vps","status":"publish","type":"post","link":"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/","title":{"rendered":"How to Benchmark Disk IOPS on a VPS with fio: Queue Depth and Latency That Actually Matter"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A 4k random read test that returns 40,000 IOPS on Monday and 12,000 IOPS on Tuesday is not measuring the same thing twice. Queue depth, block size, filesystem cache and the guest&#8217;s block layer all change the result, and most benchmark blog posts change them silently between runs. The number that matters for a database or a mail server is not peak IOPS at queue depth 256 with a warm page cache \u2014 it is <strong>sustained<\/strong> 4k random IOPS at the queue depth your workload actually generates, measured after the cache has been bypassed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is a fixed fio protocol that produces comparable numbers across VPS providers. Every test below states what it measures, the fio flags that make it honest, and the threshold that separates a plan with real NVMe from one with a capped virtual disk. The whole sequence takes about 12 minutes on a 2 vCPU instance.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Understand what the disk path actually is<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before running fio, establish three facts about the device: whether it is rotational, which scheduler is attached, and what the provider&#8217;s throttle is. A KVM guest on NVMe still presents a virtio-blk or virtio-scsi device, and the host may enforce an IOPS cap below the physical capability of the drive.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>lsblk -d -o NAME,ROTA,SCHED,SIZE,MODEL\ncat \/sys\/block\/vda\/queue\/scheduler\ncat \/sys\/block\/vda\/queue\/nr_requests\ncat \/sys\/block\/vda\/queue\/rotational\n# physical block size and alignment\ncat \/sys\/block\/vda\/queue\/physical_block_size\ncat \/sys\/block\/vda\/queue\/logical_block_size<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ROTA=0<\/code> means the guest is told the device is non-rotational. That is a hint, not a guarantee \u2014 providers routinely present SATA SSDs and network-backed block storage as non-rotational. <code>nr_requests<\/code> tells you the queue depth the kernel will use; values of 128 or 256 are typical for virtio-blk, and the host may collapse anything beyond a much smaller internal queue.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why direct I\/O is mandatory for honest results<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Without <code>--direct=1<\/code>, fio writes into the page cache. A 2 GB test file on a box with 4 GB of RAM is served entirely from memory after the first pass, and you measure RAM bandwidth rather than storage. The same applies to reads: the second run of a read test on a cached file will report hundreds of thousands of IOPS because no I\/O reached the device.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>--direct=1<\/code> \u2014 bypass the page cache, force every operation to the device<\/li>\n<li><code>--iodepth=32<\/code> \u2014 queue depth; match your workload, 16\u201332 is realistic for a database<\/li>\n<li><code>--numjobs=4<\/code> \u2014 concurrency; four jobs at depth 32 gives an effective queue depth of 128<\/li>\n<li><code>--runtime=60 --time_based<\/code> \u2014 fixed duration so results are comparable run to run<\/li>\n<li><code>--ramp_time=10<\/code> \u2014 discard the first 10 seconds while the queue fills<\/li>\n<li><code>--size=2G<\/code> per job \u2014 large enough to defeat any remaining cache, small enough to finish<\/li>\n<li><code>--output-format=json<\/code> \u2014 parse it, do not eyeball the text table<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If you are still deciding which plan to rent, <a href=\"https:\/\/virtualserversvps.com\/\">the VPS plans listed on the main site<\/a> document the storage type per tier, which is the single most useful column on any provider comparison page.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The four tests that matter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run these in order. Each one answers a different question, and a provider that passes the first and fails the second is a common pattern: fast burst, hard throttle.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Test 1: 4k random read, queue depth 32<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>fio --name=randread4k \\\n  --filename=\/root\/fio-test.bin --size=2G --direct=1 \\\n  --rw=randread --bs=4k --iodepth=32 --numjobs=1 \\\n  --ioengine=libaio --runtime=60 --time_based --ramp_time=10 \\\n  --group_reporting --output-format=json > \/root\/randread4k.json\njq '.jobs[0].read.iops, .jobs[0].read.clat_ns.mean\/1000' \/root\/randread4k.json<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Read the IOPS and the mean completion latency together. A plan reporting 45,000 IOPS at 0.7 ms is healthy NVMe. A plan reporting 45,000 IOPS at 14 ms is not doing 45,000 IOPS \u2014 it is queueing, and the reported figure is the rate at which a saturated queue drains. Divide IOPS by 1000 and compare to latency in milliseconds: if mean latency in ms is roughly queue depth divided by IOPS in thousands, the device is saturated and the number is a ceiling.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Test 2: 4k random read at queue depth 1<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>fio --name=randread4k-qd1 \\\n  --filename=\/root\/fio-test.bin --size=1G --direct=1 \\\n  --rw=randread --bs=4k --iodepth=1 --numjobs=1 \\\n  --ioengine=libaio --runtime=60 --time_based --ramp_time=5 \\\n  --group_reporting --output-format=json > \/root\/randread4k-qd1.json<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Queue depth 1 is latency, not throughput, and it is the number that governs interactive responsiveness: SSH login time, PHP request latency on an uncached page, a single-threaded MySQL query plan. Healthy NVMe delivers 12,000\u201318,000 IOPS at depth 1, which is 55\u201380 \u00b5s. Below 5,000 IOPS at depth 1 (200 \u00b5s or worse) you are looking at network-attached storage, and no amount of tuning inside the guest will change it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Test 3: sustained random write for 5 minutes<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>fio --name=randwrite4k-5min \\\n  --filename=\/root\/fio-test.bin --size=4G --direct=1 \\\n  --rw=randwrite --bs=4k --iodepth=32 --numjobs=1 \\\n  --ioengine=libaio --runtime=300 --time_based \\\n  --group_reporting --output-format=json > \/root\/randwrite4k.json<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is the test that exposes burst credits and write throttles. Watch the IOPS in 10-second intervals rather than the aggregate; the useful signal is the shape of the curve, not its average. A device that starts at 30,000 IOPS and settles at 4,000 after 30 seconds has a token bucket, and the sustained figure is the one your database will live with.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fio --name=randwrite-timeline \\\n  --filename=\/root\/fio-test.bin --size=4G --direct=1 \\\n  --rw=randwrite --bs=4k --iodepth=32 --numjobs=1 \\\n  --ioengine=libaio --runtime=300 --time_based \\\n  --write_iops_log=\/root\/w-iops --log_avg_msec=10000 \\\n  --output-format=json\nawk -F, '{printf \"%6.0fs  %8d iops\\n\", $1\/1000, $2}' \/root\/w-iops_iops.1.log<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Test 4: sequential throughput at 1 MB blocks<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>fio --name=seqread1m \\\n  --filename=\/root\/fio-test.bin --size=4G --direct=1 \\\n  --rw=read --bs=1M --iodepth=16 --numjobs=1 \\\n  --ioengine=libaio --runtime=60 --time_based \\\n  --group_reporting --output-format=json<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sequential bandwidth matters for backups, log shipping and image pulls, and it is where virtualized and network storage most often underperform: 200\u2013600 MB\/s is normal for a single virtio queue on KVM NVMe, while network-backed volumes often cap near 120 MB\/s per client. This test rarely fails on real NVMe and frequently fails on cloud block storage sold as &#8220;SSD&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reference results from a 4 vCPU KVM plan<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The table below is what the four tests returned on an Ubuntu 24.04 guest with 8 GB RAM on KVM with host-side NVMe, run three times on separate nights to catch noisy-neighbour variance. Treat these as the healthy band, not as a leaderboard.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Test<\/th><th>Expected<\/th><th>Warning<\/th><th>Walk away<\/th><\/tr><\/thead><tbody><tr><td>4k read, QD32 (IOPS)<\/td><td>40k\u2013120k<\/td><td>15k\u201340k<\/td><td>&lt; 10k<\/td><\/tr><tr><td>4k read, QD1 (IOPS)<\/td><td>12k\u201318k<\/td><td>5k\u201312k<\/td><td>&lt; 4k<\/td><\/tr><tr><td>4k write sustained 5 min<\/td><td>&gt; 8k<\/td><td>3k\u20138k<\/td><td>&lt; 2k or 5\u00d7 drop from burst<\/td><\/tr><tr><td>1M seq read (MB\/s)<\/td><td>400\u20131500<\/td><td>150\u2013400<\/td><td>&lt; 120<\/td><\/tr><tr><td>Run-to-run variance<\/td><td>&lt; 10%<\/td><td>10\u201330%<\/td><td>&gt; 30%<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Variance is the column most people ignore. An instance that hits 60,000 IOPS once and 22,000 the next night is sharing a saturated host, and the p99 latency in production will be defined by the bad nights. Run each test three times at the same hour and compute the spread before drawing a conclusion.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Removing guest-side noise before you blame the provider<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Half of all &#8220;slow disk&#8221; reports are the guest fighting itself. Drop caches between runs, confirm no background job is running, and check whether the scheduler or a filesystem mount option is imposing overhead.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sync; echo 3 > \/proc\/sys\/vm\/drop_caches\n# confirm nothing is using the device\niostat -x 5 3\n# if journald or a package manager is holding I\/O, stop it for the test\nsystemctl stop unattended-upgrades apt-daily.timer apt-daily-upgrade.timer<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On ext4, testing an empty freshly-formatted filesystem skews results because allocation is fully sequential. Create the test file, write it once, delete it, and re-create it before measuring \u2014 or use a raw block device (<code>--filename=\/dev\/vdb<\/code>) to eliminate the filesystem entirely. Raw-device numbers are the cleanest comparison across providers, but never run a destructive test against a device with data; use a scratch volume.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Interpreting the numbers against your workload<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>PostgreSQL \/ MySQL:<\/strong> the QD1 number drives read latency and the sustained write number drives checkpoint behaviour. A plan that fails the 5-minute write test will produce write stalls every checkpoint interval.<\/li>\n<li><strong>Mail servers and log ingestion:<\/strong> sustained small writes, high concurrency. Fail test 3 and you have found your problem.<\/li>\n<li><strong>Static web and CDN origin:<\/strong> mostly QD1 reads and page cache. Test 2 is the only one that matters.<\/li>\n<li><strong>Backups and container image pulls:<\/strong> sequential bandwidth. Test 4 is the gate.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The feature that separates a usable plan from a marketing one is not peak IOPS \u2014 it is the sustained floor and the variance. If you are comparing providers on this basis, <a href=\"https:\/\/virtualserversvps.com\/\">the storage and plan breakdown on the main site<\/a> lists which tiers use local NVMe versus network volumes, which determines most of the numbers above before you run a single test. For the deeper kernel-side tuning that follows measurement, <a href=\"https:\/\/virtualserversvps.com\/\">the technical guides index<\/a> covers scheduler choice and I\/O cgroup limits.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A 12-minute script to run the whole sequence<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/env bash\nset -euo pipefail\nDEV=\/root\/fio-test.bin\nrun() { fio --name=\"$1\" --filename=\"$DEV\" --direct=1 --ioengine=libaio \\\n         --output-format=json --group_reporting \"${@:2}\" > \"\/root\/$1.json\"; }\n\nfallocate -l 4G \"$DEV\"\nrun read-qd32 --size=2G --rw=randread --bs=4k --iodepth=32 --runtime=60 --time_based --ramp_time=10\nrun read-qd1  --size=1G --rw=randread --bs=4k --iodepth=1  --runtime=60 --time_based\nrun write-5m  --size=4G --rw=randwrite --bs=4k --iodepth=32 --runtime=300 --time_based\nrun seq-read  --size=4G --rw=read --bs=1M --iodepth=16 --runtime=60 --time_based\n\nfor f in read-qd32 read-qd1 write-5m seq-read; do\n  printf \"%-10s iops=%s  bw=%s MiB\/s  lat=%s us\\n\" \"$f\" \\\n    \"$(jq -r '.jobs[0].read.iops \/\/ .jobs[0].write.iops | floor' \/root\/$f.json)\" \\\n    \"$(jq -r '(.jobs[0].read.bw \/\/ .jobs[0].write.bw) \/ 1024 | floor' \/root\/$f.json)\" \\\n    \"$(jq -r '(.jobs[0].read.clat_ns.mean \/\/ .jobs[0].write.clat_ns.mean) \/ 1000 | floor' \/root\/$f.json)\"\ndone\nrm -f \"$DEV\"\necho done<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Run it on a fresh instance before you commit to a billing cycle, run it again at 9 a.m. local time the next day, and compare. The second run tells you more about the host than the first, because it includes the neighbours who share your physical device.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>A practical, measurement-first look at how KVM schedules vCPUs: steal time accounting, CPU shares and quotas, CFS throttling, and when CPU pinning actually helps.<\/p>\n","protected":false},"author":1,"featured_media":26,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":34,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-21","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vps-guides-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Benchmark Disk IOPS on a VPS with fio: Queue Depth and Latency That Actually Matter - Virtual Servers VPS Blog<\/title>\n<meta name=\"description\" content=\"Discover what a VPS (Virtual Private Server) is, how it works, and why it matters. Complete guide covering VPS definition, benefits, use cases, and how to choose the right VPS hosting for your needs.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Benchmark Disk IOPS on a VPS with fio: Queue Depth and Latency That Actually Matter\" \/>\n<meta property=\"og:description\" content=\"How to Benchmark Disk IOPS on a VPS with fio: Queue Depth and Latency That Actually Matter\" \/>\n<meta property=\"og:url\" content=\"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/\" \/>\n<meta property=\"og:site_name\" content=\"Virtual Servers VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-24T11:32:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-27T22:03:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2025\/10\/ScreenShot_2025-10-24_192044_396.png\" \/>\n\t<meta property=\"og:image:width\" content=\"663\" \/>\n\t<meta property=\"og:image:height\" content=\"624\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Virtual-Servers-Vps-Editor\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Virtual-Servers-Vps-Editor\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/\",\"name\":\"How to Benchmark Disk IOPS on a VPS with fio: Queue Depth and Latency That Actually Matter - Virtual Servers VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2025\/10\/ScreenShot_2025-10-24_192044_396.png\",\"datePublished\":\"2025-10-24T11:32:47+00:00\",\"dateModified\":\"2026-10-27T22:03:29+00:00\",\"author\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\"},\"description\":\"Discover what a VPS (Virtual Private Server) is, how it works, and why it matters. Complete guide covering VPS definition, benefits, use cases, and how to choose the right VPS hosting for your needs.\",\"breadcrumb\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/#primaryimage\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2025\/10\/ScreenShot_2025-10-24_192044_396.png\",\"contentUrl\":\"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2025\/10\/ScreenShot_2025-10-24_192044_396.png\",\"width\":663,\"height\":624,\"caption\":\"Discover what a VPS (Virtual Private Server) is, how it works, and why it matters. Complete guide covering VPS definition, benefits, use cases, and how to choose the right VPS hosting for your needs.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/virtualserversvps.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Benchmark Disk IOPS on a VPS with fio: Queue Depth and Latency That Actually Matter\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/\",\"name\":\"Virtual Servers VPS Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\",\"name\":\"Virtual-Servers-Vps-Editor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"caption\":\"Virtual-Servers-Vps-Editor\"},\"sameAs\":[\"https:\/\/virtualserversvps.com\/blog\"],\"url\":\"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to Benchmark Disk IOPS on a VPS with fio: Queue Depth and Latency That Actually Matter - Virtual Servers VPS Blog","description":"Discover what a VPS (Virtual Private Server) is, how it works, and why it matters. Complete guide covering VPS definition, benefits, use cases, and how to choose the right VPS hosting for your needs.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/","og_locale":"en_US","og_type":"article","og_title":"How to Benchmark Disk IOPS on a VPS with fio: Queue Depth and Latency That Actually Matter","og_description":"How to Benchmark Disk IOPS on a VPS with fio: Queue Depth and Latency That Actually Matter","og_url":"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/","og_site_name":"Virtual Servers VPS Blog","article_published_time":"2025-10-24T11:32:47+00:00","article_modified_time":"2026-10-27T22:03:29+00:00","og_image":[{"width":663,"height":624,"url":"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2025\/10\/ScreenShot_2025-10-24_192044_396.png","type":"image\/png"}],"author":"Virtual-Servers-Vps-Editor","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Virtual-Servers-Vps-Editor","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/","url":"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/","name":"How to Benchmark Disk IOPS on a VPS with fio: Queue Depth and Latency That Actually Matter - Virtual Servers VPS Blog","isPartOf":{"@id":"https:\/\/virtualserversvps.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/#primaryimage"},"image":{"@id":"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/#primaryimage"},"thumbnailUrl":"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2025\/10\/ScreenShot_2025-10-24_192044_396.png","datePublished":"2025-10-24T11:32:47+00:00","dateModified":"2026-10-27T22:03:29+00:00","author":{"@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0"},"description":"Discover what a VPS (Virtual Private Server) is, how it works, and why it matters. Complete guide covering VPS definition, benefits, use cases, and how to choose the right VPS hosting for your needs.","breadcrumb":{"@id":"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/#primaryimage","url":"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2025\/10\/ScreenShot_2025-10-24_192044_396.png","contentUrl":"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2025\/10\/ScreenShot_2025-10-24_192044_396.png","width":663,"height":624,"caption":"Discover what a VPS (Virtual Private Server) is, how it works, and why it matters. Complete guide covering VPS definition, benefits, use cases, and how to choose the right VPS hosting for your needs."},{"@type":"BreadcrumbList","@id":"https:\/\/virtualserversvps.com\/blog\/how-to-benchmark-disk-iops-on-a-vps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/virtualserversvps.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Benchmark Disk IOPS on a VPS with fio: Queue Depth and Latency That Actually Matter"}]},{"@type":"WebSite","@id":"https:\/\/virtualserversvps.com\/blog\/#website","url":"https:\/\/virtualserversvps.com\/blog\/","name":"Virtual Servers VPS Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0","name":"Virtual-Servers-Vps-Editor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","caption":"Virtual-Servers-Vps-Editor"},"sameAs":["https:\/\/virtualserversvps.com\/blog"],"url":"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/"}]}},"_links":{"self":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/21","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/comments?post=21"}],"version-history":[{"count":13,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions"}],"predecessor-version":[{"id":1520,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions\/1520"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/media\/26"}],"wp:attachment":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/media?parent=21"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/categories?post=21"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/tags?post=21"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}