redis的優化 cpu與redis進程的綁定

記錄地址: 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 來高校使用三級緩存

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章