2017-12-08 4 views
0

Wir haben ein Linux-Projekt, wo wir struct Informationen über Puffer schieben. Kürzlich haben wir festgestellt, dass der Kernel-Parameter optmem_max zu klein ist. Ich wurde gebeten, dies durch einen Vorgesetzten zu erhöhen. Während ich verstehe, wie man das macht, verstehe ich nicht wirklich, wie ich weiß, wie groß das ist.Wie ermittle ich in Linux den optimalen Wert von optmem_max?

Weiterhin bekomme ich nicht wirklich was optmem_max ist.

Hier ist, was die Kernel-Dokumentation sagt: „Die maximale zusätzliche Puffergröße pro Socket Zusatzdaten eine Folge von struct cmsghdr Strukturen mit angehängten Daten vorhanden ist.“

(Ich verstehe nicht wirklich, was das auf Englisch bedeutet).

Ich sehe viele Beispiele im Internet, die vorschlagen, dass dies für bessere Leistung erhöht werden sollte.

In:

/etc/sysctl.conf

Ich habe diese Zeile das Problem zu beheben:

net.core.optmem_max = 1020000

Sobald dies erledigt ist, haben wir eine bessere Leistung.

Also meine Frage zusammenfassen:

  1. In Englisch, was ist optmem_max?

  2. Warum ist es standardmäßig in den meisten Linux-Distributionen so niedrig, wenn es größer verbessert die Leistung zu machen?

  3. Wie misst man, was eine gute Größe für diese Zahl sein soll?

  4. Was sind die Konsequenzen, um dies wirklich groß zu machen?

  5. Abgesehen von /etc/sysctl.conf, wo ist dieser Satz im Kernel standardmäßig? Ich grep den Kernel, aber ich konnte keine Spur von dem Standardwert von optmem_max wird auf 20480, das auf unserem System ist der Standard finden.

Antwort

1
  1. In Englisch, was ist optmem_max?

optmem_max ist eine Kernel-Option, die die Erinnerung an die cmsg Liste vom Kernel gepflegt zugeordnet beeinflusst, die „extra“ Paketinformationen wie SCM_RIGHTS oder IP_TTL enthält.

Durch Erhöhen dieser Option kann der Kernel mehr Speicher zuweisen, je nachdem, wie viele Kontrollnachrichten für jeden angeschlossenen Socket benötigt werden (einschließlich IPC Sockets/Pipes).

  1. Warum ist es standardmäßig in den meisten Linux-Distributionen so niedrig, wenn die es größere Leistung verbessert?

Die meisten Distributionen haben normale Benutzer im Auge und die meisten normalen Benutzer, auch Linux/Unix als Server, wenn der Verwendung nicht eine Farm von Servern haben, die Faserkanäle zwischen ihnen oder Server-Prozesse, die nicht tun brauche GB von IPC-Übertragung.

Ein 20KB Puffer ist groß genug für "die meisten", dass er den Kernel-Speicher standardmäßig minimiert und auch einfach genug konfiguriert ist, dass man dies tun kann, wenn sie es brauchen.

  1. Wie misst man, was eine gute Größe für diese Zahl sein soll?

Abhängig von Ihrer Nutzung, aber die Arch Wiki schlägt eine 64KB Größe für optmem_max und eine 16 MB Größe für rmem_max und wmem_max (die die Sende- und Empfangspuffer).

  1. Was sind die Konsequenzen, die es wirklich groß machen?

Weitere Kernel-Speicher, die mit jedem Socket zugeordnet werden können, und vielleicht unnötig.

  1. Abgesehen von /etc/sysctl.conf, wo dieser Satz standardmäßig im Kernel ist? Ich grep den Kernel, aber ich konnte keine Spur von dem Standardwert von optmem_max wird auf 20480, das auf unserem System ist der Standard finden.

Ich bin kein Linux-Kernel Quelle Aficionado, aber es sieht aus wie es in net/core/sock.c:318 sein könnte.

Hoffe, dass kann helfen.

Verwandte Themen