*/ if (spdk_interrupt_mode_is_enabled()) { uint32_t i; SPDK_ENV_FOREACH_CORE(i) { spdk_cpuset_set_cpu(&reactor->notify_cpuset, i, true); } reactor->in_interrupt = true; } } Reactor 的启动: 一旦Reactor 初始化完成,SPDK 应用程序可以启动 Reactor 线程。这将使得每个 Reactor 开...
// 得到该线程设置的cpu mask cpumask = spdk_thread_get_cpumask(thread); for (i = 0; i < spdk_env_get_core_count(); i++) { …. // 遍历cpu core // 通过cpu mask找到对应的核心,并产生event if (spdk_cpuset_get_cpu(cpumask, core)) { evt = spdk_event_allocate(core, _schedule_...
// 得到该线程设置的cpu mask cpumask = spdk_thread_get_cpumask(thread); for (i = 0; i < spdk_env_get_core_count(); i++) { …. // 遍历cpu core // 通过cpu mask找到对应的核心,并产生event if (spdk_cpuset_get_cpu(cpumask, core)) { evt = spdk_event_allocate(core, _schedule_...
其他 SPDK 库可能会限制某些 API 只能在此应用程序线程的上下文中调用 spdk_interrupt_mode_is_enabled -> 默认禁用中断 g_thread_op_fn(thread, SPDK_THREAD_OP_NEW) -> reactor_thread_op _reactor_schedule_thread spdk_cpuset_zero spdk_cpuset_set_cpu spdk_cpuset_xor -> 异或, eactor:避免在intr中将...
1spdk_reactor_schedule_thread(structspdk_thread *thread)2{3//得到该线程设置的cpu mask4cpumask =spdk_thread_get_cpumask(thread);5for(i =0; i < spdk_env_get_core_count(); i++) {6….//遍历cpu core7//通过cpu mask找到对应的核心,并产生event8if(spdk_cpuset_get_cpu(cpumask, core))...
struct spdk_cpuset *cpumask; uint64_t tsc_last; struct spdk_thread_stats stats; /* * Contains pollers actively running on this thread. Pollers * are run round-robin. The thread takes one poller from the head * of the ring, executes it, then puts it back at the tail of ...
vhost进程启动时可以配置多个轮循线程(reactor),每个线程绑定一个物理CPU。在示例场景下,我们假设配置了两个轮循线程reactor_0和reactor_1,分别对应物理CPU0和物理CPU1。每配置一个vhost-blk设备时,同样要为该设备绑定物理核,并且只能绑定到一个物理核上,例如这里我们假设vm1的vhost-blk设备绑定到CPU0,vm2和vm3绑...
if (spdk_cpuset_get_cpu(&core_mask, req.scheduling_core)) { spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, "Scheduling core cannot be included in isolated core mask.\n"); goto end; } if (scheduler_set_isolated_core_mask(core_mask) == false) { spdk_json...
= current_core) { 17 reactor = spdk_reactor_get(i); 18 rc = spdk_env_thread_launch_pinned(reactor->lcore, _spdk_reactor_run, reactor); 19 ... 20 } 21 spdk_cpuset_set_cpu(g_spdk_app_core_mask, i, true); 22 } 23 24 /* 主线程也会执行_spdk_reactor_run */ 25 /* Start ...
Addedspdk_env_core_get_smt_cpuset()API to get the list of SMT sibling cores for a given core ID. Addedspdk_pci_device_get_numa_id(),spdk_env_get_numa_id(), andSPDK_ENV_NUMA_ID_ANYto replacesocket_idwithnuma_idwhen referring to a NUMA node. ...