[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xen-users
Subject:    Re: [Xen-users] Xen IO performance issues
From:       Hans van Kranenburg <hans () knorrie ! org>
Date:       2018-09-28 13:35:16
Message-ID: a4aaad1d-8f1d-b097-0579-666ae7f6847d () knorrie ! org
[Download RAW message or body]

On 09/28/2018 10:46 AM, Juergen Gross wrote:
> On 20/09/2018 11:49, marki wrote:
>> Hello,
>>
>> On 2018-09-19 21:43, Hans van Kranenburg wrote:
>>> On 09/19/2018 09:19 PM, marki wrote:
>>>> On 2018-09-19 20:35, Sarah Newman wrote:
>>>>> On 09/14/2018 04:04 AM, marki wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> We're having trouble with a dd "benchmark". Even though that probably
>>>>>> doesn't mean much since multiple concurrent jobs using a benckmark
>>>>>> like FIO for
>>>>>> example work ok, I'd like to understand where the bottleneck is / why
>>>>>> this behaves differently.
>>>>>>
>>>>>> Now in a Xen DomU running kernel 4.4 it looks like the following and
>>>>>> speed is low / not what we're used to:
>>>>>>
>>>>>> Device:                 rrqm/s     wrqm/s         r/s         w/s       rMB/s       wMB/s
>>>>>> avgrq-sz avgqu-sz     await r_await w_await   svctm   %util
>>>>>> dm-0                           0.00         0.00       0.00   100.00         0.00       99.00  
>>>>>> 2027.52         1.45     14.56       0.00     14.56   10.00 100.00
>>>>>> xvdb                           0.00         0.00       0.00 2388.00         0.00       99.44      
>>>>>> 85.28       11.74       4.92       0.00       4.92     0.42   99.20
>>>>>>
>>>>>> # dd if=/dev/zero of=/u01/dd-test-file bs2k count%0000
>>>>>> 1376059392 bytes (1.4 GB, 1.3 GiB) copied, 7.09965 s, 194 MB/s
>>>
>>> Interesting.
>>>
>>> * Which Xen version are you using?
>>
>> That particular version was XenServer 7.1 LTSR (Citrix). We also tried
>> the newer current release 7.6, makes no difference.
>> Before you start screaming:
>> XS eval licenses do not contain any support so we can't ask them.
>> People in Citrix discussion forums are nice but don't seem to know
>> details necessary to solve this.
>>
>>> * Which Linux kernel version is being used in the dom0?
>>
>> In 7.1 it is "4.4.0+2".
>> In 7.6 that would be "4.4.0+10".
>>
>>> * Is this a PV, HVM or PVH guest?
>>
>> In any case blkfront (and thus blkback) were being used (which seems to
>> transfer data by that ring structure I mentioned and which explains the
>> small block size albeit not necessarily the low queue depth).
>>
>>> * ...more details you can share?
>>
>> Well, not much more except that we are talking about Suse Enterprise
>> Linux 12 up to SP3 in the DomU here. We also tried RHEL 7.5 and the
>> result (slow single-threaded writes) was the same. Reads are not
>> blazingly fast either BTW.
>>
>>>
>>>>>> Note the low queue depth on the LVM device and additionally the low
>>>>>> request size on the virtual disk.
>>>>>>
>>>>>> (As in the ESXi VM there's an LVM layer inside the DomU but it
>>>>>> doesn't matter whether it's there or not.)
>>>>>>
>>>>>>
>>>>>> The above applies to HV + HVPVM modes using kernel 4.4 in the DomU.
>>>
>>> Do you mean PV and PVHVM, instead?
>>>
>>
>> Oups yes, in any case blkfront (and thus blkback) were being used.
>>
>>>
>>> What happens when you use a recent linux kernel in the guest, like 4.18?
>>
>> I'd have to get back to you on that. However, as long as blkback stays
>> the same I'm not sure what would happen.
>> In any case we'd want to stick with the OSes that the XS people support,
>> I'll have to find out if there are some with more recent kernels than
>> SLES or RHEL.
>
> I have just done a small test for other purposes requiring to do reads
> in a domU using blkfront/blkback. The data was cached in dom0, so the
> only limiting factor was cpu/memory speed and the block ring interface
> of Xen. I was able to transfer 1.8 GB/s on a laptop with a dual core
> i7-4600M CPU @ 2.90GHz.
>
> So I don't think the ring buffer interface is a real issue here.
>
> Kernels (in domU and dom0) are 4.19-rc5, Xen is 4.12-unstable.
>
> Using a standard SLE12-SP2 domU (kernel 4.4.121) with the same dom0
> as in the test before returned the same result.

We also did some testing here, with Xen 4.11 and with Linux 4.17 in dom0
and domU.

Interesting background about optimizations in the past (which OP might
or might not have in its xen/linux):

1) Indirect descriptors

