03-Nginx性能调优与零拷贝

news2024/11/29 13:47:11

目录

Nginx 性能调优

零拷贝(Zero Copy)

零拷贝基础

A、 实现细节

B、 总结

零拷贝方式

A、 实现细节

B、 总结

A、 实现细节

B、 总结

A、 实现细节

B、 总结


  1. Nginx 性能调优

在 Nginx 性能调优中,有两个非常重要的理论点(面试点)需要掌握。所以,下面首先讲解这两个知识点,再进行性能调优的配置。

      1. 零拷贝(Zero Copy)

  1. 零拷贝基础

零拷贝指的是,从一个存储区域到另一个存储区域的 copy 任务没有CPU 参与。零拷贝通常用于网络文件传输,以减少 CPU 消耗内存带宽占用,减少用户空间CPU 内核空间的拷贝过程,减少用户上下文CPU 内核上下文间的切换,提高系统效率。

用户空间指的是用户可操作的内存缓存区域,CPU 内核空间是指仅 CPU 可以操作的寄存器缓存及内存缓存区域。

用户上下文指的是用户状态环境,CPU 内核上下文指的是 CPU 内核状态环境。

零拷贝需要 DMA 控制器的协助。DMA,Direct Memory Access,直接内存存取,是 CPU

的组成部分,其可以在 CPU 内核(算术逻辑运算器ALU 等)不参与运算的情况下将数据从

一个地址空间拷贝到另一个地址空间。

  1. 传统拷贝方式

下面均以“将一个硬盘中的文件通过网络发送出去”的过程为例,来详细详细分析不同拷贝方式的实现细节。

A、 实现细节


首先通过应用程序的 read()方法将文件从硬盘读取出来,然后再调用 send()方法将文件发送出去。

 

B、 总结

该拷贝方式共进行了 4 次用户空间与内核空间的上下文切换,以及 4 次数据拷贝,其中两次拷贝存在 CPU 参与。

我们发现一个很明显的问题:应用程序的作用仅仅就是一个数据传输的中介,最后将

kernel buffer 中的数据传递到了 socket buffer。显然这是没有必要的。所以就引入了零拷贝。

  1. 零拷贝方式

A、 实现细节


Linux 系统(CentOS6 及其以上版本)对于零拷贝是通过 sendfile 系统调用实现的。

B、 总结

该拷贝方式共进行了 2 次用户空间与内核空间的上下文切换,以及 3 次数据拷贝,但整个拷贝过程均没有 CPU 的参与,这就是零拷贝。

我们发现这里还存在一个问题:kernel buffer 到 socket buffer 的拷贝需要吗?kernel buffer 与 socket buffer 有什么区别呢?DMA 控制器所控制的拷贝过程有一个要求,数据在源头的存放地址空间必须是连续的。kernel buffer 中的数据无法保证其连续性,所以需要将数据再拷贝到 socket buffer,socket buffer 可以保证了数据的连续性。

这个拷贝过程能否避免呢?可以,只要主机的 DMA 支持Gather Copy 功能,就可以避免由 kernel buffer 到 socket buffer 的拷贝。

  1. Gather Copy DMA 零拷贝方式

由于该拷贝方式是由 DMA 完成,与系统无关,所以只要保证系统支持 sendfile 系统调用功能即可。

A、 实现细节

该方式中没有数据拷贝到 socket buffer。取而代之的是只是将 kernel buffer 中的数据描述信息写到了 socket buffer 中。数据描述信息包含了两方面的信息:kernel buffer 中数据的地址及偏移量。

 

B、 总结

该拷贝方式共进行了 2 次用户空间与内核空间的上下文切换,以及 2 次数据拷贝,并且整个拷贝过程均没有 CPU 的参与。

该拷贝方式的系统效率是高了,但与传统相比,也存在有不足。传统拷贝中user buffer 中存有数据,因此应用程序能够对数据进行修改等操作;零拷贝中的 user buffer 中没有了数据,所以应用程序无法对数据进行操作了。Linux 的mmap 零拷贝解决了这个问题。

  1. mmap 零拷贝

