Ilya Kazakov created IGNITE-13856: ------------------------------------- Summary: Superlinear performance of DirectByteBufferStreamImplV2.writeMessage(msg, writer) Key: IGNITE-13856 URL: https://issues.apache.org/jira/browse/IGNITE-13856 Project: Ignite Issue Type: Improvement Components: binary Affects Versions: 2.9 Reporter: Ilya Kazakov Assignee: Ilya Kazakov Attachments: LongStringSQL.java
{code:java} @Override public void writeMessage(Message msg, MessageWriter writer) { if (msg != null) { if (buf.hasRemaining()) { try { writer.beforeInnerMessageWrite() writer.setCurrentWriteClass(msg.getClass()); lastFinished = msg.writeTo(buf, writer); } finally { writer.afterInnerMessageWrite(lastFinished); } } } }{code} It is going to do multiple invocations of msg.writeTo(). If msg is GridH2String, it will to val.getBytes() on every invocation of writeTo(), leading to spiking of CPU and RAM usage. We should change this module to make sure that all serialization happens only once. Reproducer is attached. If we increase string size in 10 times, then the execution time increases more than 10 times. -- This message was sent by Atlassian Jira (v8.3.4#803005)