linux零拷贝实现,linux拷贝数据

Linux系统I/O操作与零拷贝

1、使用DMA的系统I/O操作要进行4次内核空间与应用程序空间的上下文切换,2次CPU数据拷贝及2次DMA数据拷贝。 Mmap内存映射与标准I/O操作的区别在于当应用程序需要访问数据时,不需要进行内核缓冲区到应用程序缓冲区之间的数据拷贝。

2、简单的说,零拷贝是一种避免CPU将数据从一快存储拷贝到另外一块存储的技术。

3、下面我们通过一个Java非常常见的应用场景:将系统中的文件发送到远端(该流程涉及:磁盘上文件 —— 内存(字节数组) —— 传输给用户/网络)来详细展开传统I/O操作和通过零拷贝来实现的I/O操作。

4、sendfile只适用于将数据从文件拷贝到套接字上,限定了它的使用范围。Linux在17版本引入splice系统调用,用于在两个文件描述符中移动数据。

5、“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。Linux中传统的I/O操作是一种缓存I/O,I/O过程中产生的数据传输通常需要在缓冲区中进行多次拷贝。

6、linux系统要把u盘中的文件复制过来需要先把U盘挂载到系统中的某一个位置,然后再使用cp命令完成拷贝。可以参考以下操作步骤:把U盘插入Linux电脑,确保U盘指示灯是亮着的。

零拷贝Zero-copy技术详解

所以异步IO可以做到直接从磁盘缓冲区拷贝到用户缓冲区,适用于大文件传输。

零拷贝(zero-copy)基本思想是:数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现CPU的零参与,彻底消除 CPU在这方面的负载。

Kafka使用零拷贝(Zero-Copy)技术来提供它的性能,所谓的零拷贝是指将数据直接从磁盘文件复制到网卡设备中,而不需要经由应用程序之手,减少了内核和用户模式之间的上下文切换,零拷贝技术通过DMA技术实现。

Linux的fork()使用写时拷贝(copy-on-write)页实现。写时拷贝是一种可以推迟甚至免除拷贝数据的技术。内核此时并不复制整个进程地址空间,而是让父进程和子进程共享同一个拷贝。

可以见到,在这个过程中发生了2次cpu copy和2次DMA copy,以及发生了数次cpu状态切换。 这个操作对于应用服务器来说很频繁,因此带来的开销也是非常大。

我们来重点探究 kafka两个重要过程、以及是如何利用两个零拷贝技术sendfile和mmap的。 传统方式实现: 先接收生产者发来的消息,再落入磁盘。 实际会经过四次copy,如下图的四个箭头。

MMAP和零拷贝

系统调用命令: mmap() 。使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write() 等操作。

在某些情况下,这种零拷贝技术能获得很好的性能。linux下提供类似的系统调用主要有mmap(),sendfile(),splice(). 使用mmap替代read,可以减少CPU拷贝次数。

mmap+write简单来说就是使用 mmap 替换了read+write中的read操作,减少了一次CPU的拷贝。

然后介绍了优化的点分别是减少数据拷贝次数和介绍空间切换次数,于是引出了零拷贝技术: mmap+write、sendfile、sendfile+DMA收集、splice等。最后介绍了内核缓冲区的作用,也引出了异步IO可以处理大文件传输工作。

A: Linux提供了mmap零拷贝来实现我们的需求。 mmap(内存映射)是一个比sendfile昂贵但优于传统I/O的方法。 ① 发出mmap系统调用,导致用户空间到内核空间的上下文切换(第一次上下文切换)。

[转]浅谈Linux下的零拷贝机制

总的来说,带有DMA收集拷贝功能的sendfile实现的I/O只使用了2次用户空间与内核空间的上下文切换,以及2次数据的拷贝,而且这2次的数据拷贝都是非CPU拷贝。

有时候,应用程序在数据传输的过程中不需要对数据进行访问,将数据从linux的页缓存拷贝到用户进程的缓冲区就可以完全避免,传输的数据在页缓冲中就可以处理。在某些情况下,这种零拷贝技术能获得很好的性能。

splice调用利用了Linux提出的管道缓冲区机制, 所以至少一个描述符要为管道。以上几种零拷贝技术都是减少数据在用户空间和内核空间拷贝技术实现的,但是有些时候,数据必须在用户空间和内核空间之间拷贝。

linux零拷贝实现,linux拷贝数据

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年5月9日 06:38:19
下一篇 2024年5月9日 06:46:27

