"零拷贝"是如何提高Web服务器性能的

在Linux kernel2.2 版本之后出现了一种叫做 "零拷贝(zero-copy)" 系统调用机制,目前很多应用服务器如 apache、nginx都支持,此机制很好的提高了服务器的性能

"零拷贝"是由 sendfile 系统调用实现的

"零拷贝"出现之前,读写数据基本都是使用 read系统调用 和 write系调用

以web服务来说,一个请求建立,从磁盘文件到网络连接之间,会通过 硬件 -> 内核层 -> 用户层 多次读写系统来完成文件数据的复制传输

从内核层用 read系统调用 读到用户层,再从用户层用 write系统调用 写到内核层,每一次用户层到内核层都进行一次上下文转换,这种代价是非常昂贵的,如果web服务器接受大量并发请求,这种系统调用就会非常频繁,服务器的性能就会下降

而"零拷贝" 跳过“用户缓冲区”的拷贝,建立一个磁盘空间和内存的直接映射,数据不再复制到“用户态缓冲区”

Web服务器在支持了sendfile系统调用后,避免了内核层与用户层的上线文切换(content swith)工作,大大减少了系统性能的开销,这种方式,不仅节省了内存,而且还有CPU的开销

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-10-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

使用 Nginx 自己实现一个 Web 调试代理服务器

在Hecker News中我提到过,我记录了一种我使用NGINX(一个久经考验的产品,可以迅速地反向代理)作为一个本地测试代理服务器的方法。

24010
来自专栏GreenLeaves

.Net 站点跨域问题及解决方法

了解跨域之前, 先了解下什么同源策略? 百度百科: 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同...

18320
来自专栏磨磨谈

cephonebox发布(ceph+calamari集成iso)

现在已经是2016年收官的一个月了,之前一直想做一个calamari的集成版本,之所以有这个想法,是因为,即使在已经打好包的情况下,因为各种软件版本的原因,造成...

9840
来自专栏hadoop学习笔记

DKhadoop安装配置步骤教程与常见问题解决

上周分别就DKHadoop的安装准备工作以及服务器操作系统配置写了两篇分享的文章,这是个人第一次尝试写一个系统性的分享文章,必然会有很多疏漏的地方,还望见谅吧。...

13400
来自专栏FreeBuf

OpenVAS开源风险评估系统部署方案

OpenVAS,即开放式漏洞评估系统,是一个用于评估目标漏洞的杰出框架。功能十分强大,最重要的是,它是“开源”的——就是免费的意思啦~ 它与著名的Nessus“...

60270
来自专栏蓝天

不再担心日志文件过大:通用日志滚动脚本

log_rotater.zip #!/bin/sh # https://github.com/eyjian/mooon/blob/master/mooo...

20320
来自专栏北京马哥教育

十分钟学技术系列 | Nginx从入门到上线

前言 由于微信小程序要使用Https,但是又不能修改已有线上的配置。所以最简单的方法就是使用nginx转发,在nginx上使用https,然后再转发到内部服务器...

33970
来自专栏hadoop学习

DKhadoop安装配置详细教程与常见问题解决方法

上周分别就DKHadoop的安装准备工作以及服务器操作系统配置写了两篇分享的文章,这是个人第一次尝试写一个系统性的分享文章,必然会有很多疏漏的地方,还望见谅吧。...

5200
来自专栏L宝宝聊IT

puppet部署与应用

16940
来自专栏有困难要上,没有困难创造困难也要上!

Linux上PostgreSQL绿色版安装

31720

扫码关注云+社区

领取腾讯云代金券