ホームページ バックエンド開発 PHPチュートリアル nginxのsendfileパラメータの説明

nginxのsendfileパラメータの説明

Jul 29, 2016 am 09:05 AM
buffer kernel mode user

ファイルを送信
現在、一般的な Web サーバーには、サーバーのパフォーマンスを向上させるための sendfile オプションが用意されています。sendfile とは一体何で、パフォーマンスにどのような影響を与えるのでしょうか? sendfile は実際には Linux 2.0 以降に起動されたシステム コールであり、Web サーバーは独自の設定を調整することで sendfile システム コールを使用するかどうかを決定できます。まず、sendfile を使用しない従来のネットワーク送信プロセスを見てみましょう:
読み取り(ファイル、tmp_buf、len); write(ソケット,tmp_buf, len); ハードディスク >> ユーザー バッファ >> プロトコル スタック 一般に、ネットワーク アプリケーションは、ハードディスクからデータを読み取り、ソケットにデータを書き込むことによってネットワーク送信を完了します。上記の 2 行のコードはこの点を説明していますが、上記の 2 行の単純なコードは多くの基礎的な操作をカバーしています。最下層が上記の 2 行のコードをどのように実行するかを見てみましょう:
1. システム コール read() はコンテキスト スイッチを生成し、ユーザー モードからカーネル モードに切り替えます。その後、DMA がコピーを実行してファイル データをハード ディスクからカーネル バッファに読み取ります。
2. データがカーネル バッファからユーザー バッファにコピーされ、システムは read() を呼び出して戻ります。このとき、コンテキスト スイッチが発生し、カーネル モードからユーザー モードに切り替わります。
3. システムは write() を呼び出してコンテキスト スイッチを生成します。ユーザー モードからカーネル モードに切り替え、ステップ 2 でユーザー バッファから読み取ったデータをカーネル バッファにコピーします (データは、次の手順でカーネル バッファにコピーされます)。 2 回目)、今回は異なります。カーネル バッファはソケットに関連付けられています。
4. システム コール write() が返されると、コンテキスト スイッチが発生します。カーネル モードからユーザー モードに切り替わり (4 回目)、DMA がカーネル バッファからプロトコル スタックにデータをコピーします (4 回目)。
上記の 4 つのステップには 4 つのコンテキスト スイッチと 4 つのコピーがあり、スイッチとコピーの数を減らすことができれば、パフォーマンスが効果的に向上することがわかりました。 kernel2.0+ バージョンでは、システム コール sendfile() を使用して、上記の手順を簡素化し、パフォーマンスを向上させます。 sendfile() を使用すると、スイッチの数だけでなくコピーの数も減らすことができます。
ネットワーク送信に sendfile() を使用するプロセスを見てみましょう:
sendfile(ソケット,ファイル,len); ハードディスク >>カーネル バッファ (カーネルソケット バッファへのクイック コピー) >>プロトコル スタック
1. システムは sendfile() を呼び出して、ハードディスク データを DMA 経由でカーネル バッファにコピーします。その後、データはカーネルによってソケットに関連する別のカーネル バッファに直接コピーされます。ユーザー モードとカーネル モードの間の切り替えは行われず、あるバッファから別のバッファへのコピーはカーネル内で直接完了します。
2. DMA はデータをカーネルバッファからプロトコルスタックに直接コピーします。データはカーネル内にあるため、切り替えは行われず、データをユーザーモードからカーネルモードにコピーする必要もありません。

記事参照: 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 チュートリアルに興味のある友人に役立つことを願っています。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

kernel_security_check_failure ブルー スクリーンを解決する 17 の方法 kernel_security_check_failure ブルー スクリーンを解決する 17 の方法 Feb 12, 2024 pm 08:51 PM

Kernelsecuritycheckfailure (カーネルチェック失敗) は比較的一般的な停止コードですが、理由が何であれ、ブルースクリーンエラーは多くのユーザーを悩ませます、当サイトでは 17 種類のエラーをユーザーに丁寧に紹介します。 kernel_security_check_failure ブルー スクリーンに対する 17 の解決策 方法 1: すべての外部デバイスを削除する 使用している外部デバイスが Windows のバージョンと互換性がない場合、Kernelsecuritycheckfailure ブルー スクリーン エラーが発生することがあります。これを行うには、コンピュータを再起動する前に、すべての外部デバイスを取り外しておく必要があります。

Linuxカーネルとは何ですか Linuxカーネルとは何ですか Mar 23, 2023 am 10:20 AM

