read_ahead

Михаил Монашёв postmaster at softsearch.ru
Tue Sep 29 15:16:04 MSD 2009


Здравствуйте, Денис.

Спасибо. разобрался.

А как узнать, что aio заработал под FreeBSD 7.x ? Как я его не включал
всегда одна и та же картина:

ps -auxwww|grep nginx
www     55214  0.5  0.0 25440 16580  ??  S     3:06PM   0:01.24 nginx: worker process (nginx)
root    55209  0.0  0.0  9056  2560  ??  Is    3:06PM   0:00.00 nginx: master process /usr/local/sbin/nginx
www     55210  0.0  0.0 17248 10704  ??  S     3:06PM   0:00.30 nginx: worker process (nginx)
www     55211  0.0  0.0 22368 15216  ??  R     3:06PM   0:01.02 nginx: worker process (nginx)
www     55212  0.0  0.0 23392 13688  ??  S     3:06PM   0:00.90 nginx: worker process (nginx)
www     55213  0.0  0.0 23392 16748  ??  S     3:06PM   0:00.77 nginx: worker process (nginx)
www     55215  0.0  0.0 22368 13356  ??  D     3:06PM   0:00.76 nginx: worker process (nginx)
www     55216  0.0  0.0 18272 11416  ??  D     3:06PM   0:00.39 nginx: worker process (nginx)
www     55217  0.0  0.0 23392 15364  ??  S     3:06PM   0:00.87 nginx: worker process (nginx)
www     55218  0.0  0.0 21344 13312  ??  S     3:06PM   0:00.76 nginx: worker process (nginx)
www     55219  0.0  0.0 19296 12624  ??  S     3:06PM   0:00.56 nginx: worker process (nginx)


top -U www
last pid: 55263;  load averages:  0.36,  0.27,  0.29 up 84+19:59:47  15:07:13
34 processes:  1 running, 33 sleeping
CPU:  0.1% user,  0.0% nice,  4.0% system,  0.1% interrupt, 95.9% idle
Mem: 255M Active, 27G Inact, 3021M Wired, 1268M Cache, 399M Buf, 29M Free
Swap:

  PID USERNAME  THR PRI NICE   SIZE    RES STATE  C   TIME   WCPU COMMAND
55218 www         1   4    0 21344K 14716K kqread 1   0:01  0.39% nginx
55214 www         1   4    0 25440K 16804K kqread 1   0:02  0.00% nginx
55211 www         1   4    0 22368K 15216K biord  0   0:01  0.00% nginx
55212 www         1   4    0 23392K 14328K kqread 0   0:01  0.00% nginx
55217 www         1   4    0 22368K 15248K kqread 0   0:01  0.00% nginx
55213 www         1   4    0 23392K 16748K biord  1   0:01  0.00% nginx
55215 www         1   4    0 22368K 14020K kqread 3   0:01  0.00% nginx
55219 www         1  -8    0 20320K 13540K biord  2   0:01  0.00% nginx
55216 www         1   4    0 18272K 11980K kqread 3   0:01  0.00% nginx
55210 www         1   4    0 18272K 11772K kqread 7   0:01  0.00% nginx


т.е. статусы процессов D и biord никуда не пропадают.

Конфиг вот такой:

worker_processes        10;

pid             /var/run/nginx.pid;

events {
        use kqueue;
        worker_connections 16384;
}


http {

        access_log     off;

        log_not_found           off;

        aio                     on;
        sendfile                off;
        output_buffers          1 64k;

        #aio                    sendfile;
        #sendfile                on;

        tcp_nopush              on;
        tcp_nodelay             on;
        send_lowat              12000;

        ignore_invalid_headers on;
        server_names_hash_bucket_size 64;

        client_max_body_size    10m;
        client_body_buffer_size 128k;

        client_header_timeout           3m;
        client_header_buffer_size       2k;
        client_body_timeout                     3m;
        send_timeout                            3m;
        postpone_output                         1460;
        keepalive_timeout                       75 60;

        reset_timedout_connection       on;

        ...

/usr/local/sbin/nginx -V
nginx version: nginx/0.8.16
configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --with-ld-opt='-L /usr/local/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx-error.log --user=www --group=www --with-file-aio --http-client-body-temp-path=/var/tmp/nginx/client_body_temp --http-proxy-temp-path=/var/tmp/nginx/proxy_temp --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp --http-log-path=/var/log/nginx-access.log --without-http-cache --with-http_dav_module --with-http_realip_module --with-http_stub_status_module --with-pcre
        

>> Игорь, а поясни пожалуйста что даёт aio sendfile? Ниже ты описал
>> алгоритм работы, а зачем он нужен не понятно.

DFL> для event-driven приложения в идеале весь IO должен быть
DFL> неблокируемый, но на практике IO блокируется. AIO sendfile эмулирует
DFL> неблокируемый дисковый ввод-вывод: теперь не нужны 1000 воркеров :)

DFL> как то так...

IS>>> aio sendfile в nginx'е использует флаг SF_NODISKIO и sendfile() не
IS>>> блокируется на диске, а сообщает об отсутствии данных в памяти,
IS>>> после чего nginx инициирует асинхронную подгрузку данных, читая
IS>>> только один байт. При этом ядро FreeBSD подгружает в память первые
IS>>> 128K файла, однако при последующих чтениях файл подгружается частями
IS>>> только по 16K.


--

С уважением,
Михаил Монашёв, SoftSearch.ru
mailto:postmaster at softsearch.ru
ICQ# 166233339
http://michael.mindmix.ru/
Без бэкапа по жизни.






More information about the nginx-ru mailing list