Re: Ошибки при использовании zlib-ng
Hello! On Wed, Mar 31, 2021 at 11:18:16PM +0300, izor...@gmail.com wrote: > Если в сборке zlib-ng отключить совместимость с zlib, то nginx > не видит zlib-ng и собирается с zlib 1.2.11. > Или эти патчи работают только в режиме совместимости с zlib? Да, nginx умеет работать только с zlib, и если zlib-ng собирать без совместимости с zlib, то nginx его не увидит, это ожидаемое поведение. Не отключайте совместимость, если хотите использовать zlib-ng с nginx'ом. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
Здравствуйте, raven. Если вы про эту ссылку - https://github.com/zlib-ng/patches/tree/master/nginx , то там неправильные размеры выделяемой памяти. Я сам не знаю, какие там параметры надо исправить. Вы писали 1 апреля 2021 г., 4:53:38: > В одном из предыдущих сообщений есть ссылка на патч, подключающий zlib-ng, > собранную без совмесимости с zlib -- С уважением, Izorkin mailto:izor...@gmail.com ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
В одном из предыдущих сообщений есть ссылка на патч, подключающий zlib-ng, собранную без совмесимости с zlib 01.04.2021 02:18, izor...@gmail.com пишет: Здравствуйте, Maxim. Если в сборке zlib-ng отключить совместимость с zlib, то nginx не видит zlib-ng и собирается с zlib 1.2.11. Или эти патчи работают только в режиме совместимости с zlib? Вы писали 29 марта 2021 г., 16:19:47: Hello! On Mon, Mar 29, 2021 at 01:00:21PM +0600, raven...@megaline.kg wrote: [...] Будут-ли эти правки включены в какой-либо из релизов? Да, как только пройдут review. ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
Здравствуйте, Maxim. Если в сборке zlib-ng отключить совместимость с zlib, то nginx не видит zlib-ng и собирается с zlib 1.2.11. Или эти патчи работают только в режиме совместимости с zlib? Вы писали 29 марта 2021 г., 16:19:47: > Hello! > On Mon, Mar 29, 2021 at 01:00:21PM +0600, raven...@megaline.kg wrote: > [...] >> Будут-ли эти правки включены в какой-либо из релизов? > Да, как только пройдут review. -- С уважением, Izorkin mailto:izor...@gmail.com ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
оказывается, zlib-ng уже в процессе https://github.com/inikep/lzbench/pull/100 на этой неделе погоняю бенчмарки пн, 29 мар. 2021 г. в 23:49, Илья Шипицин : > > > пн, 29 мар. 2021 г. в 21:20, Maxim Dounin : > >> Hello! >> >> On Mon, Mar 29, 2021 at 08:40:04PM +0500, Илья Шипицин wrote: >> >> > пн, 29 мар. 2021 г. в 19:55, Maxim Dounin : >> > >> > > Hello! >> > > >> > > On Mon, Mar 29, 2021 at 06:31:39PM +0500, Илья Шипицин wrote: >> > > >> > > > недавно проводил бенчмарки, zlib не самое быстрое >> > > > https://github.com/inikep/lzbench >> > > > >> > > > >> > > > при том, что на браузерной нагрузке (html + css + js) сжимается всё >> > > хорошо >> > > > и из обшей нагрузки gzip занимает процентов 80 от cpu. >> > > >> > > Тут важно держать себя в руках и не пытаться крутить уровень >> > > сжатия. Я неоднократно встречал ситуации, когда люди зачем-то >> > > ставили "gzip_comp_level 9;", а потом удивлялись потреблению >> > > процессора. Не говоря уже про регулярно встречающиеся попытки >> > > поставить 6. Если использовать zlib на уровне сжатия 1, то он >> > > вполне неплох в части потребления процессора, а если этого мало - >> > > стоит смотреть в сторону gzip_static и/или кэширования сжатых >> > > ответов. >> > > >> > >> > >> > для примера, silesia xml, Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz >> > >> > [root@localhost lzbench]# ./lzbench -ezlib,1/slz_zlib,1 silezia/xml >> > lzbench 1.8 (64-bit Linux) Assembled by P.Skibinski >> > Compressor name Compress. Decompress. Compr. size Ratio >> Filename >> > memcpy 10948 MB/s 15766 MB/s 5345280 100.00 >> silezia/xml >> > zlib 1.2.11 -1125 MB/s 429 MB/s 965248 18.06 >> silezia/xml >> > slz_zlib 1.2.0 -1 329 MB/s 331 MB/s 1294302 24.21 >> silezia/xml >> > done... (cIters=1 dIters=1 cTime=1.0 dTime=2.0 chunkSize=1706MB >> cSpeed=0MB) >> > [root@localhost lzbench]# >> > >> > на одной и той же степени сжатия 1 скорость сжатия в два раза выше, чем >> у >> > zlib >> >> [...] >> >> > > > не рассматривали slz, например ? >> > > >> > > ЕМНИП, мы на него смотрели когда-то давно. В целом идея >> > > интересная, но качество сжатия оставляет желать. >> > > >> > >> > сжатие уровня 1 и на zlib оставляет желать лучшего. >> >> Оставляет, но таки slz производит результат, который на треть >> больше того, что делает zlib. И при этом по скорости уступает >> какому-нибудь brotli, который на уровне 0 производит результат, >> аналогичный zlib'у. >> > > на треть меньше сжатие, выигрыш по процессору более чем в два раза. > > > >> >> -- >> Maxim Dounin >> http://mdounin.ru/ >> ___ >> nginx-ru mailing list >> nginx-ru@nginx.org >> http://mailman.nginx.org/mailman/listinfo/nginx-ru > > ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
пн, 29 мар. 2021 г. в 21:20, Maxim Dounin : > Hello! > > On Mon, Mar 29, 2021 at 08:40:04PM +0500, Илья Шипицин wrote: > > > пн, 29 мар. 2021 г. в 19:55, Maxim Dounin : > > > > > Hello! > > > > > > On Mon, Mar 29, 2021 at 06:31:39PM +0500, Илья Шипицин wrote: > > > > > > > недавно проводил бенчмарки, zlib не самое быстрое > > > > https://github.com/inikep/lzbench > > > > > > > > > > > > при том, что на браузерной нагрузке (html + css + js) сжимается всё > > > хорошо > > > > и из обшей нагрузки gzip занимает процентов 80 от cpu. > > > > > > Тут важно держать себя в руках и не пытаться крутить уровень > > > сжатия. Я неоднократно встречал ситуации, когда люди зачем-то > > > ставили "gzip_comp_level 9;", а потом удивлялись потреблению > > > процессора. Не говоря уже про регулярно встречающиеся попытки > > > поставить 6. Если использовать zlib на уровне сжатия 1, то он > > > вполне неплох в части потребления процессора, а если этого мало - > > > стоит смотреть в сторону gzip_static и/или кэширования сжатых > > > ответов. > > > > > > > > > для примера, silesia xml, Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz > > > > [root@localhost lzbench]# ./lzbench -ezlib,1/slz_zlib,1 silezia/xml > > lzbench 1.8 (64-bit Linux) Assembled by P.Skibinski > > Compressor name Compress. Decompress. Compr. size Ratio Filename > > memcpy 10948 MB/s 15766 MB/s 5345280 100.00 > silezia/xml > > zlib 1.2.11 -1125 MB/s 429 MB/s 965248 18.06 > silezia/xml > > slz_zlib 1.2.0 -1 329 MB/s 331 MB/s 1294302 24.21 > silezia/xml > > done... (cIters=1 dIters=1 cTime=1.0 dTime=2.0 chunkSize=1706MB > cSpeed=0MB) > > [root@localhost lzbench]# > > > > на одной и той же степени сжатия 1 скорость сжатия в два раза выше, чем у > > zlib > > [...] > > > > > не рассматривали slz, например ? > > > > > > ЕМНИП, мы на него смотрели когда-то давно. В целом идея > > > интересная, но качество сжатия оставляет желать. > > > > > > > сжатие уровня 1 и на zlib оставляет желать лучшего. > > Оставляет, но таки slz производит результат, который на треть > больше того, что делает zlib. И при этом по скорости уступает > какому-нибудь brotli, который на уровне 0 производит результат, > аналогичный zlib'у. > на треть меньше сжатие, выигрыш по процессору более чем в два раза. > > -- > Maxim Dounin > http://mdounin.ru/ > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
Hello! On Mon, Mar 29, 2021 at 08:40:04PM +0500, Илья Шипицин wrote: > пн, 29 мар. 2021 г. в 19:55, Maxim Dounin : > > > Hello! > > > > On Mon, Mar 29, 2021 at 06:31:39PM +0500, Илья Шипицин wrote: > > > > > недавно проводил бенчмарки, zlib не самое быстрое > > > https://github.com/inikep/lzbench > > > > > > > > > при том, что на браузерной нагрузке (html + css + js) сжимается всё > > хорошо > > > и из обшей нагрузки gzip занимает процентов 80 от cpu. > > > > Тут важно держать себя в руках и не пытаться крутить уровень > > сжатия. Я неоднократно встречал ситуации, когда люди зачем-то > > ставили "gzip_comp_level 9;", а потом удивлялись потреблению > > процессора. Не говоря уже про регулярно встречающиеся попытки > > поставить 6. Если использовать zlib на уровне сжатия 1, то он > > вполне неплох в части потребления процессора, а если этого мало - > > стоит смотреть в сторону gzip_static и/или кэширования сжатых > > ответов. > > > > > для примера, silesia xml, Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz > > [root@localhost lzbench]# ./lzbench -ezlib,1/slz_zlib,1 silezia/xml > lzbench 1.8 (64-bit Linux) Assembled by P.Skibinski > Compressor name Compress. Decompress. Compr. size Ratio Filename > memcpy 10948 MB/s 15766 MB/s 5345280 100.00 silezia/xml > zlib 1.2.11 -1125 MB/s 429 MB/s 965248 18.06 silezia/xml > slz_zlib 1.2.0 -1 329 MB/s 331 MB/s 1294302 24.21 silezia/xml > done... (cIters=1 dIters=1 cTime=1.0 dTime=2.0 chunkSize=1706MB cSpeed=0MB) > [root@localhost lzbench]# > > на одной и той же степени сжатия 1 скорость сжатия в два раза выше, чем у > zlib [...] > > > не рассматривали slz, например ? > > > > ЕМНИП, мы на него смотрели когда-то давно. В целом идея > > интересная, но качество сжатия оставляет желать. > > > > сжатие уровня 1 и на zlib оставляет желать лучшего. Оставляет, но таки slz производит результат, который на треть больше того, что делает zlib. И при этом по скорости уступает какому-нибудь brotli, который на уровне 0 производит результат, аналогичный zlib'у. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
пн, 29 мар. 2021 г. в 19:55, Maxim Dounin : > Hello! > > On Mon, Mar 29, 2021 at 06:31:39PM +0500, Илья Шипицин wrote: > > > недавно проводил бенчмарки, zlib не самое быстрое > > https://github.com/inikep/lzbench > > > > > > при том, что на браузерной нагрузке (html + css + js) сжимается всё > хорошо > > и из обшей нагрузки gzip занимает процентов 80 от cpu. > > Тут важно держать себя в руках и не пытаться крутить уровень > сжатия. Я неоднократно встречал ситуации, когда люди зачем-то > ставили "gzip_comp_level 9;", а потом удивлялись потреблению > процессора. Не говоря уже про регулярно встречающиеся попытки > поставить 6. Если использовать zlib на уровне сжатия 1, то он > вполне неплох в части потребления процессора, а если этого мало - > стоит смотреть в сторону gzip_static и/или кэширования сжатых > ответов. > для примера, silesia xml, Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz [root@localhost lzbench]# ./lzbench -ezlib,1/slz_zlib,1 silezia/xml lzbench 1.8 (64-bit Linux) Assembled by P.Skibinski Compressor name Compress. Decompress. Compr. size Ratio Filename memcpy 10948 MB/s 15766 MB/s 5345280 100.00 silezia/xml zlib 1.2.11 -1125 MB/s 429 MB/s 965248 18.06 silezia/xml slz_zlib 1.2.0 -1 329 MB/s 331 MB/s 1294302 24.21 silezia/xml done... (cIters=1 dIters=1 cTime=1.0 dTime=2.0 chunkSize=1706MB cSpeed=0MB) [root@localhost lzbench]# на одной и той же степени сжатия 1 скорость сжатия в два раза выше, чем у zlib > > > glib-ng я не тестил, но взял на заметку. > > AFAIK, сейчас существует три вариации "на тему zlib", все пытаются > ускорить работу на современных процесорах: zlib "от Intel", zlib > "от Cloudflare", и вот темерь ещё zlib-ng. > > Было бы интересно посмотреть на какое-нибудь сравнение скорости > между всеми этими вариациями на разных процессорах. > да, было бы неплохо иметь референсную табличку. могу какие-нибудь тесты на имеющемся железе погонять. какие-то сравнительные тесты я гонял, выяснилось, что если взять gcc9 вместо идущего в коробке gcc-4.8, то производительность растет на 10% > > > не рассматривали slz, например ? > > ЕМНИП, мы на него смотрели когда-то давно. В целом идея > интересная, но качество сжатия оставляет желать. > сжатие уровня 1 и на zlib оставляет желать лучшего. > > -- > Maxim Dounin > http://mdounin.ru/ > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
Hello! On Mon, Mar 29, 2021 at 06:31:39PM +0500, Илья Шипицин wrote: > недавно проводил бенчмарки, zlib не самое быстрое > https://github.com/inikep/lzbench > > > при том, что на браузерной нагрузке (html + css + js) сжимается всё хорошо > и из обшей нагрузки gzip занимает процентов 80 от cpu. Тут важно держать себя в руках и не пытаться крутить уровень сжатия. Я неоднократно встречал ситуации, когда люди зачем-то ставили "gzip_comp_level 9;", а потом удивлялись потреблению процессора. Не говоря уже про регулярно встречающиеся попытки поставить 6. Если использовать zlib на уровне сжатия 1, то он вполне неплох в части потребления процессора, а если этого мало - стоит смотреть в сторону gzip_static и/или кэширования сжатых ответов. > glib-ng я не тестил, но взял на заметку. AFAIK, сейчас существует три вариации "на тему zlib", все пытаются ускорить работу на современных процесорах: zlib "от Intel", zlib "от Cloudflare", и вот темерь ещё zlib-ng. Было бы интересно посмотреть на какое-нибудь сравнение скорости между всеми этими вариациями на разных процессорах. > не рассматривали slz, например ? ЕМНИП, мы на него смотрели когда-то давно. В целом идея интересная, но качество сжатия оставляет желать. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
Hello! On Mon, Mar 29, 2021 at 10:04:52AM +0300, izor...@gmail.com wrote: > А патч, который расположен тут - > https://github.com/zlib-ng/patches/tree/master/nginx не подойдёт? Зависит от задачи. Если я правильно понимаю, основная задача, которую решает этот патч - затащить zlib-ng без использования уровня совместимости с zlib. Эта задача, вроде бы, не стоит примерно ни перед кем. Что касается размеров выделяемой памяти, которые и обсуждаются в этом треде, то они в этом патче неправильные. Хотя и вроде бы перекрывают потребности zlib-ng во всех возможных случаях, так что работать без ругани будет. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
недавно проводил бенчмарки, zlib не самое быстрое https://github.com/inikep/lzbench при том, что на браузерной нагрузке (html + css + js) сжимается всё хорошо и из обшей нагрузки gzip занимает процентов 80 от cpu. glib-ng я не тестил, но взял на заметку. не рассматривали slz, например ? пн, 29 мар. 2021 г. в 18:19, Maxim Dounin : > Hello! > > On Mon, Mar 29, 2021 at 01:00:21PM +0600, raven...@megaline.kg wrote: > > [...] > > > Будут-ли эти правки включены в какой-либо из релизов? > > Да, как только пройдут review. > > -- > Maxim Dounin > http://mdounin.ru/ > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
Hello! On Mon, Mar 29, 2021 at 01:00:21PM +0600, raven...@megaline.kg wrote: [...] > Будут-ли эти правки включены в какой-либо из релизов? Да, как только пройдут review. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
Это патч, позволяющий использовать zlib-ng собранную без совместимости с нативной zlib, т.е. исключается возможность выбора библиотеки. 29.03.2021 13:04, izor...@gmail.com пишет: Здравствуйте, Maxim. А патч, который расположен тут - https://github.com/zlib-ng/patches/tree/master/nginx не подойдёт? Вы писали 29 марта 2021 г., 5:09:14: Взглянул, урезал. ... ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
Здравствуйте, Maxim. А патч, который расположен тут - https://github.com/zlib-ng/patches/tree/master/nginx не подойдёт? Вы писали 29 марта 2021 г., 5:09:14: > Взглянул, урезал. > ... -- С уважением, Izorkin mailto:izor...@gmail.com ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
29.03.2021 08:09, Maxim Dounin пишет: Hello! On Fri, Mar 26, 2021 at 09:54:43PM +0300, Maxim Dounin wrote: Hello! On Fri, Mar 26, 2021 at 01:32:48PM +0300, Sergey Kandaurov wrote: On 26 Mar 2021, at 13:14, raven...@megaline.kg wrote: После смены нативной zlib-1.2.7 на zlib-ng 2.0.1 (собрана в режиме совместимости с zlib) лог буквально завален ошибками: "gzip filter failed to use preallocated memory: 65536 of 0 while sending to client" Хотя, насколько я припоминаю, обход ошибок такого рода упоминался в анонсе к какой-то из версий 1.13. Попробуйте патч, при сборке с zlib-ng: diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c --- a/src/http/modules/ngx_http_gzip_filter_module.c +++ b/src/http/modules/ngx_http_gzip_filter_module.c @@ -516,7 +516,7 @@ ngx_http_gzip_filter_memory(ngx_http_req */ if (conf->level == 1) { -wbits = ngx_max(wbits, 13); +wbits = ngx_max(wbits, 15); Насколько я вижу, в zlib-ng используюся те же 13, что и в варианте от Intel: https://github.com/jtkukunas/zlib/blob/master/deflate.c#L296 https://github.com/zlib-ng/zlib-ng/blob/develop/deflate.c#L304 А вот аллокация под hash стала 2x64k. (В интеловском варианте, кстати, за последнее время и hash подужался, и windowBits в 13 ставится только для значений, больших 13. Возможно, на него стоит ещё разок взглянуть и урезать осетра.) Взглянул, урезал. # HG changeset patch # User Maxim Dounin # Date 1616983280 -10800 # Mon Mar 29 05:01:20 2021 +0300 # Node ID d82e9d8285e2552cafcea2033069cdd31f4a5d32 # Parent 1ebd78df4ce7262967c5dadce7bac454c4086896 Gzip: support for zlib-ng. diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c --- a/src/http/modules/ngx_http_gzip_filter_module.c +++ b/src/http/modules/ngx_http_gzip_filter_module.c @@ -57,6 +57,7 @@ typedef struct { unsigned nomem:1; unsigned buffering:1; unsigned intel:1; +unsigned zlib_ng:1; size_t zin; size_t zout; @@ -214,6 +215,7 @@ static ngx_http_output_header_filter_pt static ngx_http_output_body_filter_ptngx_http_next_body_filter; static ngx_uint_t ngx_http_gzip_assume_intel; +static ngx_uint_t ngx_http_gzip_assume_zlib_ng; static ngx_int_t @@ -506,7 +508,7 @@ ngx_http_gzip_filter_memory(ngx_http_req if (!ngx_http_gzip_assume_intel) { ctx->allocated = 8192 + (1 << (wbits + 2)) + (1 << (memlevel + 9)); -} else { +} else if (!ngx_http_gzip_assume_zlib_ng) { /* * A zlib variant from Intel, https://github.com/jtkukunas/zlib. * It can force window bits to 13 for fast compression level, @@ -523,6 +525,20 @@ ngx_http_gzip_filter_memory(ngx_http_req + (1 << (ngx_max(memlevel, 8) + 8)) + (1 << (memlevel + 8)); ctx->intel = 1; + +} else { +/* + * Another zlib variant, https://github.com/zlib-ng/zlib-ng. + * Similar to Intel's variant, though uses 128K hash. + */ + +if (conf->level == 1) { +wbits = ngx_max(wbits, 13); +} + +ctx->allocated = 8192 + 16 + (1 << (wbits + 2)) + + 131072 + (1 << (memlevel + 8)); +ctx->zlib_ng = 1; } } @@ -945,11 +961,14 @@ ngx_http_gzip_filter_alloc(void *opaque, return p; } -if (ctx->intel) { +if (ctx->zlib_ng) { ngx_log_error(NGX_LOG_ALERT, ctx->request->connection->log, 0, "gzip filter failed to use preallocated memory: " "%ud of %ui", items * size, ctx->allocated); +} else if (ctx->intel) { +ngx_http_gzip_assume_zlib_ng = 1; + } else { ngx_http_gzip_assume_intel = 1; } # HG changeset patch # User Maxim Dounin # Date 1616983654 -10800 # Mon Mar 29 05:07:34 2021 +0300 # Node ID e70b352ddb2ed1e92997408b3926e64aa55b4a14 # Parent d82e9d8285e2552cafcea2033069cdd31f4a5d32 Gzip: updated handling of zlib variant from Intel. In current versions (all versions based on zlib 1.2.11, at least since 2018) it no longer uses 64K hash and does not force window bits to 13 if it is less than 13. That is, it needs just 16 bytes more memory than normal zlib, so these bytes are simply added to the normal size calculation. diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c --- a/src/http/modules/ngx_http_gzip_filter_module.c +++ b/src/http/modules/ngx_http_gzip_filter_module.c @@ -56,7 +56,6 @@ typedef struct { unsigned done:1; unsigned nomem:1; unsigned buffering:1; -unsigned intel:1; unsigned zlib_ng:1; size_t zin; @@ -214,7
Re: Ошибки при использовании zlib-ng
Hello! On Fri, Mar 26, 2021 at 09:54:43PM +0300, Maxim Dounin wrote: > Hello! > > On Fri, Mar 26, 2021 at 01:32:48PM +0300, Sergey Kandaurov wrote: > > > > On 26 Mar 2021, at 13:14, raven...@megaline.kg wrote: > > > > > > После смены нативной zlib-1.2.7 на zlib-ng 2.0.1 (собрана в режиме > > > совместимости с zlib) лог буквально завален ошибками: > > > > > > "gzip filter failed to use preallocated memory: 65536 of 0 while sending > > > to client" > > > > > > Хотя, насколько я припоминаю, обход ошибок такого рода упоминался в > > > анонсе к какой-то из версий 1.13. > > > > > > > Попробуйте патч, при сборке с zlib-ng: > > > > diff --git a/src/http/modules/ngx_http_gzip_filter_module.c > > b/src/http/modules/ngx_http_gzip_filter_module.c > > --- a/src/http/modules/ngx_http_gzip_filter_module.c > > +++ b/src/http/modules/ngx_http_gzip_filter_module.c > > @@ -516,7 +516,7 @@ ngx_http_gzip_filter_memory(ngx_http_req > > */ > > > > if (conf->level == 1) { > > -wbits = ngx_max(wbits, 13); > > +wbits = ngx_max(wbits, 15); > > Насколько я вижу, в zlib-ng используюся те же 13, что и в варианте > от Intel: > > https://github.com/jtkukunas/zlib/blob/master/deflate.c#L296 > https://github.com/zlib-ng/zlib-ng/blob/develop/deflate.c#L304 > > А вот аллокация под hash стала 2x64k. > > (В интеловском варианте, кстати, за последнее время и hash > подужался, и windowBits в 13 ставится только для значений, больших > 13. Возможно, на него стоит ещё разок взглянуть и урезать осетра.) Взглянул, урезал. # HG changeset patch # User Maxim Dounin # Date 1616983280 -10800 # Mon Mar 29 05:01:20 2021 +0300 # Node ID d82e9d8285e2552cafcea2033069cdd31f4a5d32 # Parent 1ebd78df4ce7262967c5dadce7bac454c4086896 Gzip: support for zlib-ng. diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c --- a/src/http/modules/ngx_http_gzip_filter_module.c +++ b/src/http/modules/ngx_http_gzip_filter_module.c @@ -57,6 +57,7 @@ typedef struct { unsigned nomem:1; unsigned buffering:1; unsigned intel:1; +unsigned zlib_ng:1; size_t zin; size_t zout; @@ -214,6 +215,7 @@ static ngx_http_output_header_filter_pt static ngx_http_output_body_filter_ptngx_http_next_body_filter; static ngx_uint_t ngx_http_gzip_assume_intel; +static ngx_uint_t ngx_http_gzip_assume_zlib_ng; static ngx_int_t @@ -506,7 +508,7 @@ ngx_http_gzip_filter_memory(ngx_http_req if (!ngx_http_gzip_assume_intel) { ctx->allocated = 8192 + (1 << (wbits + 2)) + (1 << (memlevel + 9)); -} else { +} else if (!ngx_http_gzip_assume_zlib_ng) { /* * A zlib variant from Intel, https://github.com/jtkukunas/zlib. * It can force window bits to 13 for fast compression level, @@ -523,6 +525,20 @@ ngx_http_gzip_filter_memory(ngx_http_req + (1 << (ngx_max(memlevel, 8) + 8)) + (1 << (memlevel + 8)); ctx->intel = 1; + +} else { +/* + * Another zlib variant, https://github.com/zlib-ng/zlib-ng. + * Similar to Intel's variant, though uses 128K hash. + */ + +if (conf->level == 1) { +wbits = ngx_max(wbits, 13); +} + +ctx->allocated = 8192 + 16 + (1 << (wbits + 2)) + + 131072 + (1 << (memlevel + 8)); +ctx->zlib_ng = 1; } } @@ -945,11 +961,14 @@ ngx_http_gzip_filter_alloc(void *opaque, return p; } -if (ctx->intel) { +if (ctx->zlib_ng) { ngx_log_error(NGX_LOG_ALERT, ctx->request->connection->log, 0, "gzip filter failed to use preallocated memory: " "%ud of %ui", items * size, ctx->allocated); +} else if (ctx->intel) { +ngx_http_gzip_assume_zlib_ng = 1; + } else { ngx_http_gzip_assume_intel = 1; } # HG changeset patch # User Maxim Dounin # Date 1616983654 -10800 # Mon Mar 29 05:07:34 2021 +0300 # Node ID e70b352ddb2ed1e92997408b3926e64aa55b4a14 # Parent d82e9d8285e2552cafcea2033069cdd31f4a5d32 Gzip: updated handling of zlib variant from Intel. In current versions (all versions based on zlib 1.2.11, at least since 2018) it no longer uses 64K hash and does not force window bits to 13 if it is less than 13. That is, it needs just 16 bytes more memory than normal zlib, so these bytes are simply added to the normal size calculation. diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c --- a/src/http/modules/ngx_http_gzip_filter_module.c +++ b/src/http/modules/ngx_http_gzip_filter_module.c @@ -56,7 +56,6 @@ typedef struct { unsigned done:1; unsigned nomem:1; unsigned buffering:1; -unsigned intel:1; unsigned
Re: Ошибки при использовании zlib-ng
Hello! On Fri, Mar 26, 2021 at 01:32:48PM +0300, Sergey Kandaurov wrote: > > On 26 Mar 2021, at 13:14, raven...@megaline.kg wrote: > > > > После смены нативной zlib-1.2.7 на zlib-ng 2.0.1 (собрана в режиме > > совместимости с zlib) лог буквально завален ошибками: > > > > "gzip filter failed to use preallocated memory: 65536 of 0 while sending to > > client" > > > > Хотя, насколько я припоминаю, обход ошибок такого рода упоминался в анонсе > > к какой-то из версий 1.13. > > > > Попробуйте патч, при сборке с zlib-ng: > > diff --git a/src/http/modules/ngx_http_gzip_filter_module.c > b/src/http/modules/ngx_http_gzip_filter_module.c > --- a/src/http/modules/ngx_http_gzip_filter_module.c > +++ b/src/http/modules/ngx_http_gzip_filter_module.c > @@ -516,7 +516,7 @@ ngx_http_gzip_filter_memory(ngx_http_req > */ > > if (conf->level == 1) { > -wbits = ngx_max(wbits, 13); > +wbits = ngx_max(wbits, 15); Насколько я вижу, в zlib-ng используюся те же 13, что и в варианте от Intel: https://github.com/jtkukunas/zlib/blob/master/deflate.c#L296 https://github.com/zlib-ng/zlib-ng/blob/develop/deflate.c#L304 А вот аллокация под hash стала 2x64k. (В интеловском варианте, кстати, за последнее время и hash подужался, и windowBits в 13 ставится только для значений, больших 13. Возможно, на него стоит ещё разок взглянуть и урезать осетра.) # HG changeset patch # User Maxim Dounin # Date 1616784418 -10800 # Fri Mar 26 21:46:58 2021 +0300 # Node ID cc67b7253d6c19fa172c8412111568398a5e7b5b # Parent 2ed5d03c2d902efef969e24be6bb4d3f98a49efa Gzip: support for zlib-ng. diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c --- a/src/http/modules/ngx_http_gzip_filter_module.c +++ b/src/http/modules/ngx_http_gzip_filter_module.c @@ -57,6 +57,7 @@ typedef struct { unsigned nomem:1; unsigned buffering:1; unsigned intel:1; +unsigned zlib_ng:1; size_t zin; size_t zout; @@ -214,6 +215,7 @@ static ngx_http_output_header_filter_pt static ngx_http_output_body_filter_ptngx_http_next_body_filter; static ngx_uint_t ngx_http_gzip_assume_intel; +static ngx_uint_t ngx_http_gzip_assume_zlib_ng; static ngx_int_t @@ -506,7 +508,7 @@ ngx_http_gzip_filter_memory(ngx_http_req if (!ngx_http_gzip_assume_intel) { ctx->allocated = 8192 + (1 << (wbits + 2)) + (1 << (memlevel + 9)); -} else { +} else if (!ngx_http_gzip_assume_zlib_ng) { /* * A zlib variant from Intel, https://github.com/jtkukunas/zlib. * It can force window bits to 13 for fast compression level, @@ -523,6 +525,20 @@ ngx_http_gzip_filter_memory(ngx_http_req + (1 << (ngx_max(memlevel, 8) + 8)) + (1 << (memlevel + 8)); ctx->intel = 1; + +} else { +/* + * Another zlib variant, https://github.com/zlib-ng/zlib-ng. + * Similar to Intel's variant, though uses 128K hash. + */ + +if (conf->level == 1) { +wbits = ngx_max(wbits, 13); +} + +ctx->allocated = 8192 + 16 + (1 << (wbits + 2)) + + (1 << 17) + (1 << (memlevel + 8)); +ctx->zlib_ng = 1; } } @@ -945,11 +961,14 @@ ngx_http_gzip_filter_alloc(void *opaque, return p; } -if (ctx->intel) { +if (ctx->zlib_ng) { ngx_log_error(NGX_LOG_ALERT, ctx->request->connection->log, 0, "gzip filter failed to use preallocated memory: " "%ud of %ui", items * size, ctx->allocated); +} else if (ctx->intel) { +ngx_http_gzip_assume_zlib_ng = 1; + } else { ngx_http_gzip_assume_intel = 1; } -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
Hello! On Fri, Mar 26, 2021 at 04:37:07PM +0600, raven...@megaline.kg wrote: > Т.е. использовать нативную сборку nginx не получится? Использовать можно как есть, если сами по себе алерты не смущают. Эти alert'ы не фатальны и говорят лишь о том, что nginx был вынужден аллоцировать дополнительную память, хотя от zlib'а это не ожидалось (и требования по памяти задокументированы), т.е. zlib ведёт себя некорректно. В вашем случае некорректное поведение ожидаемо. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
Т.е. использовать нативную сборку nginx не получится? 26.03.2021 16:32, Sergey Kandaurov пишет: On 26 Mar 2021, at 13:14, raven...@megaline.kg wrote: После смены нативной zlib-1.2.7 на zlib-ng 2.0.1 (собрана в режиме совместимости с zlib) лог буквально завален ошибками: "gzip filter failed to use preallocated memory: 65536 of 0 while sending to client" Хотя, насколько я припоминаю, обход ошибок такого рода упоминался в анонсе к какой-то из версий 1.13. Попробуйте патч, при сборке с zlib-ng: diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c --- a/src/http/modules/ngx_http_gzip_filter_module.c +++ b/src/http/modules/ngx_http_gzip_filter_module.c @@ -516,7 +516,7 @@ ngx_http_gzip_filter_memory(ngx_http_req */ if (conf->level == 1) { -wbits = ngx_max(wbits, 13); +wbits = ngx_max(wbits, 15); } ctx->allocated = 8192 + 16 + (1 << (wbits + 2)) ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Ошибки при использовании zlib-ng
> On 26 Mar 2021, at 13:14, raven...@megaline.kg wrote: > > После смены нативной zlib-1.2.7 на zlib-ng 2.0.1 (собрана в режиме > совместимости с zlib) лог буквально завален ошибками: > > "gzip filter failed to use preallocated memory: 65536 of 0 while sending to > client" > > Хотя, насколько я припоминаю, обход ошибок такого рода упоминался в анонсе к > какой-то из версий 1.13. > Попробуйте патч, при сборке с zlib-ng: diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c --- a/src/http/modules/ngx_http_gzip_filter_module.c +++ b/src/http/modules/ngx_http_gzip_filter_module.c @@ -516,7 +516,7 @@ ngx_http_gzip_filter_memory(ngx_http_req */ if (conf->level == 1) { -wbits = ngx_max(wbits, 13); +wbits = ngx_max(wbits, 15); } ctx->allocated = 8192 + 16 + (1 << (wbits + 2)) -- Sergey Kandaurov ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Ошибки при использовании zlib-ng
После смены нативной zlib-1.2.7 на zlib-ng 2.0.1 (собрана в режиме совместимости с zlib) лог буквально завален ошибками: "gzip filter failed to use preallocated memory: 65536 of 0 while sending to client" Хотя, насколько я припоминаю, обход ошибок такого рода упоминался в анонсе к какой-то из версий 1.13. ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru