亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis如何綁定CPU

發布時間:2022-03-08 09:44:39 來源:億速云 閱讀:664 作者:小新 欄目:開發技術

這篇文章主要介紹了Redis如何綁定CPU,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

綁定 CPU

Redis 6.0 開始支持綁定 CPU,可以有效減少線程上下文切換。

CPU 親和性(CPU Affinity)是一種調度屬性,它將一個進程或線程,「綁定」到一個或一組 CPU 上。也稱為 CPU 綁定。

設置 CPU 親和性可以一定程度避免 CPU 上下文切換,提高 CPU L1、L2 Cache 命中率。

早期「SMP」架構下,每個 CPU 通過 BUS 總線共享資源。CPU 綁定意義不大。

Redis如何綁定CPU
而在當前主流的「NUMA」架構下,每個 CPU 有自己的本地內存。訪問本地內存有更快的速度。而訪問其他 CPU 內存會導致較大的延遲。這時,CPU 綁定對系統運行速度的提升有較大的意義。

Redis如何綁定CPU
現實中的 NUMA 架構比上圖更復雜,通常會將 CPU 分組,若干個 CPU 分配一組內存,稱為 「node」

你可以通過 「numactl -H 」 命令來查看 NUMA 硬件信息。

$ numactl -H
available: 2 nodes (0-1)node 0 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38
node 0 size: 32143 MB
node 0 free: 26681 MB
node 1 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
node 1 size: 32309 MB
node 1 free: 24958 MB
node distances:
node 0 1
  0: 10 21
  1: 21 10

上圖中可以得知該機器有 40 個 CPU,分組為 2 個 node。

node distances 是一個二維矩陣,表示 node 之間 「訪問距離」,10 為基準值。上述命令中可以得知,node 自身訪問,距離是 10。跨 node 訪問,如 node 0 訪問 node 1 距離為 21。說明該機器「跨 node 訪問速度」比「node 自身訪問速度」慢 2.1 倍。

其實,早在 2015 年,有人提出 Redis 需要支持設置 CPU 親和性,而當時的 Redis 還沒有支持 IO 多線程,該提議擱置。

而 Redis 6.0 引入 IO 多線程。同時,也支持了設置 CPU 親和性

我畫了一張 Redis 6.0 線程家族供你參考。

Redis如何綁定CPU

上圖可分為 3 個模塊

  • 主線程和 IO 線程:負責命令讀取、解析、結果返回。命令執行由主線程完成。

  • bio 線程:負責執行耗時的異步任務,如 close fd。

  • 后臺進程:fork 子進程來執行耗時的命令。

Redis 支持分別配置上述模塊的 CPU 親和度。你可以在 redis.conf 找到以下配置(該配置需手動開啟)。

# IO 線程(包含主線程)綁定到 CPU 0、2、4、6
server_cpulist 0-7:2
# bio 線程綁定到 CPU 1、3
bio_cpulist 1,3
# aof rewrite 后臺進程綁定到 CPU 8、9、10、11
aof_rewrite_cpulist 8-11
# bgsave 后臺進程綁定到 CPU 1、10、11
bgsave_cpulist 1,10-11

我在上述機器,針對 IO 線程和主線程,進行如下測試:

首先,開啟 IO 線程配置

io-threads 4 # 主線程 + 3 個 IO 線程io-threads-do-reads yes # IO 線程開啟讀和解析命令功能

測試如下三種場景:

  1. 不開啟 CPU 綁定配置。

  2. 綁定到不同 node。
    「server_cpulist 0,1,2,3」

  3. 綁定到相同 node。
    「server_cpulist 0,2,4,6」

通過 redis-benchmark 對 get 命令進行基準測試,每種場景執行 3 次。

$ redis-benchmark -n 5000000 -c 50 -t get --threads 4

結果如下:

1.不開啟 CPU 綁定配置

throughput summary: 248818.11 requests per second
throughput summary: 248694.36 requests per second
throughput summary: 249004.00 requests per second

2.綁定不同 node

throughput summary: 248880.03 requests per second
throughput summary: 248447.20 requests per second
throughput summary: 248818.11 requests per second

3.綁定相同 node

throughput summary: 284414.09 requests per second
throughput summary: 284333.25 requests per second
throughput summary: 265252.00 requests per second

根據測試結果,綁定到同一個 node,qps 大約提升 15%

使用綁定 CPU,你需要注意以下幾點:

  1. Linux 下,你可以使用 「numactl --hardware」 查看硬件布局,確保支持并開啟 NUMA。

  2. 線程要盡可能分布在 「不同的 CPU,相同的 node」,設置 CPU 親和度才有效。否則會造成頻繁上下文切換和遠距離內存訪問。

  3. 你要熟悉 CPU 架構,做好充分的測試。否則可能適得其反,導致 Redis 性能下降。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Redis如何綁定CPU”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜都市| 务川| 桦南县| 天津市| 延川县| 南丹县| 信宜市| 那坡县| 河东区| 白朗县| 江陵县| 买车| 大足县| 通许县| 筠连县| 涿鹿县| 长治县| 伊川县| 铜川市| 东乌| 涞水县| 沽源县| 惠水县| 宁津县| 中方县| 容城县| 岑溪市| 开原市| 龙里县| 奉贤区| 泸水县| 金坛市| 遵义市| 固安县| 厦门市| 永仁县| 大石桥市| 柳州市| 会理县| 松原市| 鹤山市|