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 |
||
---|---|---|
.. | ||
accel | ||
bdev | ||
blob | ||
blobfs | ||
env_dpdk | ||
event | ||
sock | ||
Makefile |