Erhöhen Sie die Speichernutzung auf dem NFS-Server

Erhöhen Sie die Speichernutzung auf dem NFS-Server

Ich erstelle Daten (100 GB große Dateien), die schließlich über NFS v4.2 in einem 10 GB großen Netzwerk auf einen Server kopiert werden. Diese Dateien werden auf vielen Festplatten mit XFS-Formatierung gespeichert (eine Kopie pro Ziellaufwerk).

Wenn die Kopieraufgaben ausgeführt werden:

  • Der Speicherverbrauch auf dem Client ist enorm(könnte mehr als 64 GB sein, es wird so viel Speicher benötigt wie möglich).
  • Allerdings wird auf dem Server fast kein RAM verwendet.

Ich möchte den Speicherverbrauch auf den Clients reduzieren, da diese ständig Daten produzieren und dadurch langsamer werden. Im Gegensatz dazu ist der Server größtenteils ungenutzt.

Ich vermute, da die Festplatten auf dem Server langsam sind, puffert der Client so viele Daten wie möglich, um das Kopieren weniger blockierend zu machen. Ich kann die Hardwarekonfiguration nicht ändern.

Gibt es eine Möglichkeit, den Server zu zwingen, mehr Daten zwischenzuspeichern? Ich würde lieber den Serverspeicher als den Clientspeicher verwenden.

Die NFS-Konfiguration:

10.0.3.1:/          /mnt/field  nfs  nfsvers=4.2,noatime,nodiratime,_netdev,noauto,x-systemd.automount,x-systemd.mount-timeout=10 0 0

/etc/exports:

/mnt        10.0.0.0/16(rw,async,fsid=0,no_subtree_check,crossmnt)

Nic-Konfiguration auf dem Server:

MTU 9000
rinbuffer tx 512, rx 1024

Nic-Konfiguration auf dem Client:

MTU 9000
rinbuffer tx 1024, rx 512

Bearbeiten: Wie gewünscht, /proc/meminfo:

Kundenserver -------------------------------

Bildbeschreibung hier eingeben

Ein Monitor der Speichernutzung auf diesem Client:

Bildbeschreibung hier eingeben

Netzwerknutzung:

Bildbeschreibung hier eingeben

Hinweis: Der Client verwendet zum Berechnen ein großes TMPFS (100 GB). Ich glaube, dieses TMPFS wird nie von der Anzahl des verfügbaren Speichers abgezogen.

Bearbeitung2:

Der Zusammenhang zwischen Netzwerk- und Speichernutzung ist auf dem anderen Client offensichtlicher (damit hätte ich anfangen sollen). Dieser Client verwendet keine tmpfs.

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Antwort1

Ich möchte den Speicherverbrauch auf den Clients reduzieren, da diese kontinuierlich Daten produzieren und dadurch langsamer werden.

Woher wissen Sie das? Der Großteil des Clientspeichers befindet sich im Seitencache, was völlig normal ist, und selbst eine Verbesserung der Pufferung auf dem Server verhindert nicht das aggressive Zwischenspeichern dieser Daten auf der Clientseite.

Haben Sie versucht, den Seitencache (als Test) zu leeren und zu sehen, wie Ihre Anwendung ohne die Verwendung des Seitencaches funktioniert?

NFS verfügt über eine sogenannte „Close-to-Open“-Konsistenz. Dies bedeutet, dass die Stabilität der Daten- und Metadateninhalte nur dann gewährleistet ist, wenn Sie die Datei nicht aktiv geöffnet haben (d. h., ein anderer Client kann die Datei auf einem anderen System ändern, ohne dass Sie etwas davon merken).

Aufgrund dieser Konsistenzbeschränkung verlassen sich die Anwendungen der NFS-Clientsysteme auf den Seitencache, um sicherzustellen, dass die Daten für einen Rücklesevorgang verfügbar sind, falls dies erforderlich sein sollte.

Abgesehen davon /etc/exportsbesteht eine Möglichkeit, mehr Daten auf den Server zu übertragen, ohne zu wissen, was in Ihrem System vor sich geht, darin, NFS auf Ihren Clients mit der syncMount-Option zu mounten und auf Ihrem Server die Pfade mit der Mount-Option zu exportieren async.

Dies hat zur Folge, dass Schreibvorgänge auf der Clientseite an den Server übermittelt werden, während der Server immer mit „Fertig“ antwortet, bevor er die Daten auf die Festplatte übermittelt.

Dies wirkt sich jedoch auf den Durchsatz der Clients aus, da Sie durch die Validierung jeder Anfrage auf der Clientseite eine Latenz verursachen, der Server jedoch viel mehr Daten puffert, da er nicht wartet, bis die Daten zuerst auf der Festplatte landen. Sie möchten wahrscheinlich auch die dirty_write_centisecsund andere Bits auf dem Server ändern, damit er mehr Daten in den Writeback puffern kann.

Hier liegt jedoch das Problem: Dies führt wahrscheinlich dazu, dass die Clients langsamer werden und die Serverintegrität bei einem Absturz beeinträchtigt wird. Wenn der Server abstürzt, können Daten verloren gehen.

Darüber hinaus hat dies keine Auswirkungen auf die Speichernutzung für den Seitencache auf den Clients, über die NFS keine wirkliche Kontrolle hat.

Alles in allem bin ich skeptisch, ob die Reduzierung der Speichernutzung der Clients (wenn Sie hier den Seitencache messen) die Leistung Ihrer Clients verbessern wird.

Antwort2

Nein, wenn Sie weniger Speicher erzwingen, wird das Ganze wahrscheinlich langsamer, nicht schneller. Sie verbrauchen bereits Strom für 188 GB schnellen DRAM, also können Sie diesen auch nutzen.

Der Client-Host verfügt über 188 GB MemTotal und verwendet 162 GB davon für den Cache. Der Speicherbedarf ist eigentlich recht gering, beachten Sie, dass 123 GB MemAvailable sehr schnell freigegeben werden können. Der Großteil der 40 GB Shmem sind wahrscheinlich die tmpfs.

Da Cached + Shmem zusammen mehr als MemTotal ergeben, vermute ich, dass tmpfs doppelt gezählt werden, als gemeinsam genutzter Speicher und in Caches. Das würde auch erklären, warum Cached minus Shmem ungefähr MemAvailable ergibt, tmpfs ohne persistenten Speicher können nicht freigegeben werden.

Serverseitig 15 GB und Änderung MemTotal, 13 GB im Cache. Auf diesem Host ist reichlich Speicher verfügbar. Vermutlich dient der Großteil der Arbeit dem Bereitstellen von Dateien, ansonsten ist der Speicherbedarf nicht groß.

Ohne Nachweis von Overhead wiestarke VMscan-Aktivitätoder wenn der verfügbare Speicher knapp wird, empfehle ich nicht, Maßnahmen zu ergreifen.

verwandte Informationen