Nginx配置中又一个sendfile配置,sendfile是零拷贝的一个方法。
1、零拷贝的原理是什么
1)DMA传送方式
CPU与外设之间的数据传送方式中断传送方式、DMA传送
a、中断传送方式
中断传送方式是指当外设需要与CPU进行信息交换时,由外设向CPU发出请求信号,使CPU暂停正在执行的程序,转而去执行数据输入/输出操作,待数据传送结束后,CPU再继续执行被暂停的程序
b、DMA的传送
DMA是指外部设备不通过CPU而直接与系统内存交换数据的接口技术
2、零拷贝的方法
sendfile
3、零拷贝的使用
user www www;
worker_processes auto;
worker_rlimit_nofile 65535;
error_log /data0/www/logs/error.log;
pid var/run/tengine.pid;
events {
worker_connections 65535;
use epoll;
}
http {
charset utf-8;
client_header_buffer_size 8k;
client_max_body_size 50m;
client_body_timeout 10s;
client_header_timeout 5s;
large_client_header_buffers 8 4k;
server_tokens off;
server_name_in_redirect off;
server_names_hash_bucket_size 128;
include tengine.mime.types;
default_type application/octet-stream;
log_format main '$http_x_real_ip - $http_host [$time_local] "$request" $request_length '
'$status $body_bytes_sent $request_time "$http_referer" '
'"$http_user_agent" $remote_addr "-" "-" ';
sendfile on;
keepalive_timeout 65;
open_file_cache max=65535 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 3;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 4k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 8k;
fastcgi_max_temp_file_size 0;
gzip on;
gzip_min_length 1k;
gzip_buffers 8 64k;
gzip_http_version 1.0;
gzip_comp_level 5;
gzip_types text/plain application/x-javascript text/css application/json application/xml application/x-shockwave-flash application/javascript image/svg+xml image/x-icon;
gzip_vary on;
add_header via $hostname always;
include virtualhost/*.conf;
}