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教程有兴趣的朋友有所帮助。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Kernelsecuritycheckfailure (kegagalan pemeriksaan kernel) adalah jenis kod henti yang agak biasa Walau bagaimanapun, tidak kira apa sebabnya, ralat skrin biru menyebabkan ramai pengguna merasa tertekan dengan berhati-hati. 17 penyelesaian kepada skrin biru kernel_security_check_failure Kaedah 1: Alih keluar semua peranti luaran Apabila mana-mana peranti luaran yang anda gunakan tidak serasi dengan versi Windows anda, ralat skrin biru Kernelsecuritycheckfailure mungkin berlaku. Untuk melakukan ini, anda perlu mencabut semua peranti luaran sebelum cuba memulakan semula komputer anda.

kernel linux bermaksud kernel linux, yang berfungsi terutamanya untuk melengkapkan pengurusan peranti pemacu IO, TCP/IP dan penjadualan tugasan kernel linux ialah komponen utama sistem pengendalian Linux dan antara muka teras antara perkakasan komputer dan prosesnya komunikasi dan mengurus sumber secekap mungkin.

Dalam Docker, masalah kebenaran direktori pelekap biasanya boleh diselesaikan dengan kaedah berikut: menambah pilihan berkaitan kebenaran apabila menggunakan parameter -v untuk menentukan direktori pelekap. Anda boleh menentukan kebenaran direktori yang dipasang dengan menambah: ro atau :rw selepas direktori yang dipasang, masing-masing menunjukkan kebenaran baca-sahaja dan baca-tulis. Contohnya: dockerrun-v/host/path:/container/path:roimage_name Tentukan arahan PENGGUNA dalam Dockerfile untuk menentukan pengguna yang dijalankan dalam bekas untuk memastikan bahawa operasi di dalam bekas mematuhi keperluan kebenaran. Contohnya: FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

Seperti yang kita sedia maklum, Linux tidak menyokong konkurensi tinggi dengan baik di bawah parameter lalai, yang dihadkan terutamanya oleh had bilangan maksimum fail terbuka dalam satu proses, parameter TCP kernel dan mekanisme pengedaran acara IO. Di bawah, kami akan melaraskan dari beberapa aspek untuk membolehkan sistem Linux menyokong persekitaran konkurensi tinggi.

1. Konsep menggunakan JavaNIOBuffers untuk berinteraksi dengan NIOChannel. Baca data dari Saluran ke penimbal, dan tulis data dari Penampan ke Saluran tiga sifat Penampan mesti dikawal, iaitu kapasiti, lokasi kedudukan dan had. 2. Instance publicstaticvoidmain(String[]args){//Generate buffer dengan panjang 10IntBufferintBuffer=IntBuffer.allocate(10);for(inti=0;i

Lewat tahun lepas, versi 255 sistem perkhidmatan pengurusan sistem Linux diberi keupayaan untuk memaparkan mesej ralat gaya Skrin Biru Kematian (BSOD) dalam mod skrin penuh. Walau bagaimanapun, penyelesaian ini tidak berfungsi untuk ralat kernel, jadi yang akan datang

Berdasarkan sumber Red Hat Enterprise Linux 7 yang dikeluarkan secara percuma, cawangan CentOS 7 mewarisi ciri sentiasa mendapat kemas kini keselamatan kernel terkini. Hari ini, pasukan sistem mengeluarkan tampalan yang sangat penting untuk membetulkan empat kelemahan yang ditemui baru-baru ini dengan segera, dan mengesyorkan pengguna memasang tampalan secepat mungkin dan menaik taraf kepada kernel-3.10.0-514.10.2.el7. Menurut nasihat keselamatan RHSA-2017:0386-1, salah satu kelemahan yang diperbaiki oleh patch kernel ini ialah penggunaan LinuxKernelKVM (Kernel-basedVirtualMachine) (CVE-2016-8630), apabila arahan yang tidak ditentukan dilaksanakan dan disimulasikan

Menggunakan Penimbal untuk operasi strim I/O Selain NIO, terdapat dua kaedah asas untuk menggunakan Java untuk melaksanakan operasi I/O: menggunakan kaedah berdasarkan InputStream dan OutputStream (strim bait) menggunakan Writer dan Reader; (Strim aksara) Tidak kira kaedah mana yang digunakan untuk fail I/O, jika penimbalan boleh digunakan secara munasabah, prestasi I/O boleh dipertingkatkan dengan berkesan.
