Urgent.News

What's breaking now, across thousands of outlets.

Tech

Benchmarking a Ryzen VDS Without Fooling Yourself: CPU Scheduling, Storage Latency, and Reproducible Tests

A virtual server benchmark is easy to run and surprisingly hard to interpret. A single attractive score can be caused by a short turbo window, a warm cache, an idle host, or a storage queue that does not resemble the application. A disappointing score can be equally misleading: perhaps another guest briefly competed for CPU time, package updates were running, or the test measured throughput when…

When benchmarking a Ryzen Virtual Dedicated Server (VDS) without misinterpreting the results, three crucial factors must be considered: CPU scheduling, storage latency, and reproducible tests. This article outlines a straightforward method for evaluating a Linux VDS on KVM, focusing on separating key questions: predictability of CPU time, individual vCPU behavior, and storage latency at various queue depths.

The method prioritizes evidence that can be reviewed and documented, such as metadata, warm-up rules, repeated runs, latency percentiles, and raw output.

Begin by defining the test objectives. Identify the specific workload the results will support, such as a web worker, compilation runner, or nightly database report. Document the VDS configuration, including vCPU count, memory, and storage allocation, as test inputs rather than outcomes. Include the workload's runtime, concurrency, and I/O pattern before selecting any synthetic test.

Before conducting any tests, carefully record the environment details. Capture the date, system name, CPU information, number of CPUs, free memory, and block device information using commands like `date -u`, `uname -a`, `lscpu`, `nproc`, `free -h`, and `lsblk -o`. Additionally, record the VDS plan, selected vCPU count, memory, guest kernel, filesystem, virtualization-visible CPU model, benchmark tool versions, test-file path, size, and start and end times.

Be aware that lscpu within the guest reports a virtual topology, while KVM exposes a virtual topology that might not reflect the underlying host layout.

Establish a consistent measurement window and avoid activities that could interfere with the test, such as backups, package upgrades, log rotation, or application deployments, unless they are intentionally part of the test. Set explicit load and latency stop conditions for production guests. When observing CPU scheduling, capture a baseline using `mpstat -P ALL` and `vmstat 1` to monitor per-vCPU CPU states, including user, system, iowait, and steal time.

Separate one non-zero steal sample from overall high steal time, as a single sample may not indicate a scheduling issue. Look for recurring correlations between CPU steal time and throughput to identify potential scheduling contention.

To distinguish between single-vCPU speed and scaling, use `sysbench` to measure CPU performance with a single thread and four threads, respectively. Pin the thread to a specific vCPU using `taskset` to ensure consistent results. Run each test multiple times and record median, minimum, and maximum events per second. Efficiency can be calculated by dividing multi-thread throughput by the single-thread throughput multiplied by the worker count.

Note that efficiency below 100% is normal and should not be considered an indicator of performance issues. Focus on reproducibility rather than raw scores to assess stability and stability in scheduling behavior.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

Brilliant 11 years old

Hello, I'm an 11 years old moroccan developer nowing web stack development python and bash and go, so i made a domain creation detector daemon, so check it out here: domdaemon and thanks.

The Contract Is a .proto File

One handle, one source of truth - the HTTP spec is derived, not written. 👋 Hi, I'm Anton - a software engineer working mostly in PHP/Symfony and Go, currently carving a live PHP monolith into Go…

  • Contract defined in .proto schema file
  • Build converts schema to typed clients and servers
  • Drift caught as build failure in check process

More from Saturday 19 September →