記錄地址: https://www.jianshu.com/p/4cefb57459dd
“我們不能任由操作系統負載均衡,因爲我們 自己更瞭解自己的程序,所以,我們可以手動地爲其分配CPU核,而不會過多地佔用CPU0,或是讓我們關鍵進程和一堆別的進程擠 在一起。”。
在文章中提到了 Linux下的一個工具,taskset,可以設定單個進程運行的CPU。
以下均以redis-server 舉例。
1)顯示進程運行的CPU
命令taskset -p 21184
顯示結果:
pid 21184’s current affinity mask: ffffff
注:21184是redis-server運行的 pid
顯示結果的ffffff實際上是二進制24個低位均爲1的bitmask,每一個1對應於1個CPU,表示該進程在24個CPU上運行
2)指定進程運行在某個特定的CPU上
命令taskset -pc 3 21184
顯示結果:
pid 21184’s current affinity list: 0-23
pid 21184’s new affinity list: 3
注:3表示CPU將只會運行在第4個CPU上(從0 開始計數)。
3)進程啓動時指定CPU
命令taskset -c 1 ./redis-server …/redis.conf
影響 Redis 性能的因素之一
CPU 是一個重要的影響因素,由於是單線程模型,Redis 更喜歡大緩存快速 CPU, 而不是多核
在多核 CPU 服務器上面,Redis 的性能還依賴 NUMA 配置和 處理器綁定位置。 最明顯的影響是 redis-benchmark 會隨機使用 CPU 內核。爲了獲得精準的結果,
需要使用固定處理器工具(在 Linux 上可以使用 taskset)。 最有效的辦法是將客戶端和服務端分離到兩個不同的 CPU 來高校使用三級緩存