iSCSI-Ziel
Ubuntu 14.04 (Trusty Tahr) mit 16 GB RAM und 16 Core-CPU als LVM-gestütztes iSCSI-Ziel mit drei Samsung-SSD-Festplatten, die jeweils 65.000 IOPS mit einem LSI 6-Gbit / s-Controller mit integriertem Cache ausführen können.
Benchmark auf SSD-Festplatte im Ziel:
fio --filename=/dev/sdd --direct=1 --sync=1 --rw=write --bs=4k --numjobs=10 --iodepth=1 --runtime=60 --time_based --group_reporting --name=ssd-max
iops=65514
Wo sdd
ist in Hardware- RAID 0 mit drei Samsung 850 EVO SSDs konfiguriert .
Initiator
Ich habe eine 500G LUN auf einem Ubuntu 14.04 Client mit 32 GB RAM und 8 Core CPUs exportiert.
Benchmark für exportierte LUN
fio --filename=/dev/sdg --direct=1 --sync=1 --rw=write --bs=4k --numjobs=10 --iodepth=1 --runtime=60 --time_based --group_reporting --name=client-max
iops=2400
Bei DAS und über das Netzwerk ist ein erheblicher Leistungsabfall zu verzeichnen. Ich habe mindestens 10.000 IOPS erwartet.
Die Kommunikation zwischen Ziel und Initiator beträgt weniger als 1 ms und iperf zeigt einen Netzwerkdurchsatz von 9,2 Gbit / s.
Ich verstehe, dass sich 4k-Schreibvorgänge auf die Leistung auswirken werden, da alle Daten den Netzwerkstapel sowohl des Initiators als auch des Ziels durchlaufen müssen, bevor sie auf die Festplatte geschrieben werden. Dies ist jedoch ein inakzeptabler Rückgang von 65k auf 2k.
Wo kann das Problem liegen? Ich habe eine 10-Gbit / s-Ethernet-Netzwerkkarte zwischen dem Ziel und dem Initiator. Irgendwelche Ideen?
quelle
Antworten:
Kurze Antwort: Dies ist das Ergebnis der Netzwerklatenz und eine seriellen Arbeitsbelastung (wie Sie durch den Einsatz auferlegt
direct=1
,sync=1
undiodepth=1
).Lange Antwort: mit
direct=1
,sync=1
undiodepth=1
Du erstellt eine serielle Arbeitsbelastung, da neue Schreibvorgänge nicht die Warteschlange gestellt werden können , bevor der vorherige Schreib begangen wurde und bestätigt. Mit anderen Worten, die Schreibübermittlungsrate hängt streng von der Netzwerklatenz ab. Ein einfacherping
Computer zwischen zwei Computern kann durchaus mehr als 0,2 ms betragen, insbesondere wenn ein Protokoll höherer Ebene als TCP (und darüber hinaus iSCSI) verwendet wird. Unter der Annahme einer Gesamtnetzwerklatenz von ca. 0,33 ms haben Sie einen maximalen IOPS-Wert von ca. 3000. Dies berücksichtigt keine anderen Latenzquellen (z. B. die Festplatten selbst) und entspricht somit den von Ihnen aufgezeichneten Daten.Versuchen Sie Folgendes: Führen Sie einen ersten Benchmark ohne
--direct=1 --sync=1
und einen weiteren mit diesen Optionen aus, erhöhen Sie jedoch dieiodepth
Anforderungen auf 32. Dann berichten Sie hier die Ergebnisse.quelle