Spdk/module
Ben Walker 365db9ee48 sock/posix: Deal with hung I/O with MSG_ZEROCOPY and interrupt
suppression

When all of the following conditions are met:
- non-blocking socket
- zero copy is enabled
- interrupts are suppressed (i.e. busy polling)
- NIC tx queue is full at the time sendmsg() is called
- epoll_wait sees there is already an EPOLLIN event
then we can get into a situation where data we've sent is queued
up in the kernel network stack, but interrupts have been suppressed
because other traffic is flowing. This makes the kernel miss the
signal to flush the software tx queue. If there wasn't also already
a pending EPOLLIN event, then epoll_wait would have been sufficient
to kick the system out of this state. But when all of this aligns,
it hangs.

We deal with this by detecting the scenario and calling poll(), which
will force the kernel to issue the pending transmits.

Change-Id: Ifb247159b7de16c8fc72a90f0333f5b421c8bd07
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6750
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Community-CI: Mellanox Build Bot
2021-04-23 18:31:07 +00:00
..
accel accel_engine: fix the bug while computing chained crc32c via hardware engine. 2021-04-19 21:27:21 +00:00
bdev bdev_aio: add set interrupt mode to poller 2021-04-23 18:09:54 +00:00
blob module/blob: remove deprecated spdk_bdev_create_bs_dev/from_desc() 2021-03-05 08:33:45 +00:00
blobfs so_ver: increase all major versions 2021-02-05 14:43:47 +00:00
env_dpdk so_ver: increase all major versions 2021-02-05 14:43:47 +00:00
event event/nvmf: Remove use of spdk_app_stop() 2021-03-18 13:18:29 +00:00
sock sock/posix: Deal with hung I/O with MSG_ZEROCOPY and interrupt 2021-04-23 18:31:07 +00:00
Makefile build: install generated pkg-config files 2021-03-17 11:10:45 +00:00