thread: Use TLS to accelerate thread look up
Change-Id: I8136db265c9cb8d61de4845ce6eaff2351b5b597 Signed-off-by: Ben Walker <benjamin.walker@intel.com> Reviewed-on: https://review.gerrithub.io/435939 Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
70642bcbe8
commit
605e530a4e
@ -43,6 +43,8 @@
|
|||||||
#include "spdk/queue.h"
|
#include "spdk/queue.h"
|
||||||
#include "spdk/util.h"
|
#include "spdk/util.h"
|
||||||
|
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#include "config-host.h"
|
#include "config-host.h"
|
||||||
#include "fio.h"
|
#include "fio.h"
|
||||||
#include "optgroup.h"
|
#include "optgroup.h"
|
||||||
@ -142,6 +144,8 @@ spdk_fio_cleanup_thread(struct spdk_fio_thread *fio_thread)
|
|||||||
|
|
||||||
while (spdk_fio_poll_thread(fio_thread) > 0) {}
|
while (spdk_fio_poll_thread(fio_thread) > 0) {}
|
||||||
|
|
||||||
|
spdk_set_thread(fio_thread->thread);
|
||||||
|
|
||||||
spdk_free_thread();
|
spdk_free_thread();
|
||||||
free(fio_thread->iocq);
|
free(fio_thread->iocq);
|
||||||
free(fio_thread);
|
free(fio_thread);
|
||||||
|
47
include/spdk_internal/thread.h
Normal file
47
include/spdk_internal/thread.h
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/*-
|
||||||
|
* BSD LICENSE
|
||||||
|
*
|
||||||
|
* Copyright (c) Intel Corporation.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
* * Neither the name of Intel Corporation nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SPDK_THREAD_INTERNAL_H_
|
||||||
|
#define SPDK_THREAD_INTERNAL_H_
|
||||||
|
|
||||||
|
#include "spdk/stdinc.h"
|
||||||
|
|
||||||
|
struct spdk_thread;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Force the current system thread to act as if executing the given SPDK thread.
|
||||||
|
* This is only used for unit testing.
|
||||||
|
*/
|
||||||
|
void spdk_set_thread(struct spdk_thread *thread);
|
||||||
|
|
||||||
|
#endif /* SPDK_THREAD_INTERNAL_H_ */
|
@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
#include "spdk_internal/event.h"
|
#include "spdk_internal/event.h"
|
||||||
#include "spdk_internal/log.h"
|
#include "spdk_internal/log.h"
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#include "spdk/log.h"
|
#include "spdk/log.h"
|
||||||
#include "spdk/thread.h"
|
#include "spdk/thread.h"
|
||||||
@ -134,7 +135,7 @@ spdk_event_call(struct spdk_event *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline uint32_t
|
static inline uint32_t
|
||||||
_spdk_event_queue_run_batch(struct spdk_reactor *reactor)
|
_spdk_event_queue_run_batch(struct spdk_reactor *reactor, struct spdk_thread *thread)
|
||||||
{
|
{
|
||||||
unsigned count, i;
|
unsigned count, i;
|
||||||
void *events[SPDK_EVENT_BATCH_SIZE];
|
void *events[SPDK_EVENT_BATCH_SIZE];
|
||||||
@ -153,6 +154,8 @@ _spdk_event_queue_run_batch(struct spdk_reactor *reactor)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spdk_set_thread(thread);
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
struct spdk_event *event = events[i];
|
struct spdk_event *event = events[i];
|
||||||
|
|
||||||
@ -160,6 +163,8 @@ _spdk_event_queue_run_batch(struct spdk_reactor *reactor)
|
|||||||
event->fn(event->arg1, event->arg2);
|
event->fn(event->arg1, event->arg2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spdk_set_thread(NULL);
|
||||||
|
|
||||||
spdk_mempool_put_bulk(g_spdk_event_mempool, events, count);
|
spdk_mempool_put_bulk(g_spdk_event_mempool, events, count);
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
@ -294,7 +299,9 @@ _spdk_reactor_run(void *arg)
|
|||||||
|
|
||||||
sleep_cycles = reactor->max_delay_us * spdk_get_ticks_hz() / SPDK_SEC_TO_USEC;
|
sleep_cycles = reactor->max_delay_us * spdk_get_ticks_hz() / SPDK_SEC_TO_USEC;
|
||||||
if (g_context_switch_monitor_enabled) {
|
if (g_context_switch_monitor_enabled) {
|
||||||
|
spdk_set_thread(thread);
|
||||||
_spdk_reactor_context_switch_monitor_start(reactor, NULL);
|
_spdk_reactor_context_switch_monitor_start(reactor, NULL);
|
||||||
|
spdk_set_thread(NULL);
|
||||||
}
|
}
|
||||||
now = spdk_get_ticks();
|
now = spdk_get_ticks();
|
||||||
reactor->tsc_last = now;
|
reactor->tsc_last = now;
|
||||||
@ -302,7 +309,7 @@ _spdk_reactor_run(void *arg)
|
|||||||
while (1) {
|
while (1) {
|
||||||
bool took_action = false;
|
bool took_action = false;
|
||||||
|
|
||||||
event_count = _spdk_event_queue_run_batch(reactor);
|
event_count = _spdk_event_queue_run_batch(reactor, thread);
|
||||||
if (event_count > 0) {
|
if (event_count > 0) {
|
||||||
rc = 1;
|
rc = 1;
|
||||||
now = spdk_get_ticks();
|
now = spdk_get_ticks();
|
||||||
@ -346,6 +353,7 @@ _spdk_reactor_run(void *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spdk_set_thread(thread);
|
||||||
_spdk_reactor_context_switch_monitor_stop(reactor, NULL);
|
_spdk_reactor_context_switch_monitor_stop(reactor, NULL);
|
||||||
spdk_free_thread();
|
spdk_free_thread();
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -45,6 +45,8 @@ extern "C" {
|
|||||||
#include "spdk/log.h"
|
#include "spdk/log.h"
|
||||||
#include "spdk/thread.h"
|
#include "spdk/thread.h"
|
||||||
#include "spdk/bdev.h"
|
#include "spdk/bdev.h"
|
||||||
|
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace rocksdb
|
namespace rocksdb
|
||||||
@ -579,8 +581,11 @@ public:
|
|||||||
|
|
||||||
void SpdkInitializeThread(void)
|
void SpdkInitializeThread(void)
|
||||||
{
|
{
|
||||||
|
struct spdk_thread *thread;
|
||||||
|
|
||||||
if (g_fs != NULL) {
|
if (g_fs != NULL) {
|
||||||
spdk_allocate_thread(NULL, NULL, NULL, NULL, "spdk_rocksdb");
|
thread = spdk_allocate_thread(NULL, NULL, NULL, NULL, "spdk_rocksdb");
|
||||||
|
spdk_set_thread(thread);
|
||||||
g_sync_args.channel = spdk_fs_alloc_io_channel_sync(g_fs);
|
g_sync_args.channel = spdk_fs_alloc_io_channel_sync(g_fs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
#include "spdk/util.h"
|
#include "spdk/util.h"
|
||||||
|
|
||||||
#include "spdk_internal/log.h"
|
#include "spdk_internal/log.h"
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
#include <sys/prctl.h>
|
#include <sys/prctl.h>
|
||||||
@ -130,22 +131,12 @@ struct spdk_thread {
|
|||||||
static TAILQ_HEAD(, spdk_thread) g_threads = TAILQ_HEAD_INITIALIZER(g_threads);
|
static TAILQ_HEAD(, spdk_thread) g_threads = TAILQ_HEAD_INITIALIZER(g_threads);
|
||||||
static uint32_t g_thread_count = 0;
|
static uint32_t g_thread_count = 0;
|
||||||
|
|
||||||
static struct spdk_thread *
|
static __thread struct spdk_thread *tls_thread = NULL;
|
||||||
|
|
||||||
|
static inline struct spdk_thread *
|
||||||
_get_thread(void)
|
_get_thread(void)
|
||||||
{
|
{
|
||||||
pthread_t thread_id;
|
return tls_thread;
|
||||||
struct spdk_thread *thread;
|
|
||||||
|
|
||||||
thread_id = pthread_self();
|
|
||||||
|
|
||||||
thread = NULL;
|
|
||||||
TAILQ_FOREACH(thread, &g_threads, tailq) {
|
|
||||||
if (thread->thread_id == thread_id) {
|
|
||||||
return thread;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -257,6 +248,12 @@ spdk_allocate_thread(spdk_thread_pass_msg msg_fn,
|
|||||||
return thread;
|
return thread;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
spdk_set_thread(struct spdk_thread *thread)
|
||||||
|
{
|
||||||
|
tls_thread = thread;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
spdk_free_thread(void)
|
spdk_free_thread(void)
|
||||||
{
|
{
|
||||||
@ -290,6 +287,8 @@ spdk_free_thread(void)
|
|||||||
|
|
||||||
free(thread);
|
free(thread);
|
||||||
|
|
||||||
|
tls_thread = NULL;
|
||||||
|
|
||||||
pthread_mutex_unlock(&g_devlist_mutex);
|
pthread_mutex_unlock(&g_devlist_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -360,6 +359,10 @@ spdk_thread_poll(struct spdk_thread *thread, uint32_t max_msgs)
|
|||||||
struct spdk_poller *poller;
|
struct spdk_poller *poller;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
|
assert(_get_thread() == NULL);
|
||||||
|
|
||||||
|
tls_thread = thread;
|
||||||
|
|
||||||
msg_count = _spdk_msg_queue_run_batch(thread, max_msgs);
|
msg_count = _spdk_msg_queue_run_batch(thread, max_msgs);
|
||||||
if (msg_count) {
|
if (msg_count) {
|
||||||
rc = 1;
|
rc = 1;
|
||||||
@ -420,6 +423,8 @@ spdk_thread_poll(struct spdk_thread *thread, uint32_t max_msgs)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tls_thread = NULL;
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "spdk_cunit.h"
|
#include "spdk_cunit.h"
|
||||||
#include "spdk/thread.h"
|
#include "spdk/thread.h"
|
||||||
#include "spdk_internal/mock.h"
|
#include "spdk_internal/mock.h"
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#include "common/lib/test_env.c"
|
#include "common/lib/test_env.c"
|
||||||
|
|
||||||
@ -67,9 +68,12 @@ set_thread(uintptr_t thread_id)
|
|||||||
g_thread_id = thread_id;
|
g_thread_id = thread_id;
|
||||||
if (thread_id == INVALID_THREAD) {
|
if (thread_id == INVALID_THREAD) {
|
||||||
MOCK_CLEAR(pthread_self);
|
MOCK_CLEAR(pthread_self);
|
||||||
|
spdk_set_thread(NULL);
|
||||||
} else {
|
} else {
|
||||||
MOCK_SET(pthread_self, (pthread_t)thread_id);
|
MOCK_SET(pthread_self, (pthread_t)thread_id);
|
||||||
|
spdk_set_thread(g_ut_threads[thread_id].thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -120,7 +124,7 @@ poll_thread(uintptr_t thread_id)
|
|||||||
CU_ASSERT(thread_id < g_ut_num_threads);
|
CU_ASSERT(thread_id < g_ut_num_threads);
|
||||||
|
|
||||||
original_thread_id = g_thread_id;
|
original_thread_id = g_thread_id;
|
||||||
set_thread(thread_id);
|
set_thread(INVALID_THREAD);
|
||||||
|
|
||||||
while (spdk_thread_poll(thread->thread, 0) > 0) {
|
while (spdk_thread_poll(thread->thread, 0) > 0) {
|
||||||
busy = true;
|
busy = true;
|
||||||
|
@ -40,6 +40,8 @@
|
|||||||
/* HACK: disable VTune integration so the unit test doesn't need VTune headers and libs to build */
|
/* HACK: disable VTune integration so the unit test doesn't need VTune headers and libs to build */
|
||||||
#undef SPDK_CONFIG_VTUNE
|
#undef SPDK_CONFIG_VTUNE
|
||||||
|
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#include "bdev/bdev.c"
|
#include "bdev/bdev.c"
|
||||||
|
|
||||||
DEFINE_STUB(spdk_conf_find_section, struct spdk_conf_section *, (struct spdk_conf *cp,
|
DEFINE_STUB(spdk_conf_find_section, struct spdk_conf_section *, (struct spdk_conf *cp,
|
||||||
@ -1402,6 +1404,7 @@ bdev_io_alignment(void)
|
|||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
struct spdk_thread *thread;
|
||||||
CU_pSuite suite = NULL;
|
CU_pSuite suite = NULL;
|
||||||
unsigned int num_failures;
|
unsigned int num_failures;
|
||||||
|
|
||||||
@ -1432,7 +1435,8 @@ main(int argc, char **argv)
|
|||||||
return CU_get_error();
|
return CU_get_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
spdk_allocate_thread(_bdev_send_msg, NULL, NULL, NULL, "thread0");
|
thread = spdk_allocate_thread(_bdev_send_msg, NULL, NULL, NULL, "thread0");
|
||||||
|
spdk_set_thread(thread);
|
||||||
CU_basic_set_mode(CU_BRM_VERBOSE);
|
CU_basic_set_mode(CU_BRM_VERBOSE);
|
||||||
CU_basic_run_tests();
|
CU_basic_run_tests();
|
||||||
num_failures = CU_get_number_of_failures();
|
num_failures = CU_get_number_of_failures();
|
||||||
|
@ -40,6 +40,8 @@
|
|||||||
/* HACK: disable VTune integration so the unit test doesn't need VTune headers and libs to build */
|
/* HACK: disable VTune integration so the unit test doesn't need VTune headers and libs to build */
|
||||||
#undef SPDK_CONFIG_VTUNE
|
#undef SPDK_CONFIG_VTUNE
|
||||||
|
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#include "bdev/bdev.c"
|
#include "bdev/bdev.c"
|
||||||
#include "bdev/part.c"
|
#include "bdev/part.c"
|
||||||
|
|
||||||
@ -149,6 +151,7 @@ part_test(void)
|
|||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
struct spdk_thread *thread;
|
||||||
CU_pSuite suite = NULL;
|
CU_pSuite suite = NULL;
|
||||||
unsigned int num_failures;
|
unsigned int num_failures;
|
||||||
|
|
||||||
@ -169,7 +172,8 @@ main(int argc, char **argv)
|
|||||||
return CU_get_error();
|
return CU_get_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
spdk_allocate_thread(_part_send_msg, NULL, NULL, NULL, "thread0");
|
thread = spdk_allocate_thread(_part_send_msg, NULL, NULL, NULL, "thread0");
|
||||||
|
spdk_set_thread(thread);
|
||||||
CU_basic_set_mode(CU_BRM_VERBOSE);
|
CU_basic_set_mode(CU_BRM_VERBOSE);
|
||||||
CU_basic_run_tests();
|
CU_basic_run_tests();
|
||||||
num_failures = CU_get_number_of_failures();
|
num_failures = CU_get_number_of_failures();
|
||||||
|
@ -36,6 +36,8 @@
|
|||||||
#include "common/lib/test_env.c"
|
#include "common/lib/test_env.c"
|
||||||
#include "unit/lib/json_mock.c"
|
#include "unit/lib/json_mock.c"
|
||||||
|
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#include "bdev/pmem/bdev_pmem.c"
|
#include "bdev/pmem/bdev_pmem.c"
|
||||||
|
|
||||||
DEFINE_STUB(spdk_conf_find_section, struct spdk_conf_section *,
|
DEFINE_STUB(spdk_conf_find_section, struct spdk_conf_section *,
|
||||||
@ -377,9 +379,12 @@ ut_pmem_blk_clean(void)
|
|||||||
static int
|
static int
|
||||||
ut_pmem_blk_init(void)
|
ut_pmem_blk_init(void)
|
||||||
{
|
{
|
||||||
|
struct spdk_thread *thread;
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
|
|
||||||
spdk_allocate_thread(_pmem_send_msg, NULL, NULL, NULL, NULL);
|
thread = spdk_allocate_thread(_pmem_send_msg, NULL, NULL, NULL, NULL);
|
||||||
|
spdk_set_thread(thread);
|
||||||
|
|
||||||
g_pool_ok.buffer = calloc(g_pool_ok.nblock, g_pool_ok.bsize);
|
g_pool_ok.buffer = calloc(g_pool_ok.nblock, g_pool_ok.bsize);
|
||||||
if (g_pool_ok.buffer == NULL) {
|
if (g_pool_ok.buffer == NULL) {
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include "spdk_cunit.h"
|
#include "spdk_cunit.h"
|
||||||
#include "spdk/blob.h"
|
#include "spdk/blob.h"
|
||||||
#include "spdk/string.h"
|
#include "spdk/string.h"
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#include "common/lib/test_env.c"
|
#include "common/lib/test_env.c"
|
||||||
#include "../bs_dev_common.c"
|
#include "../bs_dev_common.c"
|
||||||
@ -5859,6 +5860,7 @@ blob_io_unit_compatiblity(void)
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
struct spdk_thread *thread;
|
||||||
CU_pSuite suite = NULL;
|
CU_pSuite suite = NULL;
|
||||||
unsigned int num_failures;
|
unsigned int num_failures;
|
||||||
|
|
||||||
@ -5931,7 +5933,8 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
g_dev_buffer = calloc(1, DEV_BUFFER_SIZE);
|
g_dev_buffer = calloc(1, DEV_BUFFER_SIZE);
|
||||||
spdk_allocate_thread(_bs_send_msg, NULL, NULL, NULL, "thread0");
|
thread = spdk_allocate_thread(_bs_send_msg, NULL, NULL, NULL, "thread0");
|
||||||
|
spdk_set_thread(thread);
|
||||||
CU_basic_set_mode(CU_BRM_VERBOSE);
|
CU_basic_set_mode(CU_BRM_VERBOSE);
|
||||||
CU_basic_run_tests();
|
CU_basic_run_tests();
|
||||||
num_failures = CU_get_number_of_failures();
|
num_failures = CU_get_number_of_failures();
|
||||||
|
@ -41,6 +41,8 @@
|
|||||||
#include "blobfs/blobfs.c"
|
#include "blobfs/blobfs.c"
|
||||||
#include "blobfs/tree.c"
|
#include "blobfs/tree.c"
|
||||||
|
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#include "unit/lib/blob/bs_dev_common.c"
|
#include "unit/lib/blob/bs_dev_common.c"
|
||||||
|
|
||||||
struct spdk_filesystem *g_fs;
|
struct spdk_filesystem *g_fs;
|
||||||
@ -464,6 +466,7 @@ channel_ops_sync(void)
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
struct spdk_thread *thread;
|
||||||
CU_pSuite suite = NULL;
|
CU_pSuite suite = NULL;
|
||||||
unsigned int num_failures;
|
unsigned int num_failures;
|
||||||
|
|
||||||
@ -491,7 +494,8 @@ int main(int argc, char **argv)
|
|||||||
return CU_get_error();
|
return CU_get_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
spdk_allocate_thread(_fs_send_msg, NULL, NULL, NULL, "thread0");
|
thread = spdk_allocate_thread(_fs_send_msg, NULL, NULL, NULL, "thread0");
|
||||||
|
spdk_set_thread(thread);
|
||||||
|
|
||||||
g_dev_buffer = calloc(1, DEV_BUFFER_SIZE);
|
g_dev_buffer = calloc(1, DEV_BUFFER_SIZE);
|
||||||
CU_basic_set_mode(CU_BRM_VERBOSE);
|
CU_basic_set_mode(CU_BRM_VERBOSE);
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#include "spdk/log.h"
|
#include "spdk/log.h"
|
||||||
#include "spdk/thread.h"
|
#include "spdk/thread.h"
|
||||||
#include "spdk/barrier.h"
|
#include "spdk/barrier.h"
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#include "spdk_cunit.h"
|
#include "spdk_cunit.h"
|
||||||
#include "unit/lib/blob/bs_dev_common.c"
|
#include "unit/lib/blob/bs_dev_common.c"
|
||||||
@ -339,9 +340,11 @@ terminate_spdk_thread(void *arg)
|
|||||||
static void *
|
static void *
|
||||||
spdk_thread(void *arg)
|
spdk_thread(void *arg)
|
||||||
{
|
{
|
||||||
|
struct spdk_thread *thread;
|
||||||
struct ut_request *req;
|
struct ut_request *req;
|
||||||
|
|
||||||
spdk_allocate_thread(_fs_send_msg, NULL, NULL, NULL, "thread1");
|
thread = spdk_allocate_thread(_fs_send_msg, NULL, NULL, NULL, "thread1");
|
||||||
|
spdk_set_thread(thread);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
pthread_mutex_lock(&g_mutex);
|
pthread_mutex_lock(&g_mutex);
|
||||||
@ -364,6 +367,7 @@ spdk_thread(void *arg)
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
struct spdk_thread *thread;
|
||||||
CU_pSuite suite = NULL;
|
CU_pSuite suite = NULL;
|
||||||
pthread_t spdk_tid;
|
pthread_t spdk_tid;
|
||||||
unsigned int num_failures;
|
unsigned int num_failures;
|
||||||
@ -389,7 +393,8 @@ int main(int argc, char **argv)
|
|||||||
return CU_get_error();
|
return CU_get_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
spdk_allocate_thread(_fs_send_msg, NULL, NULL, NULL, "thread0");
|
thread = spdk_allocate_thread(_fs_send_msg, NULL, NULL, NULL, "thread0");
|
||||||
|
spdk_set_thread(thread);
|
||||||
|
|
||||||
pthread_create(&spdk_tid, NULL, spdk_thread, NULL);
|
pthread_create(&spdk_tid, NULL, spdk_thread, NULL);
|
||||||
g_dev_buffer = calloc(1, DEV_BUFFER_SIZE);
|
g_dev_buffer = calloc(1, DEV_BUFFER_SIZE);
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
#include "spdk_cunit.h"
|
#include "spdk_cunit.h"
|
||||||
#include "spdk_internal/mock.h"
|
#include "spdk_internal/mock.h"
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#include "common/lib/test_env.c"
|
#include "common/lib/test_env.c"
|
||||||
#include "nvmf/ctrlr.c"
|
#include "nvmf/ctrlr.c"
|
||||||
@ -765,6 +766,7 @@ test_identify_ns(void)
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
struct spdk_thread *thread;
|
||||||
CU_pSuite suite = NULL;
|
CU_pSuite suite = NULL;
|
||||||
unsigned int num_failures;
|
unsigned int num_failures;
|
||||||
|
|
||||||
@ -789,7 +791,8 @@ int main(int argc, char **argv)
|
|||||||
return CU_get_error();
|
return CU_get_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
spdk_allocate_thread(ctrlr_ut_pass_msg, NULL, NULL, NULL, "ctrlr_ut");
|
thread = spdk_allocate_thread(ctrlr_ut_pass_msg, NULL, NULL, NULL, "ctrlr_ut");
|
||||||
|
spdk_set_thread(thread);
|
||||||
|
|
||||||
CU_basic_set_mode(CU_BRM_VERBOSE);
|
CU_basic_set_mode(CU_BRM_VERBOSE);
|
||||||
CU_basic_run_tests();
|
CU_basic_run_tests();
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include "common/lib/test_env.c"
|
#include "common/lib/test_env.c"
|
||||||
#include "spdk_cunit.h"
|
#include "spdk_cunit.h"
|
||||||
#include "spdk_internal/mock.h"
|
#include "spdk_internal/mock.h"
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#include "nvmf/subsystem.c"
|
#include "nvmf/subsystem.c"
|
||||||
|
|
||||||
@ -448,6 +449,7 @@ test_spdk_nvmf_subsystem_set_sn(void)
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
struct spdk_thread *thread;
|
||||||
CU_pSuite suite = NULL;
|
CU_pSuite suite = NULL;
|
||||||
unsigned int num_failures;
|
unsigned int num_failures;
|
||||||
|
|
||||||
@ -469,11 +471,14 @@ int main(int argc, char **argv)
|
|||||||
return CU_get_error();
|
return CU_get_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
spdk_allocate_thread(_subsystem_send_msg, NULL, NULL, NULL, "thread0");
|
thread = spdk_allocate_thread(_subsystem_send_msg, NULL, NULL, NULL, "thread0");
|
||||||
|
spdk_set_thread(thread);
|
||||||
|
|
||||||
CU_basic_set_mode(CU_BRM_VERBOSE);
|
CU_basic_set_mode(CU_BRM_VERBOSE);
|
||||||
CU_basic_run_tests();
|
CU_basic_run_tests();
|
||||||
num_failures = CU_get_number_of_failures();
|
num_failures = CU_get_number_of_failures();
|
||||||
CU_cleanup_registry();
|
CU_cleanup_registry();
|
||||||
|
|
||||||
spdk_free_thread();
|
spdk_free_thread();
|
||||||
|
|
||||||
return num_failures;
|
return num_failures;
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
#include "spdk_cunit.h"
|
#include "spdk_cunit.h"
|
||||||
#include "spdk_internal/mock.h"
|
#include "spdk_internal/mock.h"
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#include "common/lib/test_env.c"
|
#include "common/lib/test_env.c"
|
||||||
#include "nvmf/ctrlr.c"
|
#include "nvmf/ctrlr.c"
|
||||||
@ -205,6 +206,7 @@ test_nvmf_tcp_create(void)
|
|||||||
|
|
||||||
thread = spdk_allocate_thread(NULL, NULL, NULL, NULL, NULL);
|
thread = spdk_allocate_thread(NULL, NULL, NULL, NULL, NULL);
|
||||||
SPDK_CU_ASSERT_FATAL(thread != NULL);
|
SPDK_CU_ASSERT_FATAL(thread != NULL);
|
||||||
|
spdk_set_thread(thread);
|
||||||
|
|
||||||
/* case 1 */
|
/* case 1 */
|
||||||
memset(&opts, 0, sizeof(opts));
|
memset(&opts, 0, sizeof(opts));
|
||||||
@ -273,6 +275,7 @@ test_nvmf_tcp_destroy(void)
|
|||||||
|
|
||||||
thread = spdk_allocate_thread(NULL, NULL, NULL, NULL, NULL);
|
thread = spdk_allocate_thread(NULL, NULL, NULL, NULL, NULL);
|
||||||
SPDK_CU_ASSERT_FATAL(thread != NULL);
|
SPDK_CU_ASSERT_FATAL(thread != NULL);
|
||||||
|
spdk_set_thread(thread);
|
||||||
|
|
||||||
/* case 1 */
|
/* case 1 */
|
||||||
memset(&opts, 0, sizeof(opts));
|
memset(&opts, 0, sizeof(opts));
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
|
|
||||||
#include "spdk_cunit.h"
|
#include "spdk_cunit.h"
|
||||||
|
|
||||||
|
#include "spdk_internal/thread.h"
|
||||||
|
|
||||||
#include "thread/thread.c"
|
#include "thread/thread.c"
|
||||||
#include "common/lib/ut_multithread.c"
|
#include "common/lib/ut_multithread.c"
|
||||||
|
|
||||||
@ -343,7 +345,8 @@ thread_name(void)
|
|||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
/* Create thread with no name, which automatically generates one */
|
/* Create thread with no name, which automatically generates one */
|
||||||
spdk_allocate_thread(NULL, NULL, NULL, NULL, NULL);
|
thread = spdk_allocate_thread(NULL, NULL, NULL, NULL, NULL);
|
||||||
|
spdk_set_thread(thread);
|
||||||
thread = spdk_get_thread();
|
thread = spdk_get_thread();
|
||||||
SPDK_CU_ASSERT_FATAL(thread != NULL);
|
SPDK_CU_ASSERT_FATAL(thread != NULL);
|
||||||
name = spdk_thread_get_name(thread);
|
name = spdk_thread_get_name(thread);
|
||||||
@ -351,7 +354,8 @@ thread_name(void)
|
|||||||
spdk_free_thread();
|
spdk_free_thread();
|
||||||
|
|
||||||
/* Create thread named "test_thread" */
|
/* Create thread named "test_thread" */
|
||||||
spdk_allocate_thread(NULL, NULL, NULL, NULL, "test_thread");
|
thread = spdk_allocate_thread(NULL, NULL, NULL, NULL, "test_thread");
|
||||||
|
spdk_set_thread(thread);
|
||||||
thread = spdk_get_thread();
|
thread = spdk_get_thread();
|
||||||
SPDK_CU_ASSERT_FATAL(thread != NULL);
|
SPDK_CU_ASSERT_FATAL(thread != NULL);
|
||||||
name = spdk_thread_get_name(thread);
|
name = spdk_thread_get_name(thread);
|
||||||
|
Loading…
Reference in New Issue
Block a user