Fbuf 的思想是每个进程都维护着一个缓冲区池 , 这个缓冲区池能被同时映射到程序地址空间和内核地址空间 , 内核和用户共享这个缓冲区池 , 这样就避免了拷贝 。
文章插图
缺陷:
1)管理共享缓冲区池需要应用程序、网络软件、以及设备驱动程序之间的紧密合作
2)改写 API , 尚处于试验阶段 。
高性能网络 I/O 框架——netmapNetmap 基于共享内存的思想 , 是一个高性能收发原始数据包的框架 , 由Luigi Rizzo 等人开发完成 , 其包含了内核模块以及用户态库函数 。其目标是 , 不修改现有操作系统软件以及不需要特殊硬件支持 , 实现用户态和网卡之间数据包的高性能传递 。
文章插图
在 Netmap 框架下 , 内核拥有数据包池 , 发送环接收环上的数据包不需要动态申请 , 有数据到达网卡时 , 当有数据到达后 , 直接从数据包池中取出一个数据包 , 然后将数据放入此数据包中 , 再将数据包的描述符放入接收环中 。内核中的数据包池 , 通过 mmap 技术映射到用户空间 。用户态程序最终通过 netmap_if 获取接收发送环 netmap_ring , 进行数据包的获取发送 。
总结1、零拷贝本质上体现了一种优化的思想
2、直接 I/O , mmap , sendfile , DMA sendfile , splice , 缓冲区共享 , 写时复制……
作者:卡巴拉的树来源:https://www.cnblogs.com/bakari/p/11275735.html
【Linux零拷贝技术,看完这篇文章就懂了】
推荐阅读
- Linux系统 tcpdump 抓包命令使用教程
- 十几年linux运维工程师的工作经验分享
- Linux+apache 跨域配置
- 零基础自学办公软件 如何学习办公软件
- Linux 如何查看系统负载
- 平时远程连接维护Linux时,会自动断开连接,解决的办法在这里
- 网站服务器选择linux系统或windows系统的区别
- Linux配置mysql,tomcat,Nginx 开机自启动的几个方式
- BATJ 常考的 21 条 Linux 命令
- 拥抱中国新零售