股票
板块
用户
资讯
首页
天眼
自选
发现
开户
首页
天眼
自选
发现
我的

匠心时刻 | KNET-基于SP600&SP200网卡的通信框架和加速套件


作者:孙桦毅,华为计算专家



K-NET(K-Network)主要使能SP600&SP200系列标准网卡,打造K-NET网络加速套件,提供统一的软件编程接口,发挥软硬协同优势,释放网卡硬件性能。


K-NET网络加速套件为客户提供通信协议加速、网络安全加速能力,旨在构建网络加速生态系统,联合用户打造统一软件框架的生态系统,共创K-NET网络加速繁荣生态。


特性介绍


通信协议加速



TCP/IP协议加速


用户态TCP/IP协议栈,其主要将网络协议处理流程从内核态迁移到用户态,使用高性能用户态加速库DPDK进行业务加速,同时协议栈利用网卡硬件能力通过软硬件结合的方式将部分高负载的特性卸载到网卡硬件,从而释放CPU算力,从而提升整个端到端业务性能;面向各种业务场景提供业务无感知的能力,业务实现零侵入修改接入到K-NET加速库。




DTOE卸载加速


TCP协议卸载加速引擎(DTOE, Direct TCP Offloading Engine),将TCP数据传输过程卸载到网卡硬件中进行,降低系统CPU的消耗,提高服务器处理性能;连接建立和删除以及连接维护等功能继续由软件内核处理。开发者基于DTOE API接口对既有业务TCP网络通信代码编程改造,实现DTOE卸载加速能力。



网络安全加速


鲲鹏K-NET网络安全加速提供IPSec硬件卸载能力,控制面提供基于开源生态组件认证协商机制,数据面接入内核协议栈,实现生态完全兼容。释放网卡硬件IPSec卸载能力,让用户减少传统CPU软算带来的CPU消耗,降低CPU采购成本。



插件化框架


K-NET网络加速套件为客户提供标准Socket接口和基础协议开放库与IO加速层,方便客户自研协议栈快速接入,提供网络优选、拓扑管理等协议管理策略,方便客户快速使能网卡硬件能力,实现应用无感加速。



优势分析


传统内核协议栈侧重通用性,性能不高。传统单机Redis,MySQL、PG、openGauss、Ceph等应用的网络协议状态上下文会在因多核间频繁切换、多次上下文切换导致cache命中率低,且内存多次拷贝,网络栈Syscall开销占比达到30%~70%。K-NET通过结合高性能用户态TCP协议栈,结合华为网卡卸载特性DTOE,软硬结合释放CPU算力。


同时提供插件式框架,通过规范网卡的协议数据面接口,兼容多协议栈,做到“千人千栈”,实现应用无感迁移。


上手教程


安装步骤适用于所有需要部署运行K-NET的物理机或虚拟机。


检查Glibc版本


ldd --version


Glibc 2.10及以上版本会开启堆栈保护,若查询出来的版本低于2.10,建议升级至2.10以上。这里以2.28版本为例。


yum update glibc-2.28


检查ASLR是否开启


ASLR是一种针对缓冲区溢出的安全保护技术,通过地址布局的随机化,增加攻击者预测目的地址的难度。


cat /proc/sys/kernel/randomize_va_space


若结果不为2,请执行以下命令开启ASLR。


bash -c 'echo 2 >/proc/sys/kernel/randomize_va_space'


安装依赖包



安装系统依赖


yum install -y libcap-devel tar gzip vim



安装部署工具依赖


yum install -y jq



安装libboundscheck依赖


openEuler操作系统下:


yum install -y libboundscheck


CTyunOS操作系统下请参考:

https://atomgit.com/openeuler/libboundscheck/blob/v1.1.16/README.md


安装DPDK


如果已经安装21.11.7版本的DPDK,且不需要抓包功能,可跳过以下DPDK的安装流程。 可先通过pkg-config查询DPDK版本:


pkg-config --modversion libdpdk 2>/dev/null || echo "未找到DPDK或pkg-config未配置"


如果回显未显示DPDK版本,建议检查是否安装了DPDK或重新安装DPDK。


DPDK安装


在安装DPDK时应避免直接使用Yum源,因为Yum源安装的版本存在不可控风险。


安装前先安装DPDK需要的依赖。


yum install -y gcc # 安装编译工具yum install -y meson ninja-build numactl-devel python3-pyelftools libnl3 libnl3-devel # DPDK依赖


按照版本配套关系获取DPDK软件包。


上传压缩包至服务器并传输到虚拟机,解压后进入解压文件夹目录。


