Я, кажется, понял, почему squid не ест процессор при проксировании
больших файлов. Я потестировал, сразу оговорюсь, старую версию squid'а -
2.4.STABLE7, и, surprise-surprise, не увидел акселерации больших
ответов. Похоже, акселератор из squid'а - немногим лучше, чем из mod_proxy.
Я не нашёл програмки, которая бы читала ответ с задержками, поэтому
собрал схему с nginx'ом, который ограничивает скорость забирания ответа
у squid'а:
ab -> nginx -> squid -> apache.
nginx проксирует запросы на squid, не использует временные файлы,
может считать у squid'а не больше 6K и ограничивает скорость отдачи в 1K:
limit_rate 1k;
proxy_pass http://127.0.0.1:3128/;
proxy_header_buffer_size 2k;
proxy_buffers 2 2k;
proxy_busy_buffers_size 2k;
proxy_max_temp_file_size 0;
squid настроен так:
httpd_accel_host 127.0.0.1
httpd_accel_port 9000
httpd_accel_single_host on
Ответ в 250K Апач отдал squid'у мгновенно, а вот 300K отдавал 41 секунду.
То есть, затык наступает где-то в районе 260К, после чего Апач отдаёт
данные со скоростью клиента (1K/s). И, кстати, 160K из этих 260K - это
ядерные буфера:
sysctl -a|grep 'tcp.*space'
net.inet.tcp.sendspace: 32768
net.inet.tcp.recvspace: 49152
А буфер самого squid'а, очевидно, около 100K. Вот такая акселерация.
Игорь Сысоев
http://sysoev.ru