本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文将介绍如何启用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_INET
- type为SOCK_STREAM
- protocol为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_INET
- type为SOCK_STREAM
- protocol为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 load- smc-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
在阿里云容器服务ACK中,可以通过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