[SOLVED] Schlechte Performance beim Verschieben eines Volumes in einem Container

mss666

Member
Dec 16, 2020
9
0
6
38
Ich habe Proxmox bei mir schon länger auf zwei verschiedenen Servern im Einsatz.
Aktuell habe ich ein Problem, welchem ich nach längerer Rechere nicht richtig auf die Spur komme.

Habe hier einen etwas älternen HP Server ML110-G7 mit einem 4x Intel Xeon 3,1GHz und 32GB Ram. Gebootet wird von einer internen SD-Card mit GRUB.
1655455417922.png

Als Speicher habe ich aktuell:
  1. rpool: 1x Crucial P1 1TB CT1000P1SSD8 (ZFS ashift=12)
  2. tank: 4x Seagate ST8000VN004/0022 8TB (ZFS raidz1 ashift=12)
Habe nichts an der ZFS Konfig geändert.

Hier die jeweiligen ZFS Konfigurationen:
Code:
root@proxmox-02:/tank/testdest# zpool get all rpool
NAME   PROPERTY                       VALUE                          SOURCE
rpool  size                           928G                           -
rpool  capacity                       54%                            -
rpool  altroot                        -                              default
rpool  health                         ONLINE                         -
rpool  guid                           17297666548505924739           -
rpool  version                        -                              default
rpool  bootfs                         rpool/ROOT/pve-1               local
rpool  delegation                     on                             default
rpool  autoreplace                    off                            default
rpool  cachefile                      -                              default
rpool  failmode                       wait                           default
rpool  listsnapshots                  off                            default
rpool  autoexpand                     off                            default
rpool  dedupratio                     1.00x                          -
rpool  free                           421G                           -
rpool  allocated                      507G                           -
rpool  readonly                       off                            -
rpool  ashift                         12                             local
rpool  comment                        -                              default
rpool  expandsize                     -                              -
rpool  freeing                        0                              -
rpool  fragmentation                  21%                            -
rpool  leaked                         0                              -
rpool  multihost                      off                            default
rpool  checkpoint                     -                              -
rpool  load_guid                      11150836584200506346           -
rpool  autotrim                       off                            default
rpool  compatibility                  off                            default
rpool  feature@async_destroy          enabled                        local
rpool  feature@empty_bpobj            active                         local
rpool  feature@lz4_compress           active                         local
rpool  feature@multi_vdev_crash_dump  enabled                        local
rpool  feature@spacemap_histogram     active                         local
rpool  feature@enabled_txg            active                         local
rpool  feature@hole_birth             active                         local
rpool  feature@extensible_dataset     active                         local
rpool  feature@embedded_data          active                         local
rpool  feature@bookmarks              enabled                        local
rpool  feature@filesystem_limits      enabled                        local
rpool  feature@large_blocks           enabled                        local
rpool  feature@large_dnode            enabled                        local
rpool  feature@sha512                 enabled                        local
rpool  feature@skein                  enabled                        local
rpool  feature@edonr                  enabled                        local
rpool  feature@userobj_accounting     active                         local
rpool  feature@encryption             enabled                        local
rpool  feature@project_quota          active                         local
rpool  feature@device_removal         enabled                        local
rpool  feature@obsolete_counts        enabled                        local
rpool  feature@zpool_checkpoint       enabled                        local
rpool  feature@spacemap_v2            active                         local
rpool  feature@allocation_classes     enabled                        local
rpool  feature@resilver_defer         enabled                        local
rpool  feature@bookmark_v2            enabled                        local
rpool  feature@redaction_bookmarks    enabled                        local
rpool  feature@redacted_datasets      enabled                        local
rpool  feature@bookmark_written       enabled                        local
rpool  feature@log_spacemap           active                         local
rpool  feature@livelist               enabled                        local
rpool  feature@device_rebuild         enabled                        local
rpool  feature@zstd_compress          enabled                        local
rpool  feature@draid                  disabled                       local

