Handle run-away netty buffer thread-local caches
- 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
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