thread: Optionally allow the current time to be passed to
spdk_thread_poll() This is an optimization if the calling function already knows the current time. Change-Id: I1645e08e7475ba6345a44e0f9d4b297a79f6c3c2 Signed-off-by: Ben Walker <benjamin.walker@intel.com> Reviewed-on: https://review.gerrithub.io/c/443634 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
15d3631064
commit
8abfb06e31
@ -649,7 +649,7 @@ spdk_fio_event(struct thread_data *td, int event)
|
||||
static size_t
|
||||
spdk_fio_poll_thread(struct spdk_fio_thread *fio_thread)
|
||||
{
|
||||
return spdk_thread_poll(fio_thread->thread, 0);
|
||||
return spdk_thread_poll(fio_thread->thread, 0, 0);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -216,10 +216,12 @@ void spdk_thread_exit(struct spdk_thread *thread);
|
||||
* \param thread The thread to process
|
||||
* \param max_msgs The maximum number of messages that will be processed.
|
||||
* Use 0 to process the default number of messages (8).
|
||||
* \param now The current time, in ticks. Optional. If 0 is passed, this
|
||||
* function may call spdk_get_ticks() to get the current time.
|
||||
*
|
||||
* \return 1 if work was done. 0 if no work was done. -1 if unknown.
|
||||
*/
|
||||
int spdk_thread_poll(struct spdk_thread *thread, uint32_t max_msgs);
|
||||
int spdk_thread_poll(struct spdk_thread *thread, uint32_t max_msgs, uint64_t now);
|
||||
|
||||
/**
|
||||
* Return the number of ticks until the next timed poller
|
||||
|
@ -262,7 +262,7 @@ _spdk_reactor_run(void *arg)
|
||||
while (1) {
|
||||
_spdk_event_queue_run_batch(reactor, thread);
|
||||
|
||||
rc = spdk_thread_poll(thread, 0);
|
||||
rc = spdk_thread_poll(thread, 0, 0);
|
||||
|
||||
/* Determine if the thread can sleep */
|
||||
if (sleep_cycles && rc == 0) {
|
||||
|
@ -372,17 +372,20 @@ _spdk_poller_insert_timer(struct spdk_thread *thread, struct spdk_poller *poller
|
||||
}
|
||||
|
||||
int
|
||||
spdk_thread_poll(struct spdk_thread *thread, uint32_t max_msgs)
|
||||
spdk_thread_poll(struct spdk_thread *thread, uint32_t max_msgs, uint64_t now)
|
||||
{
|
||||
uint32_t msg_count;
|
||||
struct spdk_thread *orig_thread;
|
||||
struct spdk_poller *poller;
|
||||
int rc = 0;
|
||||
uint64_t now;
|
||||
|
||||
orig_thread = _get_thread();
|
||||
tls_thread = thread;
|
||||
|
||||
if (now == 0) {
|
||||
now = spdk_get_ticks();
|
||||
}
|
||||
|
||||
msg_count = _spdk_msg_queue_run_batch(thread, max_msgs);
|
||||
if (msg_count) {
|
||||
rc = 1;
|
||||
@ -415,8 +418,6 @@ spdk_thread_poll(struct spdk_thread *thread, uint32_t max_msgs)
|
||||
|
||||
poller = TAILQ_FIRST(&thread->timer_pollers);
|
||||
if (poller) {
|
||||
uint64_t now = spdk_get_ticks();
|
||||
|
||||
if (now >= poller->next_run_tick) {
|
||||
int timer_rc = 0;
|
||||
|
||||
@ -443,7 +444,6 @@ spdk_thread_poll(struct spdk_thread *thread, uint32_t max_msgs)
|
||||
}
|
||||
}
|
||||
|
||||
now = spdk_get_ticks();
|
||||
if (rc == 0) {
|
||||
/* Poller status idle */
|
||||
thread->stats.idle_tsc += now - thread->tsc_last;
|
||||
|
@ -125,7 +125,7 @@ poll_thread(uintptr_t thread_id)
|
||||
original_thread_id = g_thread_id;
|
||||
set_thread(INVALID_THREAD);
|
||||
|
||||
while (spdk_thread_poll(thread->thread, 0) > 0) {
|
||||
while (spdk_thread_poll(thread->thread, 0, 0) > 0) {
|
||||
busy = true;
|
||||
}
|
||||
|
||||
|
@ -779,9 +779,9 @@ blob_snapshot_freeze_io(void)
|
||||
* Flag 'frozen_io' is set in _spdk_bs_snapshot_freeze_cpl callback.
|
||||
* Four async I/O operations happen before that. */
|
||||
thread = spdk_get_thread();
|
||||
spdk_thread_poll(thread, 1);
|
||||
spdk_thread_poll(thread, 1);
|
||||
spdk_thread_poll(thread, 1);
|
||||
spdk_thread_poll(thread, 1, 0);
|
||||
spdk_thread_poll(thread, 1, 0);
|
||||
spdk_thread_poll(thread, 1, 0);
|
||||
|
||||
CU_ASSERT(TAILQ_EMPTY(&bs_channel->queued_io));
|
||||
|
||||
|
@ -146,7 +146,7 @@ _fs_init(void *arg)
|
||||
dev = init_dev();
|
||||
spdk_fs_init(dev, NULL, send_request, fs_op_with_handle_complete, NULL);
|
||||
thread = spdk_get_thread();
|
||||
while (spdk_thread_poll(thread, 0) > 0) {}
|
||||
while (spdk_thread_poll(thread, 0, 0) > 0) {}
|
||||
|
||||
SPDK_CU_ASSERT_FATAL(g_fs != NULL);
|
||||
SPDK_CU_ASSERT_FATAL(g_fs->bdev == dev);
|
||||
@ -161,7 +161,7 @@ _fs_unload(void *arg)
|
||||
g_fserrno = -1;
|
||||
spdk_fs_unload(g_fs, fs_op_complete, NULL);
|
||||
thread = spdk_get_thread();
|
||||
while (spdk_thread_poll(thread, 0) > 0) {}
|
||||
while (spdk_thread_poll(thread, 0, 0) > 0) {}
|
||||
CU_ASSERT(g_fserrno == 0);
|
||||
g_fs = NULL;
|
||||
}
|
||||
@ -235,7 +235,7 @@ cache_write_null_buffer(void)
|
||||
spdk_fs_free_io_channel(channel);
|
||||
|
||||
thread = spdk_get_thread();
|
||||
while (spdk_thread_poll(thread, 0) > 0) {}
|
||||
while (spdk_thread_poll(thread, 0, 0) > 0) {}
|
||||
|
||||
ut_send_request(_fs_unload, NULL);
|
||||
}
|
||||
@ -265,7 +265,7 @@ fs_create_sync(void)
|
||||
spdk_fs_free_io_channel(channel);
|
||||
|
||||
thread = spdk_get_thread();
|
||||
while (spdk_thread_poll(thread, 0) > 0) {}
|
||||
while (spdk_thread_poll(thread, 0, 0) > 0) {}
|
||||
|
||||
ut_send_request(_fs_unload, NULL);
|
||||
}
|
||||
@ -306,7 +306,7 @@ cache_append_no_cache(void)
|
||||
spdk_fs_free_io_channel(channel);
|
||||
|
||||
thread = spdk_get_thread();
|
||||
while (spdk_thread_poll(thread, 0) > 0) {}
|
||||
while (spdk_thread_poll(thread, 0, 0) > 0) {}
|
||||
|
||||
ut_send_request(_fs_unload, NULL);
|
||||
}
|
||||
@ -343,7 +343,7 @@ fs_delete_file_without_close(void)
|
||||
spdk_fs_free_io_channel(channel);
|
||||
|
||||
thread = spdk_get_thread();
|
||||
while (spdk_thread_poll(thread, 0) > 0) {}
|
||||
while (spdk_thread_poll(thread, 0, 0) > 0) {}
|
||||
|
||||
ut_send_request(_fs_unload, NULL);
|
||||
|
||||
@ -378,7 +378,7 @@ spdk_thread(void *arg)
|
||||
}
|
||||
pthread_mutex_unlock(&g_mutex);
|
||||
|
||||
spdk_thread_poll(thread, 0);
|
||||
spdk_thread_poll(thread, 0, 0);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user