Linux カーネルとは、主に IO ドライバー デバイス管理、TCP/IP、およびタスク スケジューリングを完了するために機能する Linux カーネルを意味します。Linux カーネルは、Linux オペレーティング システムの主要コンポーネントであり、コンピューター ハードウェアとそのプロセス間のコア インターフェイスです。両方の役割を担います。可能な限り効率的に通信し、リソースを管理します。

Docker マウントディレクトリの権限の問題を解決する方法 Docker マウントディレクトリの権限の問題を解決する方法 Feb 29, 2024 am 10:04 AM

Docker では、マウント ディレクトリの権限の問題は通常、-v パラメータを使用してマウント ディレクトリを指定するときに権限関連のオプションを追加することで解決できます。マウントされたディレクトリのアクセス許可を指定するには、マウントされたディレクトリの後に ro または :rw を追加します。それぞれ、読み取り専用と読み取り/書き込みアクセス許可を示します。例: dockerrun-v/host/path:/container/path:roimage_name Dockerfile で USER ディレクティブを定義してコンテナ内で実行するユーザーを指定し、コンテナ内での操作が権限要件に準拠していることを確認します。例: FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

高い同時実行条件下での Linux システムとカーネル パラメーターの最適化 高い同時実行条件下での Linux システムとカーネル パラメーターの最適化 Aug 04, 2023 pm 04:41 PM

ご存知のとおり、Linux はデフォルトのパラメータでは高い同時実行性を十分にサポートしていません。これは主に、単一プロセスでオープンできるファイルの最大数の制限、カーネル TCP パラメータ、および IO イベント分散メカニズムによって制限されます。以下では、Linux システムが高同時実行環境をサポートできるように、いくつかの側面から調整します。

Javaのバッファの概念とは何ですか Javaのバッファの概念とは何ですか Apr 28, 2023 pm 05:13 PM

1. JavaNIOBuffers を使用して NIOChannel と対話する概念。チャネルからバッファへのデータの読み取り、およびバッファからチャネルへのデータの書き込み。バッファの 3 つのプロパティ、つまり容量、位置ロケーション、制限を制御する必要があります。 2. インスタンス publicstaticvoidmain(String[]args){//長さ 10IntBufferintBuffer=IntBuffer.allocate(10);for(inti=0;i) のバッファを生成します。

Linux でカーネル パニックによるブルー スクリーンが発生する Linux でカーネル パニックによるブルー スクリーンが発生する Jun 24, 2024 pm 06:47 PM

昨年末、Linux システム管理サービス systemd のバージョン 255 に、ブルー スクリーン オブ デス (BSOD) 形式のエラー メッセージを全画面モードで表示する機能が追加されました。ただし、この解決策はカーネル エラーには機能しないため、今後の

CentOS7 ユーザーはアップデートが必要です: Linux カーネル パッチがリリースされました CentOS7 ユーザーはアップデートが必要です: Linux カーネル パッチがリリースされました Jan 07, 2024 pm 09:21 PM

Red Hat Enterprise Linux 7 の無償リリースされたソースに基づいて、CentOS 7 ブランチは常に最新のカーネル セキュリティ アップデートを取得する機能を継承しています。本日、システム チームは、最近発見された 4 つの脆弱性を迅速に修正するための非常に重要なパッチをリリースし、できるだけ早くパッチをインストールし、kernel-3.10.0-514.10.2.el7 にアップグレードすることをユーザーに推奨しました。 RHSA-2017:0386-1 セキュリティ アドバイザリによると、このカーネル パッチで修正される脆弱性の 1 つは、未定義の命令が実行およびシミュレートされる場合の LinuxKernelKVM (Kernel-basedVirtualMachine) デプロイメント (CVE-2016-8630) です。

Java で IO ストリーム操作にバッファを使用する方法と使用シナリオは何ですか? Java で IO ストリーム操作にバッファを使用する方法と使用シナリオは何ですか? May 07, 2023 am 09:37 AM

I/O ストリーム操作でのバッファの使用 NIO に加えて、Java を使用して I/O 操作を実行するには 2 つの基本的な方法があります: InputStream および OutputStream に基づくメソッドを使用する方法、(バイト ストリーム) では Writer および Reader を使用する方法です。 (キャラクタストリーム) ファイルI/Oにどのような方式を使用しても、バッファリングを合理的に使用できれば、I/Oパフォーマンスを効果的に向上させることができます。

See all articles