nginx sendfile 参数解释
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教程有兴趣的朋友有所帮助。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Kernelsecuritycheckfailure (Kernel-Check-Fehler) ist eine relativ häufige Art von Stoppcode. Unabhängig vom Grund führt der Bluescreen-Fehler jedoch dazu, dass viele Benutzer diese Seite sorgfältig vorstellen. 17 Lösungen für den Bluescreen „kernel_security_check_failure“ Methode 1: Entfernen Sie alle externen Geräte Wenn ein externes Gerät, das Sie verwenden, nicht mit Ihrer Windows-Version kompatibel ist, kann der Bluescreen-Fehler „Kernelsecuritycheckfailure“ auftreten. Dazu müssen Sie alle externen Geräte trennen, bevor Sie versuchen, Ihren Computer neu zu starten.

Linux-Kernel bedeutet Linux-Kernel, der hauptsächlich für die Verwaltung von E/A-Treibern, TCP/IP und Aufgabenplanung zuständig ist. Der Linux-Kernel ist die Hauptkomponente des Linux-Betriebssystems und die Kernschnittstelle zwischen Computerhardware und seinem Prozess Kommunikation zu optimieren und Ressourcen so effizient wie möglich zu verwalten.

In Docker kann das Berechtigungsproblem des Mount-Verzeichnisses normalerweise durch die folgende Methode gelöst werden: Hinzufügen berechtigungsbezogener Optionen bei Verwendung des Parameters -v zur Angabe des Mount-Verzeichnisses. Sie können die Berechtigungen des gemounteten Verzeichnisses angeben, indem Sie nach dem gemounteten Verzeichnis Folgendes hinzufügen: ro oder :rw, was jeweils Lese- und Lese-/Schreibberechtigungen angibt. Beispiel: dockerrun-v/host/path:/container/path:roimage_name Definieren Sie die USER-Direktive in der Docker-Datei, um den Benutzer anzugeben, der im Container ausgeführt wird, um sicherzustellen, dass Vorgänge innerhalb des Containers den Berechtigungsanforderungen entsprechen. Zum Beispiel: FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

Wie wir alle wissen, unterstützt Linux unter den Standardparametern keine hohe Parallelität, was hauptsächlich durch die Begrenzung der maximalen Anzahl geöffneter Dateien in einem einzelnen Prozess, die TCP-Parameter des Kernels und den Mechanismus zur Verteilung von E/A-Ereignissen eingeschränkt wird. Im Folgenden werden wir verschiedene Aspekte anpassen, um dem Linux-System die Unterstützung einer Umgebung mit hoher Parallelität zu ermöglichen.

1. Konzept der Verwendung von JavaNIOBuffers zur Interaktion mit NIOChannel. Das Lesen von Daten vom Kanal in den Puffer und das Schreiben von Daten vom Puffer in den Kanal müssen die drei Eigenschaften des Puffers steuern, nämlich Kapazität, Position, Position und Grenze. 2. Instanz publicstaticvoidmain(String[]args){//Generieren Sie einen Puffer mit einer Länge von 10IntBufferintBuffer=IntBuffer.allocate(10);for(inti=0;i

Ende letzten Jahres erhielt Version 255 des Linux-Systemverwaltungsdienstes systemd die Möglichkeit, Fehlermeldungen im Blue Screen of Death (BSOD)-Stil im Vollbildmodus anzuzeigen. Allerdings funktioniert diese Lösung nicht bei Kernel-Fehlern, so die kommende

Basierend auf der frei veröffentlichten Quelle von Red Hat Enterprise Linux 7 erbt der CentOS 7-Zweig die Funktion, immer die neuesten Kernel-Sicherheitsupdates zu erhalten. Heute hat das Systemteam einen sehr wichtigen Patch veröffentlicht, um vier kürzlich entdeckte Schwachstellen umgehend zu beheben, und empfiehlt Benutzern, den Patch so bald wie möglich zu installieren und auf Kernel-3.10.0-514.10.2.el7 zu aktualisieren. Laut der Sicherheitsempfehlung RHSA-2017:0386-1 ist eine der durch diesen Kernel-Patch behobenen Schwachstellen die Bereitstellung von LinuxKernelKVM (Kernel-basedVirtualMachine) (CVE-2016-8630), wenn undefinierte Anweisungen ausgeführt und simuliert werden

Verwendung von Buffer für I/O-Stream-Operationen Zusätzlich zu NIO gibt es zwei grundlegende Methoden für die Verwendung von Java zur Durchführung von I/O-Operationen: Verwendung von Methoden, die auf InputStream und OutputStream (Byte-Streams) basieren, unter Verwendung von Writer und Reader. (Zeichenstrom) Unabhängig davon, welche Methode für Datei-E/A verwendet wird, kann die E/A-Leistung effektiv verbessert werden, wenn die Pufferung sinnvoll genutzt werden kann.
