本文將介紹如何啟用SMC(Shared Memory Communication),如何設定SMC加速範圍以及如何配置SMC暴露出的各種介面以獲得最佳的加速效果。
在阿里雲ECS上使用SMC
Alibaba Cloud Linux 3提供並最佳化了SMC-R核心協議棧,您可以通過以下步驟使用SMC-R。
前期準備
建立支援ERI的ECS執行個體。
SMC-R基於RDMA實現,在阿里雲上使用SMC-R需要建立支援ERI功能的ECS執行個體,以獲得雲上彈性RDMA(eRDMA)能力。具體操作,請參見在企業級執行個體上使用eRDMA。
重要阿里雲eRDMA裝置與SMC目前均不支援使用IPv6地址。如果應用程式層使用IPv6地址,會導致SMC回退到TCP協議棧。更多資訊,請參見啟用SMC後使用IPv6地址出現回退。
自
ANCK 5.10.134-17.3版本開始,SMC支援使用IPv4-mapped IPv6地址。
載入
smc和smc_diag核心模組。sudo modprobe smc sudo modprobe smc_diag通過
dmesg命令查看核心列印資訊。如果看到如下資訊,說明載入成功。smc: smc: load SMC module with reserve_mode NET: Registered protocol family 43 smc: netns <netns ID> reserved ports [65500 ~ 65515] for eRDMA OOB smc: adding ib device erdma_0 with port count 1 smc: ib device erdma_0 port 1 has pnetid(可選)不再使用SMC後可通過下述方式卸載SMC模組。
sudo rmmod smc_diag sudo rmmod smc執行以下命令,安裝
smc-tools和aliyun-smc-extensions營運工具。sudo yum install -y smc-tools sudo yum install -y aliyun-smc-extensions
將應用程式的TCP socket運行於SMC協議棧
Alibaba Cloud Linux 3 SMC-R支援兩個維度socket協議透明轉換。
net namespace維度socket協議轉換
Alibaba Cloud Linux 3提供了net namespace維度socket協議透明轉換功能,可以通過sysctl net.smc.tcp2smc開關將net namespace中所有符合如下條件的TCP socket轉換為SMC socket。
family為AF_INETtype為SOCK_STREAMprotocol為IPPROTO_IP(0)或IPPROTO_TCP(6)
替換過程如下圖所示。
在net namespace維度開啟透明轉換的操作步驟如下。
執行以下命令,開啟
net namespace範圍全域替換開關net.smc.tcp2smc。此後新建立的TCP socket將被轉變為SMC socket,而存量的TCP socket不受影響。
sudo sysctl net.smc.tcp2smc=1預設情況下,
sysctl net.smc.tcp2smc=0,處在禁用狀態。執行以下命令,在當前
net namespace中運行任意TCP socket應用程式。樣本中的
foo需替換為具體程式名。./<foo>此時
foo應用程式建立的TCP socket將被透明替換為SMC socket,由SMC-R協議棧處理應用程式網路行為。如原理概述中所述,如果通訊對端同樣支援SMC-R協議並協商成功,則兩端將基於RDMA網路完成資料轉送,否則將安全回退使用TCP網路傳輸。(可選)執行以下命令,關閉
net namespace範圍全域替換開關。此後新建立的TCP socket不再被轉換,而存量已被轉換的SMC socket不受影響。sudo sysctl net.smc.tcp2smc=0
進程維度socket協議轉換
Alibaba Cloud Linux 3還提供了進程維度協議透明轉換功能,該功能的使用基於SMC營運工具smc-tools。
使用smc-tools工具中的指令碼smc_run運行應用程式,smc_run通過環境變數LD_PRELOAD將smc-tools工具集中的libsmc-preload.so定義為優先載入的動態庫。libsmc-preload.so將把應用程式及其子進程中符合如下條件的TCP socket轉換為SMC socket。
family為AF_INETtype為SOCK_STREAMprotocol為IPPROTO_IP(0)或IPPROTO_TCP(6)
smc_run使用LD_PRELOAD來攔截glibc中的socket()系統調用,因此對不使用glibc或是靜態連結的應用無效。
替換過程如下圖所示。
在進程維度開啟透明轉換的操作步驟如下。
執行以下命令,在應用程式foo執行命令前增加smc_run首碼。
樣本中foo需替換為具體進程名。
smc_run ./<foo>此時foo應用程式建立的TCP socket將被透明替換為SMC socket,由SMC-R協議棧處理應用程式網路行為。如原理概述中所述,如果通訊對端同樣支援SMC-R協議並協商成功,則兩端將基於RDMA網路完成資料轉送,否則將安全回退使用TCP網路傳輸。
基於BPF策略的SMC協商控制
在實際使用中,net namespace或進程維度SMC使能有時粒度仍然過粗。例如,服務端在net namespace中有多個網路監聽連接埠,希望僅針對有效能加速訴求的連接埠上的串連使用SMC,對其餘如管控連接埠上的串連安全回退到使用TCP通訊。
為此,Alibaba Cloud Linux 3在上述維度開啟SMC透明轉換的基礎上,支援進一步使用BPF技術控制串連是否使用SMC協商。典型流程為:
使能和配置BPF策略,設定細粒度的SMC協商控制。
開啟
net namespace或進程維度SMC使能。具體操作,可參見將應用程式的TCP socket運行於SMC協議棧。
如原理概述中所述,通訊雙方在TCP串連握手過程中使用特殊的TCP選項標明自身支援SMC-R,並確認對端是否同樣支援SMC-R。一旦協商成功,後續通訊雙方的網路傳輸將基於RDMA網路完成,否則將安全回退到使用TCP網路傳輸。
預設情況下,SMC socket總是會發起和響應這個特殊的TCP選項。但是可以通過BPF技術進一步基於連接埠或IPv4地址的策略來控制是否發起或響應這個特殊的TCP選項,從而實現更細粒度的SMC使能控制。
為此,Alibaba Cloud Linux 3在smc-tools中提供smc-ebpf工具來實現BPF策略的使能和配置。
執行下列命令,查看smc-ebpf是否安裝成功。
smc-ebpf policy help結果如下所示,說明smc-ebpf安裝成功。
smc-ebpf policy help
Usage: smc-ebpf policy COMMAND [OPTIONS]
smc-ebpf policy load [OPTIONS] load policy
--init load policy with pre-defination config
smc-ebpf policy stop stop policy
smc-ebpf policy unload unload policy
smc-ebpf policy init init policy with default config
smc-ebpf policy clear clear all policy config
smc-ebpf policy dump display all policy config
smc-ebpf policy config [OPTIONS] config policy
smc-ebpf policy delete [OPTIONS] delete policy
--ip [IPv4] target IPv4 address
--port target port
--mode [auto|disable|enable] target mode
Examples:
smc-ebpf policy load
#disable port 80 to use smc
smc-ebpf policy config --port 80 --mode disable
#delete ip xxx.xxx.x.x/24 policy
smc-ebpf policy delete --ip xxx.xxx.x.x --mask 24載入smc-ebpf
執行下列命令,載入smc-ebpf。
sudo smc-ebpf policy loadsmc-ebpf需要在待配置的串連建立前完成載入,即smc-ebpf對在其載入前建立的串連無效。smc-ebpf配置的策略是系統全域的,無法針對特定的netns(容器)進行獨立配置。smc-ebpf相關功能仍在持續推進上遊社區標準化中,未來存在介面的變動的可能,目前僅作為實驗性功能。
結果如下所示,表示載入成功。
# sudo smc-ebpf policy load Registered smc_sock_negotiator_ops anolis_smc id xxx否則,在當前環境中無法使用這項功能。原因排查方向包括:
確認作業系統核心版本在
ANCK 5.10.134-016及以上。您可以通過uname -r命令查看核心版本。確認您有許可權載入BPF程式,一個常見的原因可能是您使用的POD容器沒有載入BPF程式的能力或者您的使用者特權等級不足,您可以向您環境的供應商諮詢更多資訊。
連接埠策略預設行為
smc-ebpf載入後,若沒有任何連接埠策略匹配目標連接埠時,預設禁止目標連接埠使用SMC協商。
例如:
smc-ebpf載入後未配置任何連接埠策略,那麼所有連接埠都被禁止使用SMC協商;smc-ebpf載入後僅配置一條允許80連接埠使用SMC協商的策略。那麼使用8080連接埠時,由於沒有任何策略匹配到8080連接埠,則禁止8080連接埠使用SMC協商;
特別地,您可以通過執行以下命令,將連接埠0配置為enable來修改預設行為到:在沒有任何連接埠策略匹配目標連接埠時,允許目標連接埠使用SMC協商。
sudo smc-ebpf policy config --port 0 --mode enable同樣地,您可以通過執行以下命令,將連接埠0配置為disable來再次改變預設行為到:在沒有任何連接埠策略匹配目標連接埠時,禁止目標連接埠使用SMC協商。
sudo smc-ebpf policy config --port 0 --mode disable配置基於連接埠的策略
在預設行為的基礎上,可添加針對特定連接埠的策略。
例如:
樣本一:只允許80連接埠使用SMC協商,其他連接埠均禁止使用SMC協商。
執行以下命令,添加允許80連接埠使用SMC協商的策略。
sudo smc-ebpf policy config --port 80 --mode enable執行以下命令,查看連接埠策略配置結果。
sudo smc-ebpf policy dump輸出結果樣本:
"key": 80代表策略針對連接埠80。"mode":代表禁止或允許使用SMC協商,2代表允許,0代表禁止。
# sudo smc-ebpf policy dump [{ "key": 80, "value": { "mode": 2, [其餘欄位普通使用者無需關注] } } ]若不再需要此策略,執行以下命令,刪除上述針對80連接埠的策略。
sudo smc-ebpf policy delete --port 80再次執行
dump命令,結果如下所示,說明配置被成功刪除。# sudo smc-ebpf policy dump []樣本二:只禁止80連接埠使用SMC協商,其他連接埠均允許使用SMC協商。
執行以下命令,修改預設行為到:在沒有任何連接埠策略匹配目標連接埠時,允許目標連接埠使用SMC協商。並添加禁止80連接埠使用SMC協商的策略。
sudo smc-ebpf policy config --port 0 --mode enable sudo smc-ebpf policy config --port 80 --mode disable此後只有80連接埠被禁止使用SMC協商,其他沒有匹配策略的連接埠則被允許使用SMC協商。
IPv4地址策略預設行為
與連接埠策略不同的是,IPv4地址策略僅對Client socket有效,用於在Client socket串連Server時根據Server IPv4地址控制Client是否使用SMC協商。
所有配置的連接埠和IPv4地址策略共同組成“與”邏輯,即串連匹配的所有策略均允許使用SMC協商時才會使用SMC協商,任意匹配條件禁止使用SMC協商時均不會使用SMC協商。
smc-ebpf載入後,若沒有任何IPv4地址策略匹配目標Server IP時,預設允許對目標Server IP使用SMC協商。
例如:
smc-ebpf載入後未配置任何IPv4地址策略,那麼Client socket串連所有Server IP時都被允許使用SMC協商;smc-ebpf載入後僅配置一條禁止在訪問192.168.1.0/24時使用SMC協商的策略。那麼在訪問192.168.3.11時,由於沒有任何策略匹配到192.168.3.11,則允許在訪問192.168.3.11時使用SMC協商;
特別地,您可以通過執行以下命令,將0.0.0.0/32配置為disable來修改預設行為到:在沒有任何IPv4地址策略匹配目標Server IP時,禁止對目標Server IP使用SMC協商。
sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode disable同樣地,您可以通過執行以下命令,將0.0.0.0/32配置為enable來恢複預設行為到:在沒有任何IPv4地址策略匹配目標Server IP時,允許對目標Server IP使用SMC協商。
sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode enable配置基於IPv4地址的策略
在預設行為的基礎上,可配置針對IPv4地址的策略,用於在Client socket串連特定Server IP時控制Client是否使用SMC協商。
設定的IPv4地址過濾規則只針對Client socket串連Server IPv4地址時控制Client是否使用SMC協商。Server socket是否使用SMC協商不受IPv4地址過濾規則的影響。
例如:
樣本一:只允許Client在串連192.168.2.0/24時使用SMC協商,訪問其他服務端時均禁止使用SMC協商。
執行以下指令,將
0.0.0.0/32配置為disable來修改預設行為到:在沒有任何IPv4地址策略匹配目標Server IP時,禁止對目標Server IP使用SMC協商。並添加允許對192.168.2.0/24服務端地址使用SMC協商的策略。sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode disable sudo smc-ebpf policy config --ip 192.168.2.0 --mask 24 --mode enable執行以下指令,查看IPv4原則設定結果。
sudo smc-ebpf policy dump輸出結果樣本:
key:代表策略針對的IPv4地址;value:代表禁止或允許使用SMC協商,pass代表允許,denied代表禁止。
# sudo smc-ebpf policy dump key: 0.0.0.0/32 value: "denied" key: 192.168.2.0/24 value: "pass"若不再需要上述IPv4地址策略,執行以下命令,刪除針對
0.0.0.0/32和192.168.2.0/24的策略。sudo smc-ebpf policy delete --ip 192.168.2.0 --mask 24 sudo smc-ebpf policy delete --ip 0.0.0.0 --mask 32樣本二:只禁止Client在串連
192.168.2.0/24時使用SMC協商,訪問其他服務端時均允許使用SMC協商。執行以下指令,添加禁止對
192.168.2.0/24服務端地址使用SMC協商的策略。sudo smc-ebpf policy config --ip 192.168.2.0 --mask 24 --mode disable無需其他動作,因為
smc-ebpf載入後,若沒有任何IPv4地址策略匹配目標Server IP時,預設允許對目標Server IP使用SMC協商。所以除192.168.2.0/24以外的服務端地址均允許使用SMC協商。
清除策略
執行以下命令,清除所有配置的策略。
sudo smc-ebpf policy clear執行後所有配置將會被刪除,此時預設行為將恢複到:禁止協商SMC,即針對所有連接埠均禁止使用SMC協商,針對所有IPv4地址均允許使用SMC協商,兩類策略共同組成“與”邏輯,最終禁止所有串連使用SMC協商。
在阿里雲ACK上使用SMC
在阿里雲Container ServiceACK中,可以通過ACK eRDMA Controller組件啟用SMC。eRDMA Controller提供了eRDMA網卡的管理、調度以及Pod的網路能力。具體操作,請參見使用SMC-R透明加速應用網路。
與在阿里雲ECS上使用SMC類似,在阿里雲ACK上使用SMC同樣可以在Node上配置基於BPF的SMC細粒度使能策略。
參數配置說明
SMC協議棧通過sysfs及使用者態工具smc-tools等方式提供多種配置介面,以下將介紹SMC的可配置功能。
通過sysfs配置參數
核心參數 | 參數說明 | 核心版本限制 | 配置建議 |
net.smc.autocorking_size | SMC-R提供autocork特性,功能上與TCP autocork類似,將多個小資料包彙總成更大的資料包一次性發送,在不影響乒乓時延效能的前提下,提高小包情境下的吞吐效能。 autocorking_size用於配置彙總資料包的上限大小。 預設值:65535。 有效值:0~4294967295,0表示關閉。 | 核心 | 在小包且注重頻寬的情境中,可調整此參數至合適的數值,以實現最佳的頻寬效果。 在 |
net.smc.autosplit_size | SMC提供autosplit特性,將一個巨量資料包拆分成多個小資料包分批發送,以提高大包情境下的時延效能。當資料包大小超過autosplit_size的1.3倍時,將被拆分。 預設值:131072。 有效值:32768~536870912。 | 核心:
| 在大包且注重時延的情境中,可以適當調整此參數,以達到最佳的時延效果。 |
net.smc.experiment_vendor_options | 阿里雲實驗特性選項。 預設值:4294967295(0xFFFFFFFF)。 | 核心 | 不建議修改。 |
net.smc.global_mem | SMC整機記憶體水位控制,當SMC協議棧所維持的收發緩衝區大小大於等於 預設值:[25%整機記憶體,50%整機記憶體,75%整機記憶體]。 | 核心:
| 可根據期望的記憶體水位配置 |
net.smc.limit_smc_hs | 控制是否在建連壓力大時主動回退到TCP。 預設值:1。 有效值:
| 核心:
| 建議設定為1,開啟。 在特定情況下,如不希望SMC協議棧根據串連壓力自動回退,可將其設定為0。 |
net.smc.mem | SMC在當前 預設值:[25%整機記憶體,50%整機記憶體,75%整機記憶體]。 | 核心:
| 可根據期望的記憶體水位配置 |
net.smc.rmem | SMC socket預設接收緩衝區大小。沒有使用 預設值:262144。 有效值:
| 核心 |
具體內容,請參見協議棧監控 |
net.smc.wmem | SMC socket預設發送緩衝區大小。沒有使用 預設值:262144。 有效值:
| 核心 |
具體內容,請參見協議棧監控 |
net.smc.smcr_buf_type | SMC-R的收發緩衝區記憶體類型。使用物理連續記憶體能夠擁有更優效能,但是通常物理連續記憶體難以獲得,可能會導致緩衝區降級到比預期小。相反,虛擬連續記憶體較易擷取,但效能會稍遜。 修改此值後,將在新建立的LGR所承載的SMC串連上生效,已有的LGR不受影響。 預設值:2。 有效值:
| 核心 | 不建議修改。 |
net.smc.smcr_max_conns_per_lgr | SMC-R中一個LGR能夠承載的SMC串連數量上限。 預設值:32。 有效值:
| 核心 | 謹慎修改。
|
net.smc.smcr_max_links_per_lgr | SMC-R中一個LGR包含的RDMA RC串連(SMC Link)數量。 預設值:1。 有效值:1~2。 | 核心 | 不建議修改。 |
net.smc.smcr_testlink_time | SMC-R中RDMA RC串連(SMC Link)的心跳包間隔時間(單位:秒)。當SMC Link上沒有資料轉送時,每隔 預設值:30。 有效值:0~2147483647,0代表關閉心跳檢查。 | 核心 | 不建議修改。 |
net.smc.tcp2smc | 當前 預設值:0。 有效值:
| 核心 |
|
配置EID參數
EID(Enterprise ID)是SMCv2協議中引入的概念,只有配置了相同EID的兩個系統才能通過SMCv2通訊,否則將回退到使用TCP通訊。一個系統最多可以配置8個EID。
在Alibaba Cloud Linux 3上eRDMA裝置只允許配合SMCv2協議使用。Alibaba Cloud Linux 3系統初始配置了SMCV2-DEFAULT-UEID這一EID,因此初始狀態下所有Alibaba Cloud Linux 3節點間均可以使用SMCv2配合eRDMA通訊,無需額外手動設定。
若在特殊情況下需要通過修改EID控制通訊範圍,配置方式如下。
查看已有EID。
smcr ueid show添加新的EID。
EID最多可包含32個字元,允許使用大寫字母(A-Z)、數字(0-9)、連字號(-)以及點(.)。第一個字元必須為字母或數字,且點(.)不可連續使用。sudo smcr ueid add <EID>刪除已有EID。
sudo smcr ueid del <EID>
案例:使用EID避免跨可用性區域的SMC-R通訊
為了更好地發揮SMC-R的加速效果,推薦在同可用性區域內使用SMC-R加速,跨可用性區域仍使用TCP通訊。通過將可用性區域ID添加為EID,實現在同可用性區域內使用SMC-R加速,跨可用性區域時自動回退到TCP通訊。具體配置步驟如下。
方式一:分步配置EID
執行以下命令,通過阿里雲ECS執行個體中繼資料擷取可用性區域ID。詳細內容,請參考執行個體中繼資料。
ZONE_ID=$(curl -s -m 1 100.100.100.200/latest/meta-data/zone-id | tr "[:lower:]" "[:upper:]")執行以下命令,將可用性區域ID添加為EID。
sudo smcr ueid add $ZONE_ID執行以下命令,刪除預設的
SMCV2-DEFAULT-UEID。smcr ueid | grep SMCV2-DEFAULT-UEID > /dev/null && sudo smcr ueid del SMCV2-DEFAULT-UEID
方式二:使用
aliyun-smc-extensions工具的aliyunsmc-ueid服務一鍵配置EID執行以下命令,啟動
aliyunsmc-ueid服務,此服務會自動將可用性區域ID添加為EID,同時刪除預設EID。sudo systemctl start aliyunsmc-ueid(可選)執行以下命令,配置開機自啟動
aliyunsmc-ueid服務。這是由於EID配置不具備持久化的功能,在OS重啟時會恢複到預設狀態。sudo systemctl enable aliyunsmc-ueid
配置PNET ID參數
在TCP通訊中,網路流量通過乙太網路介面(ENI)進出。當透明轉換TCP通訊到SMC-R通訊時,SMC-R協議棧將使用與此乙太網路介面相關聯的RDMA網路介面(ERI)。
這種關聯關係有以下兩種形式。
目標ENI上直接開啟eRDMA能力得到的ERI,SMC-R協議棧將自動關聯此ENI與ERI。
查看ENI是否開啟eRDMA能力,請參見查看彈性RDMA網卡。
建立ENI時開啟eRDMA能力,請參見建立彈性RDMA網卡。
為現有ENI增加eRDMA能力,請參見修改已建立彈性網卡的RDMA介面。
這種情況下SMC-R協議棧能夠自動識別並使用ENI關聯的ERI,無需額外操作。
其他ENI上開啟eRDMA能力得到的ERI,需要使用PNET ID將ERI與目標ENI關聯。
以如下情況為例:
節點中存在乙太網路介面
eth0和eth1,其中僅eth0開啟RDMA介面erdma_0。此時若TCP流量從
eth0收發,切換為SMC-R後能夠自動尋找到關聯的erdma_0,使用RDMA網路通訊。即上述第一種自動關聯的情況。若TCP流量從
eth1收發,切換為SMC-R後則無法自動尋找到erdma_0介面,進而回退到TCP。此時可以使用同一PNET ID關聯eth1與erdma_0,以告知SMC-R可以使用erdma_0介面承載eth1的流量。使用PNET ID關聯ENI和ERI步驟如下:
執行以下命令,將目標ENI和ERI配置上相同的PNET ID:
為乙太網路介面ENI配置PNET ID。
sudo smc_pnet -a <PNET ID> -I <eth_interface>為eRDMA介面ERI配置PNET ID。
sudo smc_pnet -a <PNET ID> -D <rdma_interface>
PNET ID的合法格式為最多 16 個大寫字母數字字元(不含空格)。
執行以下命令,檢查配置的PNET ID參數。
# sudo smc_pnet輸出結果樣本:
# sudo smc_pnet 00163E0CD751 n/a erdma_0 1 00163E0CD751 eth1 n/a 255樣本中
erdma_0綁定了PNET ID:00163E0CD751,eth1也綁定了PNET ID:00163E0CD751。這樣一來,原本通過eth1介面收發資料的TCP通訊在啟用SMC-R後就可以通過erdma_0介面收發資料。
案例:使用PNET ID關聯POD乙太網路介面和宿主機eRDMA介面
在共用宿主機ERI的自建容器情境中,多個POD共用宿主機上的一個或多個eRDMA網卡。通過為POD乙太網路介面veth和宿主機eRDMA介面設定相同的PNET ID,可使容器內開啟SMC-R後,核心協議棧能夠正確地尋找到宿主機上的eRDMA網路介面,進而使用RDMA網路加速容器veth介面上的網路流量。
具體配置步驟如下。
在容器
net namespace下為容器乙太網路介面(以eth0為例)配置PNET ID。sudo ip netns exec <pod netns> smc_pnet -a <PNET ID> -I eth0在宿主機
net namespace下為eRDMA介面(以erdma_0為例)配置PNET ID。sudo smc_pnet -a <PNET ID> -D erdma_0
實踐案例:在ECS Redis情境使用SMC
建立兩台ECS執行個體,一台執行個體作為Redis用戶端,另一台執行個體作為Redis服務端。具體參數說明,請參見自訂購買執行個體。
載入
smc和smc_diag核心模組。sudo modprobe smc sudo modprobe smc_diag執行以下命令,分別為兩台執行個體安裝Redis。
sudo yum install redis -y分別在兩台執行個體上執行以下命令,使用EID避免跨可用性區域SMC-R通訊。
sudo systemctl start aliyunsmc-ueid分別在兩台執行個體上執行以下命令,配置基於連接埠的BPF策略。只允許Server IP地址在
vswitch網段內且服務連接埠為6379的串連使用SMC協商。執行以下命令,載入
smc-ebpf。sudo smc-ebpf policy load配置針對連接埠的策略,只允許對
6379連接埠使用SMC協商。sudo smc-ebpf policy config --port 6379 --mode enable配置針對IPv4地址的策略,只允許對在
vswitch網段內的Server IP使用SMC協商。sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode disable cidr=$(curl -s -m 1 100.100.100.200/latest/meta-data/vswitch-cidr-block) sudo smc-ebpf policy config --ip \ $(echo ${cidr} | awk -F'/' '{print $1}') --mask \ $(echo ${cidr} | awk -F'/' '{print $2}') --enable;
分別在兩台執行個體上執行以下命令,配置
net namespace維度協議透明轉換。sudo sysctl -w net.smc.tcp2smc=1在Redis服務端執行個體上執行以下命令,啟動Redis服務。
IP需替換為服務端執行個體主網卡的私人IP地址。redis-server --bind <IP> --port 6379 --protected-mode no --save在Redis用戶端執行個體上串連或測試Redis服務端。
執行以下命令,串連Redis服務端。
redis-cli -h <IP> -p 6379執行以下命令,使用
redis-benchmark進行壓測。redis-benchmark -h <IP> -p 6379 -n 1000000 -t set -c 100