scp root@remote_host:/path/to/remote/dpdk-21.11.7.tar.xz /path/to/local/directorycd /path/to/local/directorytar -xf dpdk-21.11.7.tar.xzcd dpdk-stable-21.11.7


说明:



remote_host:物理机192.168.122.*对应的IP地址。


/path/to/remote/:软件包的路径,需要根据实际情况替换。


/path/to/local/directory:虚拟机中的保存路径。


执行如下命令安装驱动程序。


meson -Ddisable_drivers=net/cnxk -Dibverbs_link=dlopen -Dplatform=generic -Denable_kmods=false -Dprefix=/usr build


回显示例:



ninja -C build


回显示例:



ninja install -C build


回显示例:



(可选)安装抓包工具


说明: 启用K-NET抓包功能才需要参考以下步骤安装,无需抓包可直接跳过以下步骤。 以下提到的“dpdk-stable-21.11.7”为DPDK解压所得目录,其他版本DPDK需自行适配。


安装抓包工具依赖。


yum install -y libpcap-devel libpcap make


确保“dpdk-stable-21.11.7/app/dumpcap”目录下只有DPDK示例程序main.c和meson.build。若该目录下有其他文件,建议用户迁移至其他路径。


请参见Gitee获取dpdk-21.11.7-dumpcap.patch并上传至“dpdk-stable-21.11.7/app”目录。


进入“dpdk-stable-21.11.7/app”目录,应用patch。


patch -p1 -d dumpcap/ < dpdk-21.11.7-dumpcap.patch


进入dumpcap目录,执行make得到适配K-NET的dumpcap。


cd dumpcapmake


说明:如果编译失败,是由于缺少头文件或动态库,请检查Makefile中DPDK头文件路径INCLUDEDIR、DPDK动态库路径LDDIR、libpcap动态库路径LIBPCAPDIR下是否存在相应库或头文件,若不存在,安装后修改路径确保该路径下有对应文件。


授予驱动和编译抓包程序执行权限。


说明:若为root用户可跳过此步骤。


chmod a+s /usr/lib64/librte_net_hinic3.sosetcap cap_sys_rawio,cap_dac_read_search,cap_sys_admin+ep dumpcap


(可选)若需要编译DPDK应用于其他业务时,请消除dpdk-21.11.7-dumpcap.patch的影响,操作顺序如下:


请先确保在“dpdk-stable-21.11.7”目录下。


cd ./app/dumpcap


删除文件使得最后保留main.c Makefile meson.build三个文件。


make cleanrm *.pcap


回退到“dpdk-stable-21.11.7/app”目录。


cd ../


撤销patch变更。


patch -p1 -Rd dumpcap/ < dpdk-21.11.7-dumpcap.patch


撤销后“dpdk-stable-21.11.7/app/dumpcap”恢复到源码刚解压后的状态,即只包含main.c和meson.build。


ls dumpcap


回显示例:


main.c meson.build


命令行安装和Computing ToolKit批量安装请根据安装规模选择其一。


命令行安装


下载K-NET源码并编译。


# 用户指定K-NET源码的存放目录,此处以/home/knet-repo目录为例。mkdir -p /home/knet-repocd /home/knet-repogit clone https://atomgit.com/openeuler/knet.gitcd knetpython3 build.py rpm


安装K-NET。


若首次安装,执行以下命令:


鲲鹏架构:


rpm -ivh build/rpmbuild/RPMS/knet-1.0.0.aarch64.rpm


x86架构:


rpm -ivh build/rpmbuild/RPMS/knet-1.0.0.x86_64.rpm


若安装过K-NET,执行以下命令直接升级:


鲲鹏架构:


rpm -Uvh build/rpmbuild/RPMS/knet-1.0.0.aarch64.rpm --force --nodeps


x86架构:


rpm -Uvh build/rpmbuild/RPMS/knet-1.0.0.x86_64.rpm --force --nodeps


结语


K-NET产品基于华为SP600&SP200系列硬件产品,开放NIC上的基础协议和网络算力,提供完整的加速方案和插件式协议框架,支持开发者更好地基于华为网卡进行扩展,以实现业务场景在网络层面上的个性化优化加速。



◆往期推荐◆


             
           
             
           

匠心时刻 | openFuyao让容器业务丝滑释放节点能力


                                                                    

原文链接
多空观点 观点仅供交流,不构成投资建议
点赞
踩一踩
收藏
分享

评论 (0)

0/200
声明:社区内容仅代表用户个人观点,不构成任何投资建议。投资有风险,入市需谨慎。