Code:
root@proxmox-02:/tank/testdest# zpool get all tank
NAME  PROPERTY                       VALUE                          SOURCE
tank  size                           29.1T                          -
tank  capacity                       53%                            -
tank  altroot                        -                              default
tank  health                         ONLINE                         -
tank  guid                           9830700390088837699            -
tank  version                        -                              default
tank  bootfs                         -                              default
tank  delegation                     on                             default
tank  autoreplace                    off                            default
tank  cachefile                      -                              default
tank  failmode                       wait                           default
tank  listsnapshots                  off                            default
tank  autoexpand                     off                            default
tank  dedupratio                     1.00x                          -
tank  free                           13.7T                          -
tank  allocated                      15.5T                          -
tank  readonly                       off                            -
tank  ashift                         12                             local
tank  comment                        -                              default
tank  expandsize                     -                              -
tank  freeing                        0                              -
tank  fragmentation                  0%                             -
tank  leaked                         0                              -
tank  multihost                      off                            default
tank  checkpoint                     -                              -
tank  load_guid                      5255683199477080109            -
tank  autotrim                       off                            default
tank  compatibility                  off                            default
tank  feature@async_destroy          enabled                        local
tank  feature@empty_bpobj            active                         local
tank  feature@lz4_compress           active                         local
tank  feature@multi_vdev_crash_dump  enabled                        local
tank  feature@spacemap_histogram     active                         local
tank  feature@enabled_txg            active                         local
tank  feature@hole_birth             active                         local
tank  feature@extensible_dataset     active                         local
tank  feature@embedded_data          active                         local
tank  feature@bookmarks              enabled                        local
tank  feature@filesystem_limits      enabled                        local
tank  feature@large_blocks           enabled                        local
tank  feature@large_dnode            enabled                        local
tank  feature@sha512                 enabled                        local
tank  feature@skein                  enabled                        local
tank  feature@edonr                  enabled                        local
tank  feature@userobj_accounting     active                         local
tank  feature@encryption             enabled                        local
tank  feature@project_quota          active                         local
tank  feature@device_removal         enabled                        local
tank  feature@obsolete_counts        enabled                        local
tank  feature@zpool_checkpoint       enabled                        local
tank  feature@spacemap_v2            active                         local
tank  feature@allocation_classes     enabled                        local
tank  feature@resilver_defer         enabled                        local
tank  feature@bookmark_v2            enabled                        local
tank  feature@redaction_bookmarks    enabled                        local
tank  feature@redacted_datasets      enabled                        local
tank  feature@bookmark_written       enabled                        local
tank  feature@log_spacemap           active                         local
tank  feature@livelist               enabled                        local
tank  feature@device_rebuild         enabled                        local
tank  feature@zstd_compress          enabled                        local
tank  feature@draid                  enabled                        local

Hier der ZFS Status:
Code:
root@proxmox-02:/tank/testdest# zpool status
  pool: rpool
 state: ONLINE
  scan: scrub repaired 0B in 00:24:11 with 0 errors on Sun Jun 12 00:48:12 2022
config:

        NAME                                    STATE     READ WRITE CKSUM
        rpool                                   ONLINE       0     0     0
          nvme-CT1000P1SSD8_20512C5F4262-part3  ONLINE       0     0     0

errors: No known data errors

  pool: tank
 state: ONLINE
  scan: scrub repaired 0B in 07:34:09 with 0 errors on Sun Jun 12 07:58:12 2022
config:

        NAME                                  STATE     READ WRITE CKSUM
        tank                                  ONLINE       0     0     0
          raidz1-0                            ONLINE       0     0     0
            ata-ST8000VN0022-2EL112_ZA18QMBJ  ONLINE       0     0     0
            ata-ST8000VN0022-2EL112_ZA17VQ5Y  ONLINE       0     0     0
            ata-ST8000VN004-2M2101_WKD14QN3   ONLINE       0     0     0
            ata-ST8000VN004-2M2101_WSD1NNL6   ONLINE       0     0     0

errors: No known data errors

Ich habe zum Testen alle Container und VMs gesoppt.
Mein Problem tritt auf, wenn ich ein CT Volume oder ein VM Image von rpool nach tank verschieben möchte.
Anfangs ist die Performance sehr gut. Jedoch nach einiger Zeit bricht sie ein und der IO-delay springt in die Höhe.

1655459392893.png

Diese 3,2GB wurden innerhalb von wenigen Sekunden transferiert, danach bricht die Performance ein und es dauert Stunden für ein weiteres GB.

Hier der Output von iotop innerhalb der ersten Sekunden bis die 3,2 GB übertragen sind:
Code:
Total DISK READ:       988.79 M/s | Total DISK WRITE:       764.84 M/s
Current DISK READ:     806.08 M/s | Current DISK WRITE:     412.72 M/s

Kurz darauf sieht man, dass die Performance einbricht:
Code:
Total DISK READ:       178.04 K/s | Total DISK WRITE:        24.16 K/s
Current DISK READ:       0.00 B/s | Current DISK WRITE:     421.39 K/s

Ich habe den Transfer dann abgebrochen.
Interessant ist es auch, dass nachdem ich den Transfer abbreche, es oft Stunden dauert bis der IO-delay wieder sinkt und sich bei nahezu 0 einpendelt. Als würde tank einige Zeit brauchen um sich zu "erholen" und weiter Daten schreibt.

