We make decisions on how to pick a poll group for a new qpair by looking at each poll group's current_io_qpairs count. But this count isn't always accurate since it doesn't get updated until after the CONNECT has been received. This means that if we accept a bunch of connections all at once, they may all get assigned the same poll group, because the target poll groups counter doesn't get immediately incremented. So add a new counter, current_unassociated_qpairs, to account for these qpairs. We protect this counter with a lock, since the accept thread will increment the counter, and the poll group thread will decrement it when the qpair receives the CONNECT allowing us to associated with a subsystem/controller.. If the qpair gets destroyed before the CONNECT is received, we can use the qpair->connect_received flag to decrement current_unassociated_qpairs. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: I8bba8da2abfe225b3b9f981cd71b6f49e2b87391 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15693 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> |
||
---|---|---|
.. | ||
linux | ||
spdk | ||
spdk_internal | ||
Makefile |