在多核服务器上,绑定CPU可以减少上下文切换,尤其是当服务器上有其他应用在运行时,REDIS主线程调度到其他CPU核时,会使用L1和L2缓存其他核心,如果其他应用程序也使用缓存,这将降低命中率。现在的服务器一般都是多核的。绑定CPU看似是一个必然且正确的选择,其实是有风险的!NUMA架构下,操作系统的网络中断程序和REDIS线程可能不在同一个CPUsocket上。会导致REDIS线程访问内存变慢。这时候就需要将网络中断程序和REDIS线程绑定到同一个CPUsocket的不同物理核上,解决跨CPUsocket访问的问题。绑定图中的CPU还有其他风险吗?如果绑定了CPU逻辑核,那么REDIS的子进程就会绑定到这个逻辑核上,这样RDB、AOF等操作就会和REDIS主线程竞争同一个逻辑核。优化方法是改变绑定的物理核心,或者修改源代码使用后台程序和子进程使用其他CPU。
