Sollte ich eine höhere CPU/niedrigere Bandbreite oder eine etwas langsamere CPU/höhere Bandbreite wählen?

Sollte ich eine höhere CPU/niedrigere Bandbreite oder eine etwas langsamere CPU/höhere Bandbreite wählen?

Ich habe einige Server, die viele Dateikomprimierungsvorgänge ausführen. Dies bedeutet auch, dass alle Dateien zuerst remote heruntergeladen werden müssen, bevor sie komprimiert und remote hochgeladen oder remote an Clients gestreamt werden können.
Ich habe die Möglichkeit, entweder alte Server zu aktualisieren oder neue anzuschaffen.

Die alten Serverspezifikationen liegen bei etwa 3.1 GHzund die durchschnittliche Bandbreite beträgt 100 Mbps. Die neuen Serverspezifikationen liegen bei etwa 2.4 GHzund die garantierte Bandbreite beträgt 1000 Mbps up to 2000 Mbps. Der Speicherverbrauch sollte in der neuen Iteration gleich bleiben oder reduziert werden.

An diesem Punkt habe ich meinen RAM- und Festplattenverbrauch ermittelt. Das ist kein Problem. Die Frage bezieht sich darauf, wie sich CPU-Geschwindigkeiten und Bandbreite auf gestreamte Downloads auswirken.

Das sind meine Optionen.
Welche Option ist für meinen Anwendungsfall besser?

Antwort1

Sie sollten die CPU- und Bandbreitennutzung auf Ihren aktuellen Servern verfolgen, wenn diese „Zip-Vorgänge“ durchgeführt werden.

Wenn die CPU zu 100 % ausgelastet ist, sollten Sie schnellere CPUs verwenden. Wenn die Bandbreite zu 100 % ausgelastet ist, sollten Sie eine höhere Bandbreite verwenden.


Bitte beachten Sie auch, dass neuere CPUs unabhängig von den nominalen GHz-Werten wesentlich schneller sein können als ältere; auch die Anzahl der CPU-Kerne ist relevant (vorausgesetzt, diese „Zip-Operationen“ werden in mehreren Threads ausgeführt und/oder parallel verrichtet).

Antwort2

Wenn Sie eine „optimale“ Lösung finden möchten, müssen Sie herausfinden, wie viele Daten durch Ihre Datenbusse fließen können. Optimal wäre, wenn die Daten auf einer Netzkarte ankommen, von der CPU gelesen und direkt in den Speicher einer Netzkarte gepackt werden.

Nehmen wir an, Sie haben

  • 2 (damit sie beim Senden und Empfangen nicht durcheinanderkommen) 10-GB-Ethernet-Karten mit jeweils 8 PCI-Express-4-Lanes (je 15 GB/s), vorausgesetzt, Sie können ein MB bekommen, das dies unterstützt.
  • Sie investieren in einige CPU+MB, die dies tatsächlich unterstützen können, RyZen 5950X+x570

Dann gibt es noch den Speicherdurchsatz

  • DieüberDas System bietet ca. 54 GB/s Lesen/Schreiben oder 48 GB/s Kopieren
  • Die Ethernet-Laufwerke kopieren die empfangenen Daten möglicherweise in den RAM (über den Cache oder nicht).
  • höchstwahrscheinlich hatten Sie noch nicht den Vorteil vonZero-Copy-VersandAberwahrscheinlicherBeim Senden entstehen 3-6 Kopien.
  • Beim Empfangen ist es wahrscheinlich dasselbe, aber dort muss die CPU es mindestens einmal lesen, um es zu komprimieren, wenn sie Glück hat, direkt in den Cache, wenn nicht aus dem Speicher, und dasselbe gilt, wenn es in den Cache komprimiert wird, die Netzwerkkarte könnte es direkt in ihren internen Sendepuffer kopieren.

Im besten Fall also mit den besten NIC- und Benutzerebenentreibern immer Cache öffnen

  • Kopieren von der Netzwerkkarte in den Cache ohne Rückschreiben in den RAM
  • zip von Cache zu Cache
  • vom Cache auf die Netzwerkkarte kopieren
  • Vorausgesetzt, 32 Threads können es versorgen, könnten Sie einen Durchsatz von 10 GB/s erreichen

Wenn Sie keinen Zugriff auf dieses glückliche Szenario haben, ist die Speicherbandbreite wahrscheinlich begrenzt, da

  • angenommen, 3 Kopien, um Daten in die Anwendung zu verschieben
  • 2 Kopien zum Laden in eine Zip-Datei und Speichern des Ergebnisses
  • 3 Kopien zum Versenden
  • und viele Cache-Writebacks, um alles in Dunkelheit zu hüllen

Bei 7 Lese- und 7 Schreibvorgängen sollte das Limit im besten Fall bei etwa 54 GB/s / 14 = 3,85 GB/s liegen. Bei weniger Lese-/Schreibvorgängen stößt man schnell an die maximale Geschwindigkeit der Netzwerkkarte.

Von hier aus können Sie die Spezifikationen reduzieren, bis Ihr Budget oder Ihre Anforderungen erfüllt sind.

Ich konnte keine Daten zum Multithread-Zippen im Speicher finden.

verwandte Informationen