• 焰火
    2019-10-02
    DMAC:我们不加工数据,只是数据的搬运工
    
     4
  • soimage
    2019-09-16
    看到最后,也没看出kafka快跟dma有关系,倒是跟zero-copy关系大一些,通过砍掉两次内核空间和用户空间的数据拷贝,以及内核态和用户态的切换成本来优化

    作者回复: soimage,

    这样说也对,不过砍完之后数据传输其实都是DMA的过程了。

     1
     3
  • 免费的人
    2019-08-20
    从kafka论文里摘的:
    In addition we optimize the network access for consumers. Kafka
    is a multi-subscriber system and a single message may be
    consumed multiple times by different consumer applications. A
    typical approach to sending bytes from a local file to a remote
    socket involves the following steps: (1) read data from the storage
    media to the page cache in an OS, (2) copy data in the page cache
    to an application buffer, (3) copy application buffer to another
    kernel buffer, (4) send the kernel buffer to the socket. This
    includes 4 data copying and 2 system calls. On Linux and other
    Unix operating systems, there exists a sendfile API [5] that can
    directly transfer bytes from a file channel to a socket channel.
    This typically avoids 2 of the copies and 1 system call introduced
    in steps (2) and (3). Kafka exploits the sendfile API to efficiently
    deliver bytes in a log segment file from a broker to a consumer.
    展开

    作者回复: 👍

    
     3
  • 斐波那契
    2019-08-20
    老师 我想问一下 对于传统的四步读取文件然后网络发送里 操作系统的内核缓冲区是不是也在内存的某一个地方(只是用户访问不到)然后第二步 复制到应用程序内存中 事实上就是从内存的某一个地方复制到内存另一个地方 然后应用程序就可以操作了
     2
     3
  • prader
    2019-10-17
    因为cpu比较快,而io比较慢,所以在处理数据的时候,主板或者外部设备上添加了DMA这个io读取操作的协处理器。
     kafaka 是利用dma的硬件条件,减少,cpu对于数据的搬运次数,因为kafuka在处理实时消息方面比较快。
    
     2
  • 码农Kevin亮
    2019-10-17
    请问老师,我是不是可以这样理解,java的fileChannel的api都是基于DMAC的实现?
    
     2
  • 活的潇洒
    2019-08-26
    从去年一直在在用elk+kafka 作为日志系统,之所以选择kafka是因为知道他快,但是具体怎么快?为什么快只有学完这篇你会觉得一下通透了
    day 48天笔记:https://www.cnblogs.com/luoahong/p/11412797.html
    
     1
  • yhh
    2019-08-20
    如果我们的应用程序需要对数据做进一步的加工,那还能使用零拷贝吗

    作者回复: yhh同学,

    你好,那就不能了,我们需要把数据复制到内存里面来,在用户态用程序进行处理。

     1
     1
  • 大明
    2019-08-19
    哈哈哈哈
    
     1
  • fcb的鱼
    2020-02-07
    cpu处理的是用户内存中的数据,访问不到操作系统中的数据。DMA处理的是操作系统内核中的数据,访问不到用户内存。可以这也理解吧?要不然为啥不让DMAC直接将数据从硬盘读到用户的内存呢?

    作者回复: fcb的鱼同学,

    你好,我觉得你在这里把软件和硬件的各个概念混在一起了。

    1. CPU是硬件,操作系统是软件。内存也是硬件,数据都是加载到内存里面的。
    2. “操作系统内核中的数据”存放在哪里?也是存放在内存里呀。
    3. DMAC也是一个硬件,我们这里写的过程,就是直接从硬盘读数据到内存呀。

     1
    
  • 成为祝福
    2019-12-13
    老师好,如果CPU已经在步骤1和2成功设置了DMAC从硬盘读,写入内存,为何还需要第4步硬盘“主动”发起请求呢?感觉DMAC已经拥有一切需要的信息去“主动的”完成这次操作了。
     1
    
  • QQ怪
    2019-12-11
    以前只知道kafka通过零拷贝技术提高了吞吐量,但不知道为什么?这下老师通过硬件知识体系理解了相关技术原理,简直太棒了
    
    
  • David Xing
    2019-10-15
    👍
    
    
  • skye
    2019-10-14
    老师,DMAC搬运数据的时候,CPU在干嘛?不是等待吗?
     1
    
  • 小先生
    2019-10-07
    请问老师,在什么场景下,I/O 设备会主设备发起请求?
    
    
  • Fstar
    2019-10-02
    我记得 Nginx 的静态服务器貌似也是零拷贝。市面上常见的web服务器的静态服务器应该都实现了零拷贝吧?

    作者回复: Fstar同学,

    你好,我不是一个Web服务器的专家,所以其他Web服务器我不太清楚。不过Nginx的确是可以通过配置sendfile的开关on/off来控制是不是zero copy的

    
    
  • 纵横四海1949
    2019-09-04
    从C盘复制数据到D盘是怎么个过程呢?

    作者回复: 看这个程序怎么写啊,可以走DMA也可以不走DMA。

    不走DMA就是要通过user space在内存里面复制中转。

    
    
  • 袭
    2019-08-23
    如果不是由硬盘而是要从程序到网卡,可以省略socket buffer这一步吗?

    作者回复: 袭同学,

    你好,什么叫做“程序到网卡”呢?其实从硬件的角度,只有内存、硬盘、网卡这些设备并没有“程序”这个东西。

    需要把软件代码和硬件设备分离开来想这个问题。

     1
    
  • gigglesun
    2019-08-20
    "4. 如果我们要从硬盘上往内存里面加载数据,这个时候,硬盘就会向 DMAC 发起一个数据传输请求。这个请求并不是通过总线,而是通过一个额外的连线。"这个地方不太明白,硬盘怎么能发起数据传输请求,我的理解硬盘就是单一的存储设备,没有逻辑处理能力。请老师指点~
     1
    
  • 许童童
    2019-08-19
    老师讲得好啊,之前一直不是很理解DMA是什么原理,到底是怎么工作的,这篇文章,深入浅出,感谢老师。
     1
    
我们在线,来聊聊吧