[ 
https://issues.apache.org/jira/browse/IGNITE-28473?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Anton Vinogradov updated IGNITE-28473:
--------------------------------------
    Fix Version/s: 2.19

> Concurrent message serialization in NIO workers causes performance degradation
> ------------------------------------------------------------------------------
>
>                 Key: IGNITE-28473
>                 URL: https://issues.apache.org/jira/browse/IGNITE-28473
>             Project: Ignite
>          Issue Type: Task
>            Reporter: Alex Abashev
>            Assignee: Alex Abashev
>            Priority: Minor
>              Labels: IEP-132, ise
>             Fix For: 2.19
>
>
> When sending the same message to multiple nodes via 
> `GridIoManager.sendToGridTopic()`, the same `Message` object is passed in a 
> loop for each recipient. Serialization does not happen in the sender thread — 
> it happens later, in NIO worker threads 
> (`DirectNioClientWorker.writeToBuffer()` → 
> `GridIoMessageMarshallableSerializer.writeTo()`).
> This results in the same message being serialized **N times concurrently** — 
> once per target node, each time in a separate NIO worker thread — even though 
> the byte representation is identical for all recipients. The result is a 
> performance drop due to redundant serialization work.
> **Call stack:**
>     GridIoMessageMarshallableSerializer.writeTo()
>       → GridNioServer$DirectNioClientWorker.writeToBuffer()
>         → processWrite0() → processWrite()
>           → AbstractNioClientWorker.processSelectedKeysOptimized()
>             → bodyInternal() → body()
> **Expected behavior:** the message should be serialized **once** in the 
> thread where it was constructed, before being enqueued to the NIO layer. NIO 
> workers should operate on a pre-built byte buffer rather than re-serializing 
> the mutable message object independently.
> **Proposed approach:** use the existing serialization mechanism to produce 
> the byte representation of the message once, eagerly, before handing it off 
> to the send queue. NIO workers then write the cached bytes directly to the 
> socket buffer without invoking the serializer.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to