emusic
Enthusiast
Enthusiast

How to disable virtual disk buffering/caching used in 15.x but not in 12.5.x?

Recently, I wrote about high kernel latency issues in Windows guests under 15.0.x, that is not observed in 12.5.x.

Disabling CPU policy patches added in 12.5.9 does not fix the issue, and 12.5.9 with default settings does not cause a noticeable kernel latency increase.

Today, I noticed that 15.0.x uses additional virtual disk buffering/caching that is not observed in 12.5.x.

In 12.5.x, chkdsk on 15GB virtual SCSI disk (mapped to a VMDK file created on the mechanical host SATA HDD) always completes in 11 s, regardless of first or successive executions. DPC latency tests (for example, DpcLat) ran at the same time, show no noticeable DPC latency increase. Average DPC latency is less than 1 ms in Windows 7 guest.

In 15.0.x, chkdsk takes about 11 s for the first execution, but each successive execution takes no more than 3 s. In that time, DPC latencies are increased up to dozens and even hundreds of milliseconds.

This means that 15.0.x uses a kind of additional virtual disk buffering/caching, and buffered data are processed synchronously, affecting guest ISR/DPC latencies. Such latencies, in particular, cause audio/sound crackling problems.

Unfortunately, virtual disk buffering is almost not documented. I experimented with "hard-disk.useUnbuffered", "aiomgr.buffered", "aiomgr.unbuf" or "aiomgr.simple", and found that "hard-disk.useUnbuffered=true" helps to almost remove huge kernel latency spikes, but does not eliminate them at all. And with this option, VM disk performance is much slower than under 12.5.x with default settings (and no huge spikes).

Does somebody know how to disable such aggressive virtual disk buffering in 15.0.x, forcing it to behave like 12.5.x?

0 Kudos
0 Replies