RDMA 原理浅析:一台机器怎么直接读写另一台机器的内存
【摘要】 Remote Direct Memory Access (R-DMA)咋一看,感觉好神奇呀,其实把它讲清楚,你会看到这里面没有魔法,只有几个"老朋友"被重新组合了。 1. 传统网络里CPU做什么?"传统网络"里 CPU 做的是很啰嗦的事:系统调用、内核态/用户态切换、校验和、分段、重组、把数据从用户缓冲拷到内核缓冲再拷到网卡……同时,“设备自己读写内存”(DMA)是个 1960 年代就有的老...
Remote Direct Memory Access (R-DMA)咋一看,感觉好神奇呀,其实把它讲清楚,你会看到这里面没有魔法,只有几个"老朋友"被重新组合了。
1. 传统网络里CPU做什么?
"传统网络"里 CPU 做的是很啰嗦的事:系统调用、内核态/用户态切换、校验和、分段、重组、把数据从用户缓冲拷到内核缓冲再拷到网卡……同时,“设备自己读写内存”(DMA)是个 1960 年代就有的老技术:
你点打印,CPU 只是告诉打印机控制器"数据在内存地址 X,去取",然后 CPU 就去干别的了,打印机自己用 DMA 把数据搬过去。读磁盘也一样。
所以"设备直接读写内存"一点都不新鲜。 RDMA 新鲜的是后面两件事。
2. 新鲜点之一:把"网络协议栈"装进了网卡
传统 TCP/IP 协议栈是内核软件。RDMA 网卡(叫 RNIC 或 HCA)里有一个专门的处理单元,把分包、排序、重传、流控都做在网卡硬件/固件里。其实,这个也是现代网卡的发展趋势吧,之前由CPU处理的某些功能可以卸载到网卡上来处理。整个数据路径上,操作系统内核一次都不出现。这就是"Kernel Bypass"的字面意思。
3. 新鲜点之二:把"谁能碰你内存"的检查,从操作系统挪进了网卡硬件
传统的安全是操作系统管:别人要读你的内存,得经过内核权限检查。RDMA 换了一种方式,你可以想象成锁和钥匙:
- 你必须先把一块内存"注册"(登记)给网卡,网卡把这部分内存钉住(不许操作系统换页),算好物理地址;
- 注册时你会得到一把"钥匙"——
R_key; - 你把这块内存的地址和
R_key通过带外通道(普通 TCP 或 MPI)告诉对端; - 对端想写你,必须拿出地址 + 钥匙,你的网卡硬件校验钥匙,对不上就拒绝。
所以不是"谁都能写你的内存"——只有你发过钥匙的人能写,而且只能写你登记过的那一块区域,其他内存碰都碰不到。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)