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 v2: - Patch #1: One more fallback - Patch #2: Fall back to sync if fails to lock buffer memory in MSG_ZEROCOPY send. 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 | 94 ++++++++++++++++--- io/channel-socket.c | 176 ++++++++++++++++++++++++++++++++++-- io/channel.c | 66 +++++++++++--- migration/multifd.c | 3 +- 5 files changed, 300 insertions(+), 41 deletions(-) -- 2.33.0