我目前正在使用seastart框架,并发现它声称seastart可以向不同的cpus提交任务。
Seastar声称它在不同的coers之间没有任何共享。

所以我认为seastar将不同的线程绑定到不同的、,并将不同的任务提交给不同的后台线程(称为引擎cpus容器或其他东西)。
seastar如何实现这一点,使用pthread_setaffinity_np?
但是在提交任务之前,代码仍然在随机线程上工作吗?是否通过使用smp::submit_to显式编码将网络插座或存储等关键资源分配到不同的cpus?
发布于 2020-01-09 19:34:22
我从来没有听说过Seastar,直到现在,这张图片看起来效率非常低。正如benchmarks所证实的那样。每个线程有一个堆栈的效率要高得多,因为堆栈的顶部总是“热的”(缓存在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);或者Windows上的SetThreadAffinityMask:
DWORD_PTR mask = (DWORD_PTR) (1 << core); // core number starts from 0
auto rc = SetThreadAffinityMask(GetCurrentThread(), mask);https://stackoverflow.com/questions/59659862
复制相似问题