{"id":1017,"date":"2026-08-30T23:09:36","date_gmt":"2026-08-30T23:09:36","guid":{"rendered":"https:\/\/virtualserversvps.com\/blog\/?p=1017"},"modified":"2026-10-11T22:03:57","modified_gmt":"2026-10-11T22:03:57","slug":"benchmark-vps-cpu-disk-io","status":"publish","type":"post","link":"https:\/\/virtualserversvps.com\/blog\/benchmark-vps-cpu-disk-io\/","title":{"rendered":"Interpreting VPS Benchmarks: Reading Latency Percentiles, CPU Steal and iowait"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A sysbench CPU score or a single <code>dd<\/code> throughput number tells you almost nothing about how an instance will behave under production load. Two VPS nodes can return identical benchmark figures while one delivers steady 2 ms responses and the other stutters every few seconds. The difference lives in the distribution of latency and in the contention counters the headline number quietly averages away. This article is about reading results, not generating them.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Average Latency Is a Lie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When you run a disk benchmark and it reports an average latency of 1.2 ms, ask where the worst 1% landed. On shared storage the mean is dominated by fast cache hits while the tail \u2014 p95, p99, p99.9 \u2014 is what your users actually feel when a query misses the cache. Always collect percentiles. With <code>fio<\/code> this means adding <code>--lat_percentiles=1<\/code> and reading the completion-latency table, not just the <code>clat<\/code> mean. A disk that shows 0.8 ms average with a 40 ms p99 will produce visible TTFB spikes that a mean-based evaluation completely misses.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CPU Steal: The Invisible Tax<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Inside a virtual machine, <code>%steal<\/code> in <code>top<\/code> or the <code>st<\/code> column in <code>vmstat<\/code> reports time your vCPU was runnable but the hypervisor scheduled another guest instead. A single-digit steal is normal. Sustained steal above 5\u201310% means you are paying for CPU you cannot use \u2014 a noisy-neighbour problem no amount of guest tuning can fix. Capture it over time, because steal is bursty: a one-minute sample may show zero while the hourly average is 15%.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vmstat 5 12 | awk 'NR>2 {print $15, $16, $17}'   # us sy st\nsar -u 1 30 | tail -5<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">iowait Is Not &#8220;Disk Is Slow&#8221;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">High <code>iowait<\/code> only means the CPU had nothing else to run while a request was outstanding. On a single-vCPU instance with a well-behaved workload, iowait can be high simply because there is no other work to schedule. The useful signal is the combination of iowait with device-level latency from <code>iostat -x<\/code>: look at <code>aqu-sz<\/code> (average queue depth) and <code>await<\/code> per device. Rising queue depth alongside rising await means genuine saturation; rising iowait with flat await usually means the workload is simply serialized and under-utilizing the CPU.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Building a Comparison That Means Something<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To compare instances fairly, run identical workloads at identical concurrency for several minutes each, ideally at the same time of day, and record the full percentile distribution plus steal. Repeat runs matter: a single sample cannot distinguish a consistently fast instance from a lucky one. If you are evaluating providers before committing, this overview of <a href=\"https:\/\/virtualserversvps.com\/\">how VPS performance is provisioned<\/a> explains the underlying storage and CPU allocation models that produce these differences in the first place.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Minimal Interpretation Checklist<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before you declare an instance fast or slow, confirm you have: retrieval and completion latency percentiles rather than means; a steal figure captured over at least an hour; device queue depth during the test; and repeatability across at least two runs. A benchmark that satisfies all four is worth ten that report only an average. For workloads that are memory-bound rather than I\/O-bound, verify your swap and reclaim behaviour as well \u2014 a fast disk with constant page reclaim will still benchmark poorly. For deeper tuning context, <a href=\"https:\/\/virtualserversvps.com\/\">the site&#8217;s technical guides<\/a> cover the kernel knobs that move these numbers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Benchmarks are not scores to maximise; they are diagnostic readings to interpret. Once you read the tail and the contention counters, the number stops being ambiguous and starts telling you whether the instance suits your workload.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Learn to read VPS benchmark output correctly: normalize load average against vCPU count, distinguish CPU steal from real load, and interpret iowait using PSI and iostat before you decide to resize.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":3,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1017","post","type-post","status-publish","format-standard","hentry","category-performance-optimization"],"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>Interpreting VPS Benchmarks: Reading Latency Percentiles, CPU Steal and iowait - Virtual Servers VPS Blog<\/title>\n<meta name=\"description\" content=\"Learn to read VPS benchmark output correctly: normalize load average against vCPU count, distinguish CPU steal from real load, and interpret iowait using PSI and iostat before you decide to resize.\" \/>\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\/benchmark-vps-cpu-disk-io\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Interpreting VPS Benchmarks: Reading Latency Percentiles, CPU Steal and iowait\" \/>\n<meta property=\"og:description\" content=\"Interpreting VPS Benchmarks: Reading Latency Percentiles, CPU Steal and iowait\" \/>\n<meta property=\"og:url\" content=\"https:\/\/virtualserversvps.com\/blog\/benchmark-vps-cpu-disk-io\/\" \/>\n<meta property=\"og:site_name\" content=\"Virtual Servers VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-30T23:09:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-11T22:03:57+00:00\" \/>\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=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/benchmark-vps-cpu-disk-io\/\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/benchmark-vps-cpu-disk-io\/\",\"name\":\"Interpreting VPS Benchmarks: Reading Latency Percentiles, CPU Steal and iowait - Virtual Servers VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\"},\"datePublished\":\"2026-08-30T23:09:36+00:00\",\"dateModified\":\"2026-10-11T22:03:57+00:00\",\"author\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\"},\"description\":\"Learn to read VPS benchmark output correctly: normalize load average against vCPU count, distinguish CPU steal from real load, and interpret iowait using PSI and iostat before you decide to resize.\",\"breadcrumb\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/benchmark-vps-cpu-disk-io\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/virtualserversvps.com\/blog\/benchmark-vps-cpu-disk-io\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/benchmark-vps-cpu-disk-io\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/virtualserversvps.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Interpreting VPS Benchmarks: Reading Latency Percentiles, CPU Steal and iowait\"}]},{\"@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":"Interpreting VPS Benchmarks: Reading Latency Percentiles, CPU Steal and iowait - Virtual Servers VPS Blog","description":"Learn to read VPS benchmark output correctly: normalize load average against vCPU count, distinguish CPU steal from real load, and interpret iowait using PSI and iostat before you decide to resize.","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\/benchmark-vps-cpu-disk-io\/","og_locale":"en_US","og_type":"article","og_title":"Interpreting VPS Benchmarks: Reading Latency Percentiles, CPU Steal and iowait","og_description":"Interpreting VPS Benchmarks: Reading Latency Percentiles, CPU Steal and iowait","og_url":"https:\/\/virtualserversvps.com\/blog\/benchmark-vps-cpu-disk-io\/","og_site_name":"Virtual Servers VPS Blog","article_published_time":"2026-08-30T23:09:36+00:00","article_modified_time":"2026-10-11T22:03:57+00:00","author":"Virtual-Servers-Vps-Editor","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Virtual-Servers-Vps-Editor","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/virtualserversvps.com\/blog\/benchmark-vps-cpu-disk-io\/","url":"https:\/\/virtualserversvps.com\/blog\/benchmark-vps-cpu-disk-io\/","name":"Interpreting VPS Benchmarks: Reading Latency Percentiles, CPU Steal and iowait - Virtual Servers VPS Blog","isPartOf":{"@id":"https:\/\/virtualserversvps.com\/blog\/#website"},"datePublished":"2026-08-30T23:09:36+00:00","dateModified":"2026-10-11T22:03:57+00:00","author":{"@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0"},"description":"Learn to read VPS benchmark output correctly: normalize load average against vCPU count, distinguish CPU steal from real load, and interpret iowait using PSI and iostat before you decide to resize.","breadcrumb":{"@id":"https:\/\/virtualserversvps.com\/blog\/benchmark-vps-cpu-disk-io\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/virtualserversvps.com\/blog\/benchmark-vps-cpu-disk-io\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/virtualserversvps.com\/blog\/benchmark-vps-cpu-disk-io\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/virtualserversvps.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Interpreting VPS Benchmarks: Reading Latency Percentiles, CPU Steal and iowait"}]},{"@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\/1017","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=1017"}],"version-history":[{"count":4,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/1017\/revisions"}],"predecessor-version":[{"id":1360,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/1017\/revisions\/1360"}],"wp:attachment":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/media?parent=1017"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/categories?post=1017"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/tags?post=1017"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}