Hier parallel iostat von tank. Hier sieht man, dass die write-bandwith vor dem Transfer 0 anzeigt und dann ansteigt und auch gleich wie das IO-delay oft erst nach Stunden wieder auf 0 steht.

Code:
root@proxmox-02:~# zpool iostat tank 1
              capacity     operations     bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
tank        15.5T  13.7T      0      0      0      0
tank        15.5T  13.7T      0      0      0      0
tank        15.5T  13.7T      0      0      0      0
tank        15.5T  13.7T      0      0      0      0
tank        15.5T  13.7T      1     18  7.98K  75.8K
tank        15.5T  13.7T      0    113      0   894K
tank        15.5T  13.7T      0     94      0   626K
tank        15.5T  13.7T      0     12      0  51.9K
tank        15.5T  13.7T      0      0      0      0
tank        15.5T  13.7T      0     23      0  95.9K
tank        15.5T  13.7T      0    123      0   495K
tank        15.5T  13.7T      0    112      0   451K
tank        15.5T  13.7T      0    112      0   451K
tank        15.5T  13.7T      0    115      0   463K
tank        15.5T  13.7T      0    127      0   511K
.......
.......
.......

1655459900423.png

Eventuell hat dieser Prozess was damit zu tun:
1655460253131.png

Ich habe dann verschiedene Performance Tests mit großen Files gemacht. Alle zeigen eine sehr hohe Geschwindigkeit.

64GB File auf tank schreiben:
Code:
root@proxmox-02:/tank# dd if=/dev/zero of=/tank/test1.img bs=1GB count=64 oflag=dsync
64+0 records in
64+0 records out
64000000000 bytes (64 GB, 60 GiB) copied, 89.7949 s, 713 MB/s
root@proxmox-02:/tank#

