Warum sollte mein RPC-Server beim Wechsel zu einem neueren Linux-Kernel 5x-CPU verwenden?

356
bjb

Wir laufen hier irgendwie gegen eine Mauer, also dachte ich, dass es sich lohnt, auf dieser Seite nachzufragen.

Wir haben einen Java-Prozess, der alte Sun-RPC-Verbindungen als Kompatibilitätsschicht in einem neuen System bereitstellt. Auf älteren SuSE-Maschinen (2007 Xeon mit 2.6.16) funktionierte alles einwandfrei. Während wir mit RHEL 2.6.32 versucht haben, auf eine modernere Xeon E5-2670-Plattform zu migrieren, wird der Prozess ausgeführt, es werden jedoch alle CPUs unter Last festgehalten und reagieren langsamer als das vorherige Kit. Das clientseitige Laden ist das gleiche, wir verwenden schnellere Serverfestplatten, dieselbe Anzahl von physischen Kernen (obwohl jetzt x2 wegen Hyperthreading), derselbe Arbeitsspeicher (der nicht verhungert oder ausgelagert wird).

Profiling ist nichts wirklich aufschlussreich. Es gab einen gewissen Verdacht, dass Festplatten langsamer laufen würden, weil Protokolle geschrieben wurden (war ext3 auf alt, jetzt ext4 + acl), aber dies scheint kein großes Problem zu sein, und "log load" ist gleich. iostat, netstat sieht alles normal aus.

Ich habe den Verdacht, dass sich in der RPC-Verarbeitung zwischen den Kerneln etwas geändert hat, aber es scheint schwierig zu sein, viele Informationen zu finden, da Sun RPC-Kommunikation heutzutage nicht mehr so ​​populär ist.

Irgendwelche Gedanken? Ich erwarte nicht, dass jemand das Problem notwendigerweise löst, da ich nicht allzu viel darüber erzählen kann, aber vielleicht Hinweise darauf, was Sie bei der Diagnose von RPC und Kernel-Overhead beachten müssen?

Vielen Dank!

1
Haben Sie versucht, Hyperthreading zu deaktivieren? Welche CPU-Auslastung macht es (Benutzer / System / Iowait / ...)? golimar vor 9 Jahren 0

2 Antworten auf die Frage

1
bjb

Es hat den Anschein, dass das Problem auf eine durchsichtige Riesenseitenfunktion des Kernels zurückzuführen ist. Ich bin mir der technischen Details nicht ganz sicher, aber es genügt, die folgenden drei Befehle zu sagen, um das Problem zu beheben:

echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag echo never > /sys/kernel/mm/transparent_hugepage/defrag echo never > /sys/kernel/mm/transparent_hugepage/enabled 

Die CPU-Last ist wieder auf den ursprünglichen Stand zurückgefallen, bevor wir zum neuen Kernel übergegangen sind.

Ich hoffe, das hilft jemand anderem, da ich im Internet in Bezug auf RPC kein Dang-Ding gefunden habe, das nicht mit NFS zusammenhängt! :-)

-1
Alexey Vesnin

Überprüfen Sie Ihren Code auf While-sleeps und ersetzen Sie ihn durch den aktuellen Standby-Modus. Überprüfen Sie Ihre Kernel-Konfiguration.