grpc / grpc/grpc-java

Handle run-away netty buffer thread-local caches

Offen
#4,317 8 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Java
Sterne
12.1k
Forks
4k
Ø Merge
2 T. 17 Std.
Gemergte PRs (30 T.)
37

Beschreibung

gRPC uses ByteBufs from many non-Netty threads for message serialization. When the application has many threads, the per-thread caches can get out of hand.

Start of relevant discussion: https://gitter.im/grpc/grpc?at=5ac698877c3a01610db0f27b
User solution: https://gitter.im/grpc/grpc?at=5ac796016d7e07082bc71e0a
It references: netty/netty#5930

#1758 is related, as it seems allocating the per-thread cache has a noticeable cost. I thought there may be another related issue, but couldn't find it; maybe I'm thinking of that Netty one.

@jpitz had success just outright disabling caching for non-Netty threads. I'm slightly surprised that didn't cause a CPU increase, as that would seem to mean our direct buffers are no longer cached. If our benchmarks show similar behavior, then SGTM.

However, I also wonder if we should swap to heap buffers for message serialization and framing. Especially for small messages. That might hide most of the cost of removing the cache, since for larger messages the cost of direct buffer allocation is likely dwarfed by any copying.

CC @carl-mastrangelo

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit der verlinkten Diskussion, der vorgeschlagenen Benutzerlösung, dem Netty-Issue #5930 und dem verwandten Issue #1758. Vergleiche die Deaktivierung des Cachings für Nicht-Netty-Threads mit der Verwendung von Heap-Puffern für die Serialisierung und das Framing, insbesondere bei kleinen Nachrichten. Der Abschluss sollte durch Benchmarks nachgewiesen werden, die zeigen, dass der ausgewählte Ansatz die CPU-Auslastung nicht erhöht und gleichzeitig ein unkontrolliertes Wachstum der threadbezogenen Caches verhindert.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
backend-api-design, performance
Issue-Typ
Bug
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.