seastar如何在不同cpu上调用代码?

How seastar invoke codes on different cpus?

我目前正在使用 seastart 框架, 并发现它声称 seastart 可以将任务提交给不同的 cpu。

Seastar 声称它在不同的内核之间没有任何共享。

所以我认为 seastar 将不同的线程绑定到不同的 cpu, 并且让不同的任务提交给不同的后台线程(叫engine、container什么的)。

seastar 如何实现这一点,使用 pthread_setaffinity_np ?

但是在提交任务之前,代码仍然可以在随机线程上运行?通过显式使用 smp::submit_to 编码,仅将网络套接字或存储等关键资源分配到不同的 cpus?

直到现在我才听说过 Seastar,图片看起来非常低效。 benchmarks 证实了这一点。每个线程有一个堆栈效率更高,因为堆栈的顶部总是 "hot" (缓存在 L1 中)。

无论如何,是的,要将线程固定到核心,您可以使用特定于平台的 API。如果 POSIX 那将是 pthread_setaffinity_np:

cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(core, &cpuset); // core number starts from 0
int rc = pthread_setaffinity_np(myThread.native_handle(), (cpu_set_t), &cpuset);

SetThreadAffinityMask Windows:

DWORD_PTR mask = (DWORD_PTR) (1 << core); // core number starts from 0
auto rc = SetThreadAffinityMask(GetCurrentThread(), mask);