mbox series

[v2,0/3] QIOChannel async_write & async_flush + MSG_ZEROCOPY + multifd

Message ID 20210922050340.614781-1-leobras@redhat.com (mailing list archive)
Headers show
Series QIOChannel async_write & async_flush + MSG_ZEROCOPY + multifd | expand

Message

Leonardo Bras Sept. 22, 2021, 5:03 a.m. UTC
This patch series intends to enable MSG_ZEROCOPY in QIOChannel, and make
use of it for multifd migration performance improvement.

Patch #1 creates new callbacks for QIOChannel, allowing the implementation
of asynchronous writing.

Patch #2 implements async_write and async_flush on QIOChannelSocket,

Patch #3 Makes use of async_write + async_flush to enable MSG_ZEROCOPY
for migration using multifd nocomp. 


Results:
So far, the resource usage of __sys_sendmsg() reduced 15 times, and the
overall migration took 13-18% less time, based in synthetic workload.

The objective is to reduce migration time in hosts with heavy cpu usage.

---
Changes since v1:
- Reimplemented the patchset using async_write + async_flush approach.
- Implemented a flush to be able to tell whenever all data was written.

Leonardo Bras (3):
  QIOCHannel: Add io_async_writev & io_async_flush callbacks
  QIOChannelSocket: Implement io_async_write & io_async_flush
  multifd: Send using asynchronous write on nocomp to send RAM pages.

 include/io/channel-socket.h |   2 +
 include/io/channel.h        |  93 +++++++++++++++++++----
 io/channel-socket.c         | 145 ++++++++++++++++++++++++++++++++++--
 io/channel.c                |  66 ++++++++++++----
 migration/multifd.c         |   3 +-
 5 files changed, 271 insertions(+), 38 deletions(-)

Comments

Leonardo Bras Sept. 22, 2021, 10:28 p.m. UTC | #1
I sent an v3 to this series, due to some errors on testing
MSG_ZEROCOPY on a user with a low memory locking resource.
 - If there is not enough memory locking resource, fall back to sync
(non-zerocopy) approach.

Best regards,
Leo