Zero Copy

作者: 天之見證 | 来源:发表于2019-02-25 21:29 被阅读0次
  1. 哪些操作会造成用户态和内核态的切换? 都是从哪里切换到哪里 ?
  2. zero-copy 是真正的zero吗 ?

1. 正常的读写数据涉及到的 context switch

system call from to data location
read U K disk --> kernel address space buffer
read (第二阶段) K U kernel buffer --> user buffer
send U K user buffer --> kernel buffer
send (第二阶段) K U kernel buffer --> protocol engine

ps: K: kernel mode, U: user mode

从下图可以看出进行了4次copy

context switch

使用这种kernel buffer 作为中转站的好处:

当要读的数据不大于 kernel buffer的大小时, 该buffer可以作为一个读缓存,来提高读的效率

在写端的时候,可以作为一个异步写

坏处:

当要读写的数据大小超过kernel buffer的大小的时候, 数据各个冗余地方的copy会很低效

2. 优化1

从以上的read-send 过程可以看出, 中间user-buffer的使用可以避免掉

从下图可以看出进行了3次copy

opt1

3. 优化2

从以上过程可以看出 read buffersocket buffer 之前数据的copy也是可以去掉的 (当底层的网卡接口支持gather operations 时)

从下图可以看出进行了2次copy

opt2

3. 以上3中方法的比较

方面 原来 opt1 opt2
context switch 的次数 4 2 2
数据copy的次数 4 3 2

ref: Efficient data transfer through zero copy

相关文章

  • Zero Copy

    哪些操作会造成用户态和内核态的切换? 都是从哪里切换到哪里 ? zero-copy 是真正的zero吗 ? 1. ...

  • netty如何实现零拷贝

    根据 Wiki 对 Zero-copy 的定义: 即所谓的 Zero-copy, 就是在操作数据时, 不需要将数据...

  • 零拷贝

    定义 "Zero-copy" describes computer operations in which the...

  • 扩展:Zero Copy

  • zero-copy

    场景: 从本地磁盘读取数据,然后将这些数据通过socket发送到远端。 read(file, user_buf, ...

  • Zero-Copy

    转载:原文链接 考虑这样一种常用的情形:你需要将静态内容(类似图片、文件)展示给用户。那么这个情形就意味着你需要先...

  • zero-copy

    黑色硬盘 -> kernel(buffer) -> user -> kernel (socket buffer) ...

  • Zero-Copy

    服务器将硬盘上的文件,传给用户,需要几次拷贝?解决这个问题,需要明白具体的工作流程是什么? 关于哪个步骤需要拷贝:...

  • zero-copy

    zero-copy 零拷贝 在linux上kafka使用了两种手段实现零拷贝: mmap 写入数据阶段 sendf...

  • 零宽字符实现与应用

    Hello! copy: ADIpaste: 简易实现 资料 github: zero-width-lib[htt...

网友评论

      本文标题:Zero Copy

      本文链接:https://www.haomeiwen.com/subject/aiynyqtx.html