mmap 零拷贝是对零拷贝的改进。当然,若当前主机的 DMA 支持 Gather Copy,mmap

同样可以实现Gather Copy DMA 的零拷贝。

A、 实现细节

该方式与零拷贝的唯一区别是,应用程序与内核共享了 Kernel buffer。由于是共享,所以应用程序也就可以操作该 buffer 了。当然,应用程序对于 Kernel buffer 的操作,就会引发

用户空间与内核空间的相互切换。

 

B、 总结

该拷贝方式共进行了 4 次用户空间与内核空间的上下文切换,以及 2 次数据拷贝,并且整个拷贝过程均没有 CPU 的参与。虽然较之前面的零拷贝增加了两次上下文切换,但应用程序可以对数据进行修改了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++红黑树】带图详细解答红黑树的插入,测试自己的红黑树是否正确的代码

目录 1.红黑树的概念 1.1红黑树的特性(41) 2.红黑树的框架 3.红黑树的插入 3.1parent在grandfather的左边 3.1parent在grandfather的右边 4.测试自己的红黑树是不是平衡的 1.红黑树的概念 红黑树,是一种二叉搜索树,但在每个…

米联客FDMA3.1数据缓存方案全网最细讲解,自创升级版,送3套视频和音频缓存工程源码

米联客的FDMA数据缓存方案发布也有五六年了,但真正能熟练使用的兄弟却很少,其实还是没有好的例程作为参考和同熟易懂的讲解,这里我做如下解析: FDMA部分:这部分是米联客封装了用户接口的AXI4-FULL协议代码,…

xhs-web校验流程分析

经测试,cookie中需携带gid和timestamp2。参数整理有点乱,仅供参考。 xhsFingerprintV3,VERSION: ‘2.1.2’ 文章目录流程概述timestamp2滑块验证参数Params轨迹FNcaptcha deviceIdProfileDatax-s-commonx5生成x8生成x9生成smidV2a1x-b3-trac…

Jenkins配置linux节点

之前在Windows下安装Jenkins 但是通过windows节点进行构建有诸多的不便,于是想到通过Jenkins里添加linux节点,让构建的时候,使用远程的linux服务器构建 目录一、配置凭据二、配置节点一、配置凭据 Manage Jenkins → Manage Credentials→Je…

Cadence Allegro PCB设计88问解析(十三) 之 Allegro中artwork层的建立

一个学习信号完整性的layout工程师 作为layout工程师,我们经常接触到的是PCB文件,用Cadence设计的是.brd文件。但是我们发给板厂的都是gerber文件。这就涉及到在我们设计好PCB文件之后,怎么把这些文件给到板厂。也就是我们Allegro中的artwork…

Java知识点--IO流(上)

Java知识点--IO流(上)一、文件1、文件的含义2、文件流二、常用的文件操作1、创建文件对象相关构造器和方法2、创建文件案例演示(三种创建方法)3、获取文件相关信息的方法4、获取文件相关信息方法案例演示5、目录的操作与删除6、应…

电脑系统重装下载的系统在哪找到

​因为现在很多人都在使用小白一键重装系统,但是很多人都不太能够了解小白系统重装下载的系统在哪儿,下面是小编提供的具体位置供大家参考。 工具/原料: 系统版本:win10 品牌型号:联想yoga13 软件版本:小白…

期货开户有什么规定

有很多朋友刚刚接触到资本市场,当他们听到期货时,他们觉得它非常遥远和高端,这是普通人无法接触到的。但事实上,情况并非如此。期货是一种非常普通的金融产品,很容易接触。让我们来看看期货开户有哪些必要条件以及有什…

postman环境变量的设置

背景:由于我们项目接口入参都有加密,每次接口调试都得启动项目,运行项目才能把对应的参数给传到后台,然后后台再解密参数,才能进行接口调试,很麻烦(启动前端项目),如果接…

Linux篇【3】:Linux环境基础开发工具使用(中)

