阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

sendfile()对Nginx性能的提升

140次阅读
没有评论

共计 1532 个字符,预计需要花费 4 分钟才能阅读完成。

Linux kernel 2.2 之前,(如图)读写数据基本都是使用 read 系统调用和 write 系调用,以 nginx 来说如果一个请求建立,从磁盘的文件到网络连接之间会通过硬件(DMA)— 内核层 — 用户层多次读写系统来完成文件数据的复制传输:从内核层用 read 系统调用读到用户层,再从用户层用 write 系统调用写到内核层,每一次用户层到内核层的进行一次上下文转换,这种代价是非常昂贵的。甚至在没有数据变化时这种复制尤其显得多余。如果 nginx 接受大量并发请求,这种系统调用就会非常频繁,服务器的性能就会下降。

sendfile() 对 Nginx 性能的提升 

在 Linux kernel2.2 版本之后出现了一种叫做“零拷贝 (zero-copy)”系统调用机制,目前很多应用服务器如 apache、samba、nginx 都支持 sendfile。注意:sendfile 系统调用是一种文件传输的系统调用和 kernel 系统调用关系不大。

sendfile() 对 Nginx 性能的提升 

如图所示,nginx 在支持了 sendfile 系统调用后,避免了内核层与用户层的上线文切换(content swith)工作,大大减少了系统性能的开销。

可以使用 man 8 sendfile 进一步了解 sendfile 系统调用。

sendfile() 对 Nginx 性能的提升

以下是对参数解释

out_fd
a file descriptor, open for writing, for the data to be written
in_fd
a file descriptor, open for reading, for the data to be read
offset
the offset in the input file to start transfer (e.g. a value of 0 indicates the beginning of the file). This is passed into the function and updated when the function returns.
count
the number of bytes to be transferred

正常情况下函数会返回被写入的字节数,如果出错就返回 -1

我们都知道在 linux 系统里文件描述符 fd,可以是一个真实的文件或者是一个设备,例如一个网络 socket,(当然 linux 世界里一切皆文件,这里只是具体区别一下。)senfile 需要输入的文件描述符是一个支持 mmap 的真实文件或者设备,那么 socket 就不能作为输入的 fd,而输出的 fd 是可以的。

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx 搭建视频点播服务器(仿真专业流媒体软件)http://www.linuxidc.com/Linux/2012-08/69151.htm

Nginx 的详细介绍 :请点这里
Nginx 的下载地址 :请点这里

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计1532字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中