Redis是否需要綁定CPU?
在多核服務(wù)器上,綁定CPU可以減少上下文切換,尤其是服務(wù)器上還運行有其它應(yīng)用時,REDIS主線程被調(diào)度到其它CPU核上時,這時會使用其它核上的L1、L2緩存,如果有其它應(yīng)用程序也使用了緩存,這樣會降低命中率。
現(xiàn)在服務(wù)器一般都是多核的,綁定CPU看起來是一個必然正確的選項,但實際上是有風(fēng)險的!
在NUMA架構(gòu)下,操作系統(tǒng)的網(wǎng)絡(luò)中斷程序與REDIS線程可能不在同一個CPU socket上,會導(dǎo)致REDIS線程訪問內(nèi)存變慢,這個時候就需要把網(wǎng)絡(luò)中斷程序與REDIS線程綁定在同一個CPU socket內(nèi)的不同物理核上,以解決跨CPU socket訪問問題。
圖片
那綁定CPU還有其它風(fēng)險嗎?
如果綁定了CPU邏輯核后,會導(dǎo)致REDIS子進程都會綁定在這個邏輯核上,這樣RDB、AOF等操作都會與REDIS主線程競爭同一個邏輯核。
優(yōu)化方式為改綁定物理核,或者修改源碼使用后臺程序及子進程使用其它CPU。