目录 一、Linux 编译器:gcc/g 的使用 1.1、知识拓展: 1.2、如何安装 C/C 标准静态库: 1.3、头文件与库文件: 1.4、静态库,静态链接,动态库,动态链接: 二、简单 vim 配置 2.1、…

【SpringBoot】一文了解SpringBoot热部署

文章目录前言手动启动热部署热部署种类手动进行热部署自动启动热部署热部署范围配置热部署的关闭总结🌕博客x主页:己不由心王道长🌕! 🌎文章说明:一文彻底搞懂SpringBoot热部署🌎 ✅系列专栏:Sp…

深入理解Java虚拟机:Java类的加载机制

本篇内容包括:Java 类的加载机制(Jvm 结构组成、Java 类的加载)、类的生命周期(加载-验证-准备-解析-初始化-使用-卸载)、类加载器 以及 双亲委派模型。 一、Java 类的加载机制 1、 Jvm 结构组成 Jvm 整体组成可分为…

坤坤音效键盘(Python实现)

文章目录坤坤音效键盘说明坤坤音效键盘效果展示代码实现安装第三方库准备音频监听键盘播放音频编写逻辑引入线程打包成exe程序坤坤音效键盘说明 坤坤音效键盘说明: 单独按下 j、n、t、mj、n、t、mj、n、t、m 按键,会对应触发 “鸡”、“你”、“太”、…

科技视界杂志科技视界杂志社科技视界编辑部2022年第21期目录

科技视界杂志科技视界杂志社科技视界编辑部2022年第21期目录 科普论坛《科技视界》投稿:cnqikantg126.com 天敌昆虫——让农业生产更安全 季香云; 1-3 储粮昆虫三维模型Web可视化技术研究与应用 阎磊;马宏琳;李亮;李鹏翔;王义超; 4-6 科学实验 非均匀催…

wy的leetcode刷题记录_Day33

wy的leetcode刷题记录_Day33 时间:2022-11-4 目录wy的leetcode刷题记录_Day33754. 到达终点数字题目介绍思路代码收获199. 二叉树的右视图题目介绍思路代码收获754. 到达终点数字 今天的每日一题是:754. 到达终点数字 题目介绍 在一根无限长的数轴上…

CSS:变量函数var和自定义属性

文章目录CSS变量var()函数CSS变量 CSS变量分为两部分:变量声明和变量使用。 变量的声明是由CSS自定义属性和对应的属性朱组成的,比如: :root {--custom-color: deepskyblue;}在这段代码中,–custom-color是属于css的自定义属性名…

方法的使用

目录 1. 举例说明什么叫方法 2. 方法概念及使用 2.1 什么是方法(method) 1.2 方法定义 1.3 方法调用的执行过程 1.4 实参和形参的关系(重要) 2. 方法重载 2.1 为什么需要方法重载 2.3 方法签名 3. 递归 递归执行过程分析 1. 举例说明什么叫方法 我们利用面向对象的方…

2022年特色小镇行业研究报告

第一章 行业概况 特色小镇是在几平方公里土地上集聚特色产业、生产生活生态科技相融合、不同于行政建制镇和产业园区的创新创业平台。根据类型的不同,特色小镇可以分为三类,即产业类、社区类和旅游类。 产业类:通过招商引资吸引企业进入&…

门控循环单元(GRU)【动手学深度学习v2】

理论 候选隐藏状态。 圆圈 表示 按元素乘法。 这里面的 这个符号值得是 按元素相乘。 Rt理解为 和Ht 长度一样的一维向量。(这么理解) 这里如果Rt长的像0的话,那么乘出来的结果,就也像0。 要是像0 的话,相当于是说…

文件操作之文件系统

目录 一 磁盘 1 磁盘的物理结构 2 磁盘在物理结构上如何存储数据 CHS寻址 3 从物理结构到抽象结构 LBA寻址 4管理 二 块组 boot block super block inode table data blocks block bitmap GDT:Global Descriptor Table 块组描述符 三 文件名和目录之…