一、为什么要有DMA技术? 在没有 DMA 技术前,I/O 的过程是这样的: CPU 发出对应的指令给磁盘控制器,然后返回; 磁盘控制器收到指令后,于是就开始准备数据,会把数据放入到磁盘控制器的内部缓冲区中,然后产生一个中断; CPU收到中断信号后,停下手头的工作,接着把磁盘控制器的缓冲区的数据一次 ...
分类:
系统相关 时间:
2021-06-08 23:11:40
阅读次数:
0
kafka之所以那么快,其中一个很大的原因就是零拷贝(Zero-copy)技术,零拷贝不会kafka的专利,而是操作系统的升级,又比如Netty,也用到了零拷贝。 传统IO kafka的数据是要落入磁盘的,那么必然牵扯到磁盘的IO,传统磁盘IO又叫做缓存IO,效率是很低的,那么为什么效率低下呢?我们 ...
分类:
其他好文 时间:
2021-02-01 11:58:41
阅读次数:
0
传统I/O : 硬盘—>内核缓冲区—>用户缓冲区—>内核 Socket 缓冲区—>协议引擎 sendfile :硬盘—>内核缓冲区—>内核 Socket 缓冲区—>协议引擎 sendfile(DMA 收集拷贝):硬盘—>内核缓冲区—>协议引擎 零拷贝(Zero-Copy):一种高效的数据传输机制 m... ...
分类:
其他好文 时间:
2020-09-09 19:02:36
阅读次数:
40
IO访问方式 磁盘IO 具体步骤: 当应用程序调用read接口时,操作系统检查内核缓冲区中是否存在需要的数据,如果存在,就直接从内核缓存中直接返回,否则从磁盘中读取,然后缓存至操作系统的缓存中。 当应用程序调用write接口时,将数据直接从用户地址空间复制到内核地址空间的缓存中,这时对用户程序来说, ...
分类:
其他好文 时间:
2020-03-22 17:45:07
阅读次数:
67
前文提到网络IO可以使用多路复用技术,而文件IO无法使用多路复用,但是文件IO可以通过减少底层数据拷贝的次数来提升性能,而这个减少底层数据拷贝次数的技术,就叫做ZeroCopy。 操作系统层面的ZeroCopy 这一节,从《Zero Copy I: User-Mode Perspective》而来, ...
分类:
其他好文 时间:
2020-03-22 15:52:27
阅读次数:
84
现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。在前面2篇文章《什么是Zero-Copy?》和《NIO相关基础篇》中我们学习了NIO的相关理论知识,而在本篇中我们一起来 ...
分类:
编程语言 时间:
2019-12-30 23:04:37
阅读次数:
88
引言 以下翻译自: "Zero Copy I: User Mode Perspective" 零拷贝是什么? 为了更好地理解问题的解决方案,我们首先需要理解问题本身。让我们来看看什么是参与网络服务器的简单过程d?mon服务数据存储在一个文件通过网络客户端。下面是一些示例代码: 看起来很简单;您会认为 ...
分类:
Web程序 时间:
2019-11-29 23:40:16
阅读次数:
136
背景 几种拷贝方式 方式1:Copying in Two Sample System Calls read(file, tmp_buf, len); write(socket, tmp_buf, len); 1. 首先,调用read时,文件A copy到了kernel模式; 2. 之后,CPU控制将 ...
分类:
编程语言 时间:
2019-08-20 12:32:52
阅读次数:
94
There are use cases where data need to be read from source to a sink without modification. In code this might look quite simple: for example in Java, ...
分类:
编程语言 时间:
2019-04-19 17:56:21
阅读次数:
163
无论你程序是做什么的,它经常都需要处理大量的数据。这些数据大部分表现形式为strings(字符串)。然而,当你对字符串大批量的拷贝,切片和修改操作时是相当低效的。为什么? 让我们假设一个读取二进制数据的大文件示例,然后将部分数据拷贝到另外一个文件。要展示该程序所使用的内存,我们使用 "memory_ ...
分类:
编程语言 时间:
2019-01-24 16:30:20
阅读次数:
210