Slowness with large payloads
- Vorherrschende Sprache
- Java
- Sterne
- 12.1k
- Forks
- 4k
- Ø Merge
- 2 T. 17 Std.
- Gemergte PRs (30 T.)
- 37
Beschreibung
When reading a proto off the wire, Netty Passes the chunks of data read up to the message deframer, which stores them in a composite byte buffer. It passes this composite as an InputStream to CodedInputStream for decoding, which itself makes many copies.
It seems like it would be more efficient to pre allocate a buffer of the appropriate size (since we know the message length) and concat to it each chunk that netty passes up. This would be a copy, but it would make it so that CIS doesn't have to copy in its inefficient manner.
This would also free up the buffers Netty uses to read chunks of data off of the wire more quickly.
Discovered when trying to max out a very high speed network link.
Beitragsleitfaden
Rechercherichtung
Beginne damit nachzuverfolgen, wie Netty wire chunks an den message deframer weitergibt und wie der composite buffer CodedInputStream erreicht. Benchmarke das Lesen großer Payloads und vergleiche das Kopieren von Buffern und den Durchsatz; abgeschlossen ist die Aufgabe, wenn weniger Kopiervorgänge und eine bessere Performance ohne Änderung des Decodierungsverhaltens erreicht sind.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- java
- Bereich
- backend, networking, performance
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 35/100