Thank you again Alex,
It makes a lot of sense now, with this detailed explanation.
On Mon, Apr 15, 2019, 20:25 Alex McWhirter <alex(a)triadic.us> wrote:
On 2019-04-15 13:08, Leo David wrote:
Thank you Alex !
I will try these performance settings.
If someone from the dev guys could validate and recommend those as a good
standard configuration, it would be just great.
If they are ok, wouldn't be a nice to have them applied from within UI
with the "Optimize for VirtStore" button ?
Thnak you !
On Mon, Apr 15, 2019 at 7:39 PM Alex McWhirter <alex(a)triadic.us> wrote:
> On 2019-04-14 23:22, Leo David wrote:
>
> Hi,
> Thank you Alex, I was looking for some optimisation settings as well,
> since I am pretty much in the same boat, using ssd based
> replicate-distributed volumes across 12 hosts.
> Could anyone else (maybe even from from ovirt or rhev team) validate
> these settings or add some other tweaks as well, so we can use them as
> standard ?
> Thank you very much again !
>
> On Mon, Apr 15, 2019, 05:56 Alex McWhirter <alex(a)triadic.us> wrote:
>
>> On 2019-04-14 20:27, Jim Kusznir wrote:
>>
>> Hi all:
>> I've had I/O performance problems pretty much since the beginning of
>> using oVirt. I've applied several upgrades as time went on, but strangely,
>> none of them have alleviated the problem. VM disk I/O is still very slow
>> to the point that running VMs is often painful; it notably affects nearly
>> all my VMs, and makes me leary of starting any more. I'm currently running
>> 12 VMs and the hosted engine on the stack.
>> My configuration started out with 1Gbps networking and hyperconverged
>> gluster running on a single SSD on each node. It worked, but I/O was
>> painfully slow. I also started running out of space, so I added an SSHD on
>> each node, created another gluster volume, and moved VMs over to it. I
>> also ran that on a dedicated 1Gbps network. I had recurring disk failures
>> (seems that disks only lasted about 3-6 months; I warrantied all three at
>> least once, and some twice before giving up). I suspect the Dell PERC 6/i
>> was partly to blame; the raid card refused to see/acknowledge the disk, but
>> plugging it into a normal PC showed no signs of problems. In any case,
>> performance on that storage was notably bad, even though the gig-e
>> interface was rarely taxed.
>> I put in 10Gbps ethernet and moved all the storage on that none the
>> less, as several people here said that 1Gbps just wasn't fast enough. Some
>> aspects improved a bit, but disk I/O is still slow. And I was still having
>> problems with the SSHD data gluster volume eating disks, so I bought a
>> dedicated NAS server (supermicro 12 disk dedicated FreeNAS NFS storage
>> system on 10Gbps ethernet). Set that up. I found that it was actually
>> FASTER than the SSD-based gluster volume, but still slow. Lately its been
>> getting slower, too...Don't know why. The FreeNAS server reports network
>> loads around 4MB/s on its 10Gbe interface, so its not network constrained.
>> At 4MB/s, I'd sure hope the 12 spindle SAS interface wasn't constrained
>> either..... (and disk I/O operations on the NAS itself complete much
>> faster).
>> So, running a test on my NAS against an ISO file I haven't accessed in
>> months:
>> # dd
>>
if=en_windows_server_2008_r2_standard_enterprise_datacenter_and_web_x64_dvd_x15-59754.iso
>> of=/dev/null bs=1024k count=500
>>
>> 500+0 records in
>> 500+0 records out
>> 524288000 bytes transferred in 2.459501 secs (213168465 bytes/sec)
>> Running it on one of my hosts:
>> root@unifi:/home/kusznir# time dd if=/dev/sda of=/dev/null bs=1024k
>> count=500
>> 500+0 records in
>> 500+0 records out
>> 524288000 bytes (524 MB, 500 MiB) copied, 7.21337 s, 72.7 MB/s
>> (I don't know if this is a true apples to apples comparison, as I don't
>> have a large file inside this VM's image). Even this is faster than I
>> often see.
>> I have a VoIP Phone server running as a VM. Voicemail and other
>> recordings usually fail due to IO issues opening and writing the files.
>> Often, the first 4 or so seconds of the recording is missed; sometimes the
>> entire thing just fails. I didn't use to have this problem, but its
>> definately been getting worse. I finally bit the bullet and ordered a
>> physical server dedicated for my VoIP System...But I still want to figure
>> out why I'm having all these IO problems. I read on the list of people
>> running 30+ VMs...I feel that my IO can't take any more VMs with any
>> semblance of reliability. We have a Quickbooks server on here too
>> (windows), and the performance is abysmal; my CPA is charging me extra
>> because of all the lost staff time waiting on the system to respond and
>> generate reports.....
>> I'm at my whits end...I started with gluster on SSD with 1Gbps network,
>> migrated to 10Gbps network, and now to dedicated high performance NAS box
>> over NFS, and still have performance issues.....I don't know how to
>> troubleshoot the issue any further, but I've never had these kinds of
>> issues when I was playing with other VM technologies. I'd like to get to
>> the point where I can resell virtual servers to customers, but I can't do
>> so with my current performance levels.
>> I'd greatly appreciate help troubleshooting this further.
>> --Jim
>>
>> _______________________________________________
>> Users mailing list -- users(a)ovirt.org
>> To unsubscribe send an email to users-leave(a)ovirt.org
>> Privacy Statement:
https://www.ovirt.org/site/privacy-policy/
>> oVirt Code of Conduct:
>>
https://www.ovirt.org/community/about/community-guidelines/
>> List Archives:
>>
https://lists.ovirt.org/archives/list/users@ovirt.org/message/ZR64VABNT2S...
>>
>> Been working on optimizing the same. This is where im at currently.
>>
>> Gluster volume settings.
>>
>> diagnostics.count-fop-hits: on
>> diagnostics.latency-measurement: on
>> performance.write-behind-window-size: 64MB
>> performance.flush-behind: on
>> performance.stat-prefetch: on
>> server.event-threads: 4
>> client.event-threads: 8
>> performance.io-thread-count: 32
>> network.ping-timeout: 30
>> cluster.granular-entry-heal: enable
>> performance.strict-o-direct: on
>> storage.owner-gid: 36
>> storage.owner-uid: 36
>> features.shard: on
>> cluster.shd-wait-qlength: 10000
>> cluster.shd-max-threads: 8
>> cluster.locking-scheme: granular
>> cluster.data-self-heal-algorithm: full
>> cluster.server-quorum-type: server
>> cluster.quorum-type: auto
>> cluster.eager-lock: enable
>> network.remote-dio: off
>> performance.low-prio-threads: 32
>> performance.io-cache: off
>> performance.read-ahead: off
>> performance.quick-read: off
>> auth.allow: *
>> user.cifs: off
>> transport.address-family: inet
>> nfs.disable: off
>> performance.client-io-threads: on
>>
>> sysctl options
>>
>> net.core.rmem_max = 134217728
>> net.core.wmem_max = 134217728
>> net.ipv4.tcp_rmem = 4096 87380 134217728
>> net.ipv4.tcp_wmem = 4096 65536 134217728
>> net.core.netdev_max_backlog = 300000
>> net.ipv4.tcp_moderate_rcvbuf =1
>> net.ipv4.tcp_no_metrics_save = 1
>> net.ipv4.tcp_congestion_control=htcp
>>
>> custom /sbin/ifup-local file, Storage is the bridge name, which ==
>> ens3f0/1 in bond2
>>
>> #!/bin/bash
>> case "$1" in
>> Storage)
>> /sbin/ethtool -K ens3f0 tx off rx off tso off gso off
>> /sbin/ethtool -K ens3f1 tx off rx off tso off gso off
>> /sbin/ip link set dev ens3f0 txqueuelen 10000
>> /sbin/ip link set dev ens3f1 txqueuelen 10000
>> /sbin/ip link set dev bond2 txqueuelen 10000
>> /sbin/ip link set dev Storage txqueuelen 10000
>> ;;
>> *)
>> ;;
>> esac
>> exit 0
>>
>> i still have some latency issues, but my writes are up to 264MB/S
>> sequential on HDD's
>>
>> output of crystal diskmark on windows 10 vm
>>
>> Sequential Read (Q= 32,T= 1) : 688.536 MB/s
>> Sequential Write (Q= 32,T= 1) : 264.254 MB/s
>> Random Read 4KiB (Q= 8,T= 8) : 176.069 MB/s [ 42985.6 IOPS]
>> Random Write 4KiB (Q= 8,T= 8) : 63.217 MB/s [ 15433.8 IOPS]
>> Random Read 4KiB (Q= 32,T= 1) : 159.598 MB/s [ 38964.4 IOPS]
>> Random Write 4KiB (Q= 32,T= 1) : 54.212 MB/s [ 13235.4 IOPS]
>> Random Read 4KiB (Q= 1,T= 1) : 3.488 MB/s [ 851.6 IOPS]
>> Random Write 4KiB (Q= 1,T= 1) : 3.006 MB/s [ 733.9 IOPS]
>>
>> also enabling libgfapi on the engine was the best performance option i
>> ever tweaked, easily doubled reads / writes
>> _______________________________________________
>> Users mailing list -- users(a)ovirt.org
>> To unsubscribe send an email to users-leave(a)ovirt.org
>> Privacy Statement:
https://www.ovirt.org/site/privacy-policy/
>> oVirt Code of Conduct:
>>
https://www.ovirt.org/community/about/community-guidelines/
>> List Archives:
>>
https://lists.ovirt.org/archives/list/users@ovirt.org/message/S7I3PQVERQZ...
>
>
>
> Also with all of that said, i've mostly solved the rest of my issues by
> enabling performance.read-ahead on the gluster volume. I am saturating my
> 10G network, which translates to 700MB/s reads, 350MB/s writes (replica 2)
>
> just make sure your local read ahead settings on the bricks are sane, I.E
> "blockdev --getra /dev/sdx", mine is 8192
>
>
--
Best regards, Leo David
To be fair most of these are defaults, the ones i have changed from
defaults are.
performance.read-ahead: on
performance.stat-prefetch: on
performance.flush-behind: on (pretty sure this was on by default, but i
explicitly set it)
performance.client-io-threads: on
performance.write-behind-window-size: 64MB (this was set to 1MB, but i set
to 64MB which is the size of a single shard in distributed replicate mode)
These are env specific, i have 48 cores / host so adding a few threads to
for this helped making things more consistent.
server.event-threads: 4
client.event-threads: 8
As far as NIC tuning, with gluster basically working exclusively with
large files you want some big buffers. also HTCP congestion protocol was
basically designed for this use case. In my case TCP offload on the nics
was hurting me, so i disabled it. Then uped the txqueuelength, again
because we are working with exclusively large files.
The NIC tuning stuff is pretty hardware specific, i can't see ovirt devs
using them as defaults, especially since they would be really bad to do on
1GB networks. The gluster settings also have some valid points.
stat-prefecth is off because at one point this used to corrupt data on live
migration. This was fixed in gluster, but appears to be a bit of a leftover
now. read-ahead can slow you down on 1GB networks. client-io-threads may be
a bad idea if you are really packing the hosts up with VM's or have low
core counts / no SMT. Write-behind windows are dangerous on power loss,
etc...
The defaults from ovirt are fairly sane, and really only needed minimal
tweaking to get optimal performance.