相关推荐

  • 虚拟机linux使用u盘启动不了,linux虚拟机装完如何使用

    怎样从虚拟机里启动U盘上的Linux系统 、参考附带的地址。用带 PE或Linux的 iso 文件启动。 确定u盘的位置:在插入u盘之前要确保鼠标放入了Linux系统界面上,也就是说在Linux系统获得鼠标焦点的时候插入u盘(电脑的usb接口上)。 A. 选中LINUX虚拟机,点击VMWARE工具栏中的Power ON按钮,启动LINUX虚拟机 B.然后插入…

    2024年5月23日
    5000
  • 无法从网络安装linux,linux安装无法进入安装界面

    怎么装Linux系统 1、第一步:选择Linux发行版Linux系统由众多发行版组成,不过最常用的就是Ubuntu、Fedora和Debian等。它们各自拥有自己的特点和用途,因此在进行Linux安装之前,先应该选择一款适合自己需求的发行版。 2、linux系统安装方法如下:使用光驱或U盘或你下载的LinuxISO文件进行安装。直接skip就可以了。出现引导…

    2024年5月23日
    4600
  • linux给文件写权限,linux怎么给文件权限

    linux宝塔写入权限不足 1、可以使用chmod命令修改权限。语法:chmod [-cfvR] [–help] [–version] mode file…说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。 2、通过更改文件权限可以使用c…

    2024年5月23日
    5000
  • linux安全卸载,linux卸载linux

    linux怎么卸载软件 linux该如何卸载软件?我们一起来了解一下吧。打开终端窗口。 在提示符下输入dpkg — list命令,然后按Enter键。滚动安装的软件包在终端窗口的列表中找到要卸载的。 注意包的全名。 linux卸载软件命令:apt-get,aptitude。Linux软件的安装和卸载一直是困扰许多新用户的难题。在Windows中,…

    2024年5月23日
    4500
  • linux聊天室,linux聊天室实验报告

    刚买的电脑需要关闭哪些端口? 1、这样,关闭了SMTP服务就相当于关闭了对应的端口。 2、为了让你的系统变为铜墙铁壁,应该封闭这些端口,主要有:TCP 131344591025 端口和 UDP 131313445 端口,一些流行病毒的后门端口(如 TCP 2743126129 端口),以及远程服务访问端口3389。 3、在“本地安全策略”窗口,用鼠标右击新添…

    2024年5月23日
    4400
  • linux查看网卡速率,linux查看网卡多少兆

    linux/centos如何查看网卡是100M还是1000M 1、)查看网卡型号 lspci | grep Ethernet 这个命令可以查看你的网卡设备型号,根据型号就知道是什么性能了。2)查看网卡实际通讯速率 dmesg | grep eth0 这个命令可以列出网卡工作速率。 2、在运行命令中输入”ethtool eth0“,当出现”Speed: 100…

    2024年5月23日
    4200
  • linux如何查询pid所在目录,linux查看pid对应的服务

    linux中怎么查看命令所在目录 ls命令。Is是List的缩写,表示显示文件目录列表。(只显示非隐藏文件的文件名)参数:-a:–all的缩写,显示所有文件,包括隐藏文件(以 . 开头的文件)-L:列出长数据串,显示文件的大小,时间等数据信息。 列出文件清单命令,ls。ls命令能够列出当前目录下的所有内容。ls 命令的执行方式为:# ls [-选…

    2024年5月23日
    4800
  • linux如何分屏显示,linux怎么分屏

    Linux系统中如何分屏显示touch的命令帮助,并且实现翻页? 1、可以使用more命令。more命令能够对文件内容或者查询结果进行分屏显示。more命令可以单独使用,也可以和配合管道符使用。 2、如果是文本模式下,要用命令more或less将输出的信息分屏显示。图形模式下的虚拟终端是可以实现翻页的。 3、filelist:用于结合文件的可选列表。分屏显示…

    2024年5月23日
    5600
  • linux更新nss,linux更新源

    配置linux主机使用ldap用户 1、目的:配置linux主机使用ldap用户后,如果ldap中添加一个用户就相当于所有linux主机添加了这个用户,这个用户可以ssh到所有的linux主机进行访问操作。这样的话权限就太大了,我们要实现的是只允许一个用户访问部分linux主机。 2、所以,如果想让用户对FTP服务器站内具有写权限,但又不允许访问系统其它资源…

    2024年5月23日
    3700
  • 包含linux启动xinetd的词条

    简述linux进程的启动.终止的方式以及如何查看进程 查看启动的进程:可以使用以面命令来查看:01ps -ef |grep tomcat复制代码tomcat它是一个Java进程,所以查找Java进程也可查找出来。 ps -ef|grep java复制代码可以看到用户和进程编号,可以用kill 进程编号结束进程。 (1)手工启动 用户在输入端发出命令,直接启动…

    2024年5月23日
    4900

发表回复

登录后才能评论



关注微信