https://blog.xenproject.org/2013/08/07/indirect-descriptors-for-xen-pv-disks/

In linux, this is commit 402b27f9f2c22309d5bb285628765bc27b82fcf5
option got renamed to max_indirect_segments in commit
14e710fe7897e37762512d336ab081c57de579a4

2) Multi-queue support

https://lwn.net/Articles/633391/

We did a mixed random read / random write test with fio, null_blk in the
dom0 and fio in libaio / direct mode directly on the block device, so
that we're only stressing pushing data between dom0 and domU.

Example command:
fio --filename=/dev/xvdc --direct=1 --rw=randrw --ioengine=libaio
--bs8k --numjobs=8 --iodepth=4 --runtime  --group_reporting
--name=max_indirect_segments-$(cat
/sys/module/xen_blkfront/parameters/max_indirect_segments)

-# grep .
/sys/module/xen_blkfront/parameters/*/sys/module/xen_blkfront/parameters/max_indirect_segments:32
/sys/module/xen_blkfront/parameters/max_queues:4
/sys/module/xen_blkfront/parameters/max_ring_page_order:0

max_indirect_segments-32: (groupid=0, jobs=8): err= 0: pid56: Fri Sep
28 14:55:47 2018
  read : io–071MB, bwH03.3MB/s, iops8426, runt= 20001msec
  write: io–232MB, bwH11.4MB/s, iops8490, runt= 20001msec

Combined that's almost 10 GB/s...

We tried changing the max_indirect_segments xen_blkfront option from the
default 32 to 64, 128 etc. Every time we tried the thing above with
bs=4k, bs=8k, bsk etc...

The outcome of the test is that upping the number for
max_indirect_segments does not change anything, and that the limiting
factor for the test is cpu in the domU (4 vcpu here).

That's interesting by itself, since perf top shows that most of the time
is spent doing xen_hypercall_xen_version... (Why??)

(random sample of live output):

Samples: 2M of event 'cpu-clock', 4000 Hz, Event count (approx.):
44091475561
Overhead  Shared Object             Symbol
  54.26%  [kernel]                  [k] xen_hypercall_xen_version
   8.58%  [kernel]                  [k] xen_hypercall_sched_op
   3.17%  [unknown]                 [.] 0x00007f2c75959717
   2.57%  [unknown]                 [.] 0x00007f2c759596ca
   1.21%  [kernel]                  [k] blk_queue_split
   1.01%  [unknown]                 [.] 0x000056097df10836
   0.60%  [kernel]                  [k] kmem_cache_alloc
   0.57%  [kernel]                  [k] do_io_submit

Adding more vcpu doesn't help, by the way, with 8 vcpu the domU becomes
a bit unresponsive, and I get only around 3371.4MB/s in/out of it.

When using some real disk instead of null_blk, numbers are of course a
lot lower, but yes, it seems the communication between blkback and
blkfront is not really the limiting factor here.

Well, real life workload is of course different than a test... I'm
thinking about trying out a different value for max_indirect_segments in
some places in production for a few days and see if there's any
difference, e.g. see if it helps doing more parallel IO when there's
much higher latency involved for small random reads.

Hans

_______________________________________________
Xen-users mailing list
Xen-users@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-users
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic