首页 后端开发 php教程 nginx sendfile 参数解释

nginx sendfile 参数解释

Jul 29, 2016 am 09:05 AM
buffer kernel mode user

sendfile
现在流行的web 服务器里面都提供 sendfile 选项用来提高服务器性能,那到底 sendfile是什么,怎么影响性能的呢?sendfile实际上是 Linux2.0+以后的推出的一个系统调用,web服务器可以通过调整自身的配置来决定是否利用 sendfile这个系统调用。先来看一下不用 sendfile的传统网络传输过程:
read(file,tmp_buf, len);
write(socket,tmp_buf, len);
硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈
一般来说一个网络应用是通过读硬盘数据,然后写数据到socket 来完成网络传输的。上面2行用代码解释了这一点,不过上面2行简单的代码掩盖了底层的很多操作。来看看底层是怎么执行上面2行代码的:
1、系统调用 read()产生一个上下文切换:从 user mode 切换到 kernel mode,然后 DMA 执行拷贝,把文件数据从硬盘读到一个 kernel buffer 里。
2、数据从 kernel buffer拷贝到 user buffer,然后系统调用 read() 返回,这时又产生一个上下文切换:从kernel mode 切换到 user mode。
3、 系统调用write()产生一个上下文切换:从 user mode切换到 kernel mode,然后把步骤2读到 user buffer的数据拷贝到 kernel buffer(数据第2次拷贝到 kernel buffer),不过这次是个不同的 kernel buffer,这个 buffer和 socket相关联。
4、系统调用 write()返回,产生一个上下文切换:从 kernel mode 切换到 user mode(第4次切换了),然后 DMA 从 kernel buffer拷贝数据到协议栈(第4次拷贝了)。
上面4个步骤有4次上下文切换,有4次拷贝,我们发现如果能减少切换次数和拷贝次数将会有效提升性能。在kernel2.0+ 版本中,系统调用 sendfile() 就是用来简化上面步骤提升性能的。sendfile() 不但能减少切换次数而且还能减少拷贝次数。
再来看一下用 sendfile()来进行网络传输的过程:
sendfile(socket,file, len);
硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈
1、 系统调用sendfile()通过 DMA把硬盘数据拷贝到 kernel buffer,然后数据被 kernel直接拷贝到另外一个与 socket相关的 kernel buffer。这里没有 user mode和 kernel mode之间的切换,在 kernel中直接完成了从一个 buffer到另一个 buffer的拷贝。
2、DMA 把数据从 kernelbuffer 直接拷贝给协议栈,没有切换,也不需要数据从 user mode 拷贝到 kernel mode,因为数据就在 kernel 里。

文章参考:http://www.th7.cn/system/lin/201306/41314.shtml

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了nginx sendfile 参数解释,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1663
14
CakePHP 教程
1419
52
Laravel 教程
1313
25
PHP教程
1263
29
C# 教程
1236
24
解决kernel_security_check_failure蓝屏的17种方法 解决kernel_security_check_failure蓝屏的17种方法 Feb 12, 2024 pm 08:51 PM

Kernelsecuritycheckfailure(内核检查失败)就是一个比较常见的停止代码类型,可蓝屏错误出现不管是什么原因都让很多的有用户们十分的苦恼,下面就让本站来为用户们来仔细的介绍一下17种解决方法吧。kernel_security_check_failure蓝屏的17种解决方法方法1:移除全部外部设备当您使用的任何外部设备与您的Windows版本不兼容时,则可能会发生Kernelsecuritycheckfailure蓝屏错误。为此,您需要在尝试重新启动计算机之前拔下全部外部设备。

linux kernel是什么 linux kernel是什么 Mar 23, 2023 am 10:20 AM

linux kernel是linux内核的意思,主要起到完成IO驱动设备管理,TCP/IP以及任务调度;linux内核是Linux操作系统的主要组件,也是计算机硬件与其进程之间的核心接口,它负责两者之间的通信,还要尽可能高效地管理资源。

docker挂载目录权限问题怎么解决 docker挂载目录权限问题怎么解决 Feb 29, 2024 am 10:04 AM

在Docker中,挂载目录的权限问题通常可以通过以下方法解决:使用-v参数指定挂载目录时添加权限相关的选项。可以通过在挂载的目录后面添加:ro或:rw来指定挂载目录的权限,分别表示只读和读写权限。例如:dockerrun-v/host/path:/container/path:roimage_name在Dockerfile中定义USER指令来指定容器中运行的用户,以确保容器内部的操作符合权限要求。例如:FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

高并发情况下 Linux 系统及 kernel 参数优化 高并发情况下 Linux 系统及 kernel 参数优化 Aug 04, 2023 pm 04:41 PM

众所周知在默认参数情况下Linux对高并发支持并不好,主要受限于单进程最大打开文件数限制、内核TCP参数方面和IO事件分配机制等。下面就从几方面来调整使Linux系统能够支持高并发环境。

java中Buffer的概念是什么 java中Buffer的概念是什么 Apr 28, 2023 pm 05:13 PM

1、概念使用JavaNIOBuffers与NIOChannel交互。从Channel中读取数据到buffers里,从Buffer把数据写入到Channels;必须对Buffer的三个属性进行控制,即capacities能力、position-location、limit限制。2、实例publicstaticvoidmain(String[]args){//生成一个长度为10的缓冲区IntBufferintBuffer=IntBuffer.allocate(10);for(inti=0;i

Linux 因内核恐慌而出现蓝屏死机 Linux 因内核恐慌而出现蓝屏死机 Jun 24, 2024 pm 06:47 PM

去年年底,Linux 系统管理服务 systemd 255 版本被赋予了在全屏模式下显示蓝屏死机 (BSOD) 样式错误消息的能力。然而,这个解决方案不适用于内核错误,因此即将推出的

CentOS7用户需更新:Linux Kernel补丁发布 CentOS7用户需更新:Linux Kernel补丁发布 Jan 07, 2024 pm 09:21 PM

基于RedHatEnterpriseLinux7的自由发布源,CentOS7分支继承了始终能获得最新内核安全更新的特性。今天,系统团队发布了一个非常重要的补丁,对近期发现的4个漏洞进行了及时修复,并推荐用户尽快安装补丁,升级至kernel-3.10.0-514.10.2.el7。根据RHSA-2017:0386-1安全公告,这个内核补丁修复的漏洞之一是LinuxKernelKVM(Kernel-basedVirtualMachine)部署(CVE-2016-8630),在未定义指令被执行模拟的时

MODE币近期暴涨的原因 MODE币近期暴涨的原因 Dec 06, 2024 am 11:43 AM

Mode 币在 OKX 交易所上市,标志着它进入主流加密货币市场的里程碑。币安首席执行官赵长鹏对该项目表示看好,为 Mode 币带来了信心和信誉。一个活跃而不断壮大的社区为项目营造了热情和参与度。Mode 币的代币经济学奖励长期持有者和社区贡献者,而 DeFi 行业的蓬勃发展为其提供了成长的背景。

See all articles