Welcome! Log In Create A New Profile

Advanced

Re: gzip filter failed to use preallocated memory

Maxim Dounin
November 10, 2017 01:26PM
Hello!

On Fri, Nov 10, 2017 at 09:35:02AM -0500, S.A.N wrote:

> > Есть смысл разобраться, что у вас используется вместо zlib,
>
> Из коробки в ОС установлена пропатченная Intel библиотека zlib
> https://software.intel.com/en-us/articles/how-to-use-zlib-with-intel-ipp-opertimization
>
> Вот что у нас выдает ldd
> ldd /usr/lib64/libz.so
> linux-vdso.so.1 (0x00007ffed8d7c000)
> libc.so.6 => /usr/lib64/haswell/libc.so.6 (0x00007fe455d53000)
> /usr/lib64/ld-linux-x86-64.so.2 (0x00007fe455f8b000)
>
>
> > как это что-то детектировать и аллоцировать под него память, и
> > прислать патч.
>
> Мне сложно сказать как правильно детектировать эту библиотеку, и патч
> написать я тоже не смогу (я не Си разработчик) но могу тестировать.
> Intel, сделали хорошую работу, их gzip работает почти в 2 раза быстрей, не
> хочется возвращаться на стандартную zlib.

Я не поленился и таки скачал то, что дают по ссылке выше, и в
патче вижу такое:

--- zlib-1.2.8.orig/zlib.h 2017-05-29 16:04:42.703705000 +0300
+++ zlib-1.2.8/zlib.h 2017-05-29 16:09:45.779049000 +0300
@@ -187,6 +187,9 @@
#define Z_BEST_SPEED 1
#define Z_BEST_COMPRESSION 9
#define Z_DEFAULT_COMPRESSION (-1)
+#if defined(WITH_IPP)
+#define Z_IPP_FAST_COMPRESSION (-2)
+#endif
/* compression levels */

#define Z_FILTERED 1

То есть определяется новая константа, Z_IPP_FAST_COMPRESSION.
Если это действительно так, то можно попробовать что-нибудь
простое, вроде:

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
@@ -1025,9 +1025,11 @@ ngx_http_gzip_filter_alloc(void *opaque,
return p;
}

+#ifndef Z_IPP_FAST_COMPRESSION
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);
+#endif

p = ngx_palloc(ctx->request->pool, items * size);


Я, впрочем, подозреваю, что на самом деле там не это, а то, что
лежит по адресу https://github.com/jtkukunas/zlib. Название и
содержимое пакета как бы намекает:

https://download.clearlinux.org/current/source/SRPMS/zlib-1.2.8.jtkv4-40.src.rpm

Я когда-то смотрел на это - и пришёл к выводу, что сделать с этим
ничего разумного не получается, никаких способов узнать о наличии
модификаций ребята не оставили. При этом внесённые изменения
очевидно противоречат документированным в zlib требованиям к
памяти. Так что я решил отложить дальнейшие разбирательства до
того момента, когда ребята одумаются и как-то приведут в порядок
свою поделку.

Но, похоже, лучше с тех пор не стало.

> Возможно будет достаточно если Nginx изменит уровень ошибки, сейчас уровень
> этой ошибки Alert, но это не правильно, потому что Nginx не падает и все
> работает, я думаю правильно выдавать Notice, тогда можно не логировать
> Notice уведомления и все будет норм?

Уровень логгирования alert означает ситуацию, которая не должна
возникать при нормальной работе, и означает ошибку где-то. В
данном случае мы знаем причину - библиотека от Интел нарушает
документированный интерфейс zlib в части требований к памяти - и
этого достаточно для того, чтобы игнорировать и/или понизить
уровень ошибки до менее значительного в случае использования
этой библиотеки. Однако я бы предпочёл не трогать уровень
логгирования для всех остальных случаев.

--
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

gzip filter failed to use preallocated memory

S.A.N October 18, 2017 06:28PM

Re: gzip filter failed to use preallocated memory

S.A.N November 10, 2017 06:03AM

Re: gzip filter failed to use preallocated memory

Maxim Dounin November 10, 2017 06:34AM

Re: gzip filter failed to use preallocated memory

S.A.N November 10, 2017 09:35AM

Re: gzip filter failed to use preallocated memory

Maxim Dounin November 10, 2017 01:26PM

Re: gzip filter failed to use preallocated memory

S.A.N November 11, 2017 08:36AM

Re: gzip filter failed to use preallocated memory

Maxim Dounin November 14, 2017 11:42PM

Re: gzip filter failed to use preallocated memory

S.A.N November 15, 2017 10:58AM

Re: gzip filter failed to use preallocated memory

Maxim Dounin November 15, 2017 02:18PM

Re: gzip filter failed to use preallocated memory

S.A.N November 21, 2017 10:33AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 226
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready