Poor disk IO performance using VirtIO

willajpage
First post
Posts: 1
Joined: Mon Sep 04, 2017 9:11 am

Poor disk IO performance using VirtIO

Postby willajpage » Mon Sep 04, 2017 9:30 am

Hello,

I've got a Windows 10 VM on a QNAP TS-863U using 3GB of RAM and 4x processor cores in passthrough mode.

If I use the IDE controller with write-back caching I get about 480 IOPS maximum
If I use the VirtIO controller I get no more than 100 IOPS using the same test parameters. I've tried updating to the VirtIO driver in the tutorial on this page, which is somewhat newer than one supplied by the "Insert Tools CD" command.

My virtualisation station version is 3.0.2385

Here is an example of the output of diskspd using the two bus types. Note that the two virtual disks are on the same storage, which incidentally, is a 3-set RAID 10 of some huge Seagate Ironwolf drives. The figure we're looking at is the total at the bottom of the I/O per s column.
VirtIO DIsk

Code: Select all

Input parameters:

        timespan:   1
        -------------
        duration: 60s
        warm up time: 5s
        cool down time: 0s
        measuring latency
        random seed: 0
        path: 'e:\testfile.dat'
                think time: 0ms
                burst size: 0
                software cache disabled
                hardware write cache disabled, writethrough on
                performing mix test (read/write ratio: 80/20)
                block size: 8192
                using random I/O (alignment: 8192)
                number of outstanding I/O operations: 4
                thread stride size: 0
                threads per file: 8
                using I/O Completion Ports
                IO priority: normal



Results for timespan 1:
*******************************************************************************

actual test time:       60.02s
thread count:           8
proc count:             4

CPU |  Usage |  User  |  Kernel |  Idle
-------------------------------------------
   0|  26.24%|  13.90%|   12.34%|  73.76%
   1|  24.03%|  11.48%|   12.55%|  75.97%
   2|  18.93%|   8.83%|   10.10%|  81.07%
   3|  13.20%|   5.99%|    7.21%|  86.80%
-------------------------------------------
avg.|  20.60%|  10.05%|   10.55%|  79.40%

Total IO
thread |       bytes     |     I/Os     |     MB/s   |  I/O per s |  AvgLat  | LatStdDev |  file
-----------------------------------------------------------------------------------------------------
     0 |         4358144 |          532 |       0.07 |       8.86 |  448.801 |   530.044 | e:\testfile.dat (1024MB)
     1 |         4800512 |          586 |       0.08 |       9.76 |  404.412 |   449.904 | e:\testfile.dat (1024MB)
     2 |         4153344 |          507 |       0.07 |       8.45 |  472.640 |   557.994 | e:\testfile.dat (1024MB)
     3 |         4521984 |          552 |       0.07 |       9.20 |  434.534 |   479.621 | e:\testfile.dat (1024MB)
     4 |         4677632 |          571 |       0.07 |       9.51 |  420.620 |   474.737 | e:\testfile.dat (1024MB)
     5 |         4800512 |          586 |       0.08 |       9.76 |  403.579 |   454.382 | e:\testfile.dat (1024MB)
     6 |         4186112 |          511 |       0.07 |       8.51 |  464.842 |   530.027 | e:\testfile.dat (1024MB)
     7 |         4218880 |          515 |       0.07 |       8.58 |  465.985 |   509.716 | e:\testfile.dat (1024MB)
-----------------------------------------------------------------------------------------------------
total:          35717120 |         4360 |       0.57 |      72.65 |  437.942 |   498.375

IDE Disk

Code: Select all

Input parameters:

        timespan:   1
        -------------
        duration: 60s
        warm up time: 5s
        cool down time: 0s
        measuring latency
        random seed: 0
        path: 'testfile.dat'
                think time: 0ms
                burst size: 0
                software cache disabled
                hardware write cache disabled, writethrough on
                performing mix test (read/write ratio: 80/20)
                block size: 8192
                using random I/O (alignment: 8192)
                number of outstanding I/O operations: 4
                thread stride size: 0
                threads per file: 8
                using I/O Completion Ports
                IO priority: normal



Results for timespan 1:
*******************************************************************************

actual test time:       60.00s
thread count:           8
proc count:             4

CPU |  Usage |  User  |  Kernel |  Idle
-------------------------------------------
   0|  11.46%|   5.21%|    6.25%|  88.54%
   1|  14.77%|   4.43%|   10.34%|  85.23%
   2|  16.25%|   5.60%|   10.65%|  83.75%
   3|  11.80%|   2.01%|    9.79%|  88.20%
-------------------------------------------
avg.|  13.57%|   4.31%|    9.26%|  86.43%

Total IO
thread |       bytes     |     I/Os     |     MB/s   |  I/O per s |  AvgLat  | LatStdDev |  file
-----------------------------------------------------------------------------------------------------
     0 |        27197440 |         3320 |       0.43 |      55.33 |   72.123 |    79.244 | testfile.dat (1024MB)
     1 |        27213824 |         3322 |       0.43 |      55.37 |   72.098 |    79.368 | testfile.dat (1024MB)
     2 |        27410432 |         3346 |       0.44 |      55.77 |   71.565 |    77.844 | testfile.dat (1024MB)
     3 |        27557888 |         3364 |       0.44 |      56.07 |   71.148 |    77.771 | testfile.dat (1024MB)
     4 |        27639808 |         3374 |       0.44 |      56.23 |   71.010 |    77.277 | testfile.dat (1024MB)
     5 |        27566080 |         3365 |       0.44 |      56.08 |   71.198 |    76.984 | testfile.dat (1024MB)
     6 |        27344896 |         3338 |       0.43 |      55.63 |   71.711 |    78.726 | testfile.dat (1024MB)
     7 |        27279360 |         3330 |       0.43 |      55.50 |   71.891 |    79.772 | testfile.dat (1024MB)
-----------------------------------------------------------------------------------------------------
total:         219209728 |        26759 |       3.48 |     445.99 |   71.591 |    78.375


Also note the latency. In this case I deliberately caused a queue, so the numbers are huge compared with the what you'd expect from the hardware, but look at the difference. The VirtIO controller is so constrained it's off the chart!
If bring the outstanding IOs down to eliminate the queue I still get about the same IOPS results.

I'd love to resolve this and get a bit more performance from the VirtIO than the IDE interface can deliver. Any guesses?

Return to “Virtualization Station”

Who is online

Users browsing this forum: No registered users and 2 guests