Re: Ошибки при использовании zlib-ng

2021-04-01 Пенетрантность Maxim Dounin
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

2021-04-01 Пенетрантность izorkin
Здравствуйте, 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

2021-03-31 Пенетрантность raven...@megaline.kg
В одном из предыдущих сообщений есть ссылка на патч, подключающий 
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

2021-03-31 Пенетрантность izorkin
Здравствуйте, 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

2021-03-29 Пенетрантность Илья Шипицин
оказывается, 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

2021-03-29 Пенетрантность Илья Шипицин
пн, 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

2021-03-29 Пенетрантность 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

Re: Ошибки при использовании zlib-ng

2021-03-29 Пенетрантность Илья Шипицин
пн, 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

2021-03-29 Пенетрантность 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 и/или кэширования сжатых 
ответов.

> 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

2021-03-29 Пенетрантность Maxim Dounin
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

2021-03-29 Пенетрантность Илья Шипицин
недавно проводил бенчмарки, 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

2021-03-29 Пенетрантность 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

Re: Ошибки при использовании zlib-ng

2021-03-29 Пенетрантность raven...@megaline.kg
Это патч, позволяющий использовать 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

2021-03-29 Пенетрантность izorkin
Здравствуйте, 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

2021-03-29 Пенетрантность raven...@megaline.kg

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

2021-03-28 Пенетрантность 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  

Re: Ошибки при использовании zlib-ng

2021-03-26 Пенетрантность Maxim Dounin
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

2021-03-26 Пенетрантность Maxim Dounin
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

2021-03-26 Пенетрантность raven...@megaline.kg

Т.е. использовать нативную сборку 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

2021-03-26 Пенетрантность 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))


-- 
Sergey Kandaurov

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ошибки при использовании zlib-ng

2021-03-26 Пенетрантность raven...@megaline.kg
После смены нативной 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