64GB File von rpool auf tank mit rsync übertragen:
Code:
root@proxmox-02:/rpool# rsync --progress test1.img /tank/test1.img
test1.img
 64,000,000,000 100%  947.99MB/s    0:01:04 (xfr#1, to-chk=0/1)

Ich habe danach einen weiteren Performance Test gemacht. Nämlich einen ZFS-Pool eines Containers mit rsync von rpool auf tank übertragen.
200GB mit vielen kleinen und auch größeren Files.

Ich hoffe es kann mir hier jemand weiterhelfen.

Liebe Grüße
Max
Auch dort ist das schlechte verhalten zu sehen.

NACHTRAG:
Im Syslog ist mir noch folgendes aufgefallen (deadman):
Code:
Jun 17 12:38:49 proxmox-02 zed[89435]: eid=217 class=deadman pool='tank' vdev=ata-ST8000VN0022-2EL112_ZA18QMBJ-part1 size=4096 offset=6693394821120 priority=3 err=0 flags=0x180880 delay=3613193ms bookmark=1170:1:0:128265
Jun 17 12:38:49 proxmox-02 zed[89437]: eid=218 class=deadman pool='tank' vdev=ata-ST8000VN004-2M2101_WKD14QN3-part1 size=4096 offset=6693394817024 priority=3 err=0 flags=0x180880 delay=3613160ms bookmark=1170:1:0:128264
Jun 17 12:38:49 proxmox-02 zed[89439]: eid=219 class=deadman pool='tank' vdev=ata-ST8000VN0022-2EL112_ZA18QMBJ-part1 size=4096 offset=6693394817024 priority=3 err=0 flags=0x180880 delay=3613160ms bookmark=1170:1:0:128263
Jun 17 12:38:49 proxmox-02 zed[89441]: eid=221 class=deadman pool='tank' vdev=ata-ST8000VN0022-2EL112_ZA18QMBJ-part1 size=4096 offset=6693394812928 priority=3 err=0 flags=0x180880 delay=3613127ms bookmark=1170:1:0:128261
Jun 17 12:38:49 proxmox-02 zed[89443]: eid=220 class=deadman pool='tank' vdev=ata-ST8000VN004-2M2101_WKD14QN3-part1 size=4096 offset=6693394812928 priority=3 err=0 flags=0x180880 delay=3613127ms bookmark=1170:1:0:12826

PS: Seit dem Erstellen des Beitrages vor 30 Minuten ist der IO-delay immer noch nicht zurückgegangen obwohl ich den Transfer abgebrochen habe und keine VM und kein Container läuft.
 
Last edited:
Sag mal, wie hast du denn HDD's an deinem ML angeschlossen? Wir haben auch einige ML Series am laufen. Die haben alle keinen HBA Controller, und auf SATA oder direkt mit dem Raidcontroller im HBA Mode, hatten wir immer schon Probleme, deshalb nutzen wir die ML Serie auch immer nur mehr mit Raidcontroller. Könnte das bei dir auch der Fall sein?
HDD's selbst sind in Ordnung?
 
Hallo @fireon!

Danke für deine Rückmeldung.

Die HDDs selbst sollten ok sein. Alle sind bisher noch nicht wirklich in Betrieb gewesen.

Die 4 HDDs sind vorne in den Einschüben eingesteckt und so wie ich das verstehe sind die mit einem onboard RAID Controller verbunden. (HPE Embedded Smart Array B110i SATA RAID Controller)
Dieser ist aber nicht auf RAID konfiguriert sondern deaktiviert, sodass jede HDD einzelln erkannt wird.
Das RAID übernimmt das ZFS.

lg
Max
 
@mss666 danke für die Info. Ich kann hier nur aus eigener Erfahrung sprechen. Hatten hier Server von HP die ZFS voll geschrottet haben. Ich hatte damals auch direkt beim Proxmox Support nachgefragt und gelernt das HP sagt das es auf HBA schaltet, aber das wohl nicht tut, nicht richtig. Somit Server tot. Da kann ich dir nur empfehlen, baue dir einen richtigen HBA Controller ein, oder nutze das Hardware Raid von HP.
 
Und...
root@proxmox-02:/tank# dd if=/dev/zero of=/tank/test1.img bs=1GB count=64 oflag=dsync
...bringt dir zum Testen nicht viel. ZFS komprimiert ja standadmäßig alles auf Blockebene und Wenn du eine 50GB Datei hast die nur aus Nullen besteht, dann schreibt da ZFS fast nichts auf die Platte, da sich Nullen einfach super wegkomprimieren lassen. Für sowas immer besser /dev/urandom benutzen, damit du Daten hast, welche sich nur schwer komprimieren lassen.

Und das es erst schnell geht und dann so lahm ist liegt wohl am Cacheverhalten. Vermutlich sind deine HDDs wohl immer so lahm. Aber erst schreibt ZFS die Daten halt in den RAM und dann wird versucht der Cache auf die HDD zu schreiben. Daher hast du erst super Geschwindigkeiten bis der RAM-Cache voll ist und danach ist es lahm. Und das sich der Pool erst langsam erholen muss könnte sich auch dadurch erklären. Dann wird ZFS wohl erst im Hintergrund über Stunden die RAM-Cache auf die HDD schreiben und ist der dann wieder leer hat du wieder gute Geschwindigkeiten.
Du könntest mal Sync Writes versuchen. Die sollten dann von Anfang an super lahm sein, da dort nicht gecacht werden darf.
 
Danke @fireon @Dunuin!
@mss666 danke für die Info. Ich kann hier nur aus eigener Erfahrung sprechen. Hatten hier Server von HP die ZFS voll geschrottet haben. Ich hatte damals auch direkt beim Proxmox Support nachgefragt und gelernt das HP sagt das es auf HBA schaltet, aber das wohl nicht tut, nicht richtig. Somit Server tot. Da kann ich dir nur empfehlen, baue dir einen richtigen HBA Controller ein, oder nutze das Hardware Raid von HP.
Habe jetzt einen HBA Controller eingebaut. Verhalten hat sich gebessert, aber es ist trotzdem noch lahm nach gewisser Zeit.
Eventuell hat es damit zu tun, dass ich RAID-Z1 verwende. Ich habe gelesen, dass beim Schreiben die Performance maximal so gut ist wie eine Platte alleine. Weiß nicht ob das stimmt.
Ich dachte mir, dass mal einen Mirror versuche.
Was meint ihr?
 
Eventuell hat es damit zu tun, dass ich RAID-Z1 verwende. Ich habe gelesen, dass beim Schreiben die Performance maximal so gut ist wie eine Platte alleine. Weiß nicht ob das stimmt.
Wenn du über IOPS-Peformance redest dann ja. Da ist ein Raidz1 mit egal wievielen Platten einen Tick langsamer als eine einzelne Platte. Für reine Throughput-Performance kann ein Raidz1 aber durchaus schneller sein als ein Striped Mirror, gerade beim Schreiben, da der mögliche Durchsatz mit der Anzahl der Disks skaliert.
 
Entschuldigt meine späte Rückmeldung.
Ich habe mich jetzt tatsächlich dazu entschieden die 4 HDDs nicht mehr als RAID-Z1 sondern als RAID-10 zu betreiben.
Dadurch habe ich zwar statt knapp 23TB nur noch knapp 16TB Gesamtkapazität (was für mich reicht), jedoch ist die Performance viel besser.
Danke euch für eure Inputs.
lg
Max
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!