Squash changes for _bdevperf_construct_targets() and bdevperf_free_targets() into a single patch to shrink the patch series to reduce the burden of reviewers. The pupose of the whole patch series is to move io_target from core based to I/O channel based, and create SPDK thread per I/O channel. It was not possible to create SPDK thread per core and then associate target group with I/O channel as long as I tried. So this patch moves io_target from core based to I/O channel based. The later patch will create SPDK thread per I/O channel. Each core has default reactor thread for now and so we can use spdk_for_each_channel() even when we do not create and destroy SPDK thread per target group yet. The following is the detailed explanation: _bdevperf_construct_targets(): Add a context for _bdevperf_construct_targets() to use spdk_for_each_channel(). If g_every_core_for_each_bdev is false, set the target group to the context and create target only on the group which matches the passed group. If g_every_core_for_each_bdev is true, create target on all groups. Only the master thread can increment g_target_count. Hence hold created number of targets temporary on the context and add it at completion. As a result of these changes, spdk_bdev_open() is called on the thread which runs I/O to the bdev. Hence bdevperf_target_gone() doesn't use message passing, and bdevperf_complete() calls spdk_bdev_close() before sending message to the master thread. Additionally, unregister pollers directly in bdevperf_target_gone(). These changes also fix the potential issue that spdk_bdev_close() would be called on the wrong thread if spdk_bdev_get_io_channel() fails in bdevperf_submit_on_group(). bdevperf_free_targets(): Free each target on the thread which created it by using spdk_for_each_channel(). This will make possible for us to use spdk_for_each_channel() for performance dump even for shutdown case because spdk_for_each_channel() is serialized if it is called on the same thread. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: I4fcdb1024adf4704d3c59215da5669dfdc6cca1b Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/641 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> |
||
---|---|---|
.. | ||
.gitignore | ||
bdevperf.c | ||
bdevperf.py | ||
Makefile |