ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Проблема со скорос тью закачки, куда копать ?



On Fri, Nov 16, 2007 at 02:21:06PM +0300, Alexey Sova wrote:

> >>>>>То есть, если убрать limit_rate, то скорость больше ?
> >>>>>
> >>>>Да, так и есть.
> >>>>замерил - при убраном limit_rate скорость ~7.5 Мб/c
> >>>>при очень большом limit_rate(замерял при 2000000k) 4.5-5.5  Мб/c
> >>>>nginx/0.6.16
> >>>>   
> >>>>        
> >>>А можно сделать отладочный лог такого запроса с limit_rate ?

Прилагаемый патч должен помочь. Интересено было бы также проверить
на небольших limit_rate'ах, типа 1k, 10k, чтобы убедиться, что они
не сломались.


-- 
Игорь Сысоев
http://sysoev.ru
Index: src/http/ngx_http_write_filter_module.c
===================================================================
--- src/http/ngx_http_write_filter_module.c     (revision 965)
+++ src/http/ngx_http_write_filter_module.c     (working copy)
@@ -49,6 +49,7 @@
 {
     off_t                      size, sent, limit;
     ngx_uint_t                 last, flush;
+    ngx_msec_t                 delay;
     ngx_chain_t               *cl, *ln, **ll, *chain;
     ngx_connection_t          *c;
     ngx_http_core_loc_conf_t  *clcf;
@@ -245,14 +246,17 @@
     }
 
     if (r->limit_rate) {
-        sent = c->sent - sent;
-        c->write->delayed = 1;
-        ngx_add_timer(c->write, (ngx_msec_t) (sent * 1000 / r->limit_rate + 
1));
+        delay = (ngx_msec_t) ((c->sent - sent) * 1000 / r->limit_rate + 1);
 
+        if (delay > 0) {
+            c->write->delayed = 1;
+            ngx_add_timer(c->write, delay);
+        }
+
     } else if (c->write->ready
                && clcf->sendfile_max_chunk
                && (size_t) (c->sent - sent)
-                                >= clcf->sendfile_max_chunk - 2 * ngx_pagesize)
+                      >= clcf->sendfile_max_chunk - 2 * ngx_pagesize)
     {
         c->write->delayed = 1;
         ngx_add_timer(c->write, 1);


 




Copyright © Lexa Software, 1996-2009.