netwind

Рейтинг
419
Регистрация
06.05.2007

semenov, картинку вижу. а где слова ?

myhand:

Ну а зачем nginx нужно больше для активных соединений ? Все остальное это буферы. Их размер скромный и конечный.

Все-таки - поболее будет, чем для активных, не?

Разделяемая память? Этим, мягко говоря, пользуются. MPM очень активно делают независимыми и привязка модулей к конкретному - не приветствуется.

тут вообще ничего не понял.

Просто обычно под "стандартным" - подразумевается что-то распространенное, популярная модель. Назвать таковой подход nginx - покуда сложно. Сколько там? - 8% на _нагруженных_ сайтах. А остальное - нешто IIS?

хорошо, с терминологией определились.

При каком? Что-то мне подсказывает, что в роли бакенда эта модель покуда редкость. Это случайно?

Обсуждение началось с вашего заявления о равноценности mpm_event и nginx на фронтенде. Только это утверждение я оспариваю.

Но может и попробую как-нибудь - в тестах смотрится вполне нормально.

ну вот и подождем.

semenov, это что?

если тебе нужна маска для проверки твоей бесполезной идеи - нарисуй сам надпись auto.ru . совмести с прозрачностью 50% с типичным фото (должны быть разные области от темных до светлых)

а потом в фотошопе попробуй найти последовательность действий, которая даст исходное изображение.

Если получится в фотошопе без применения ручной ретуши и копирования, то значит и закодировать такое плевое дело.

Наложение знака есть НЕОБРАТИМОЕ попиксельное смешение двух картинок.

Все эти рассуждения верны разве что при наложении лого с прозрачностью 50% на черный фон. Но там обычное фото, а не черный фон.

если пиксель белый (255,255,255) то при наложении белого лого, он остается белым (255,255,255) и непонятно как произвести обратное преобразование. Сколько не "вычитай" будет только темнее и хуже. Белый - это предельно плохой случай, черный - предельно хороший для этого алгоритма с вычитанием яркости. Все остальные цвета - тоже плохие в разной степени.

myhand:
Ее можно сравнить только с тем, как обрабатываются неактивные keep-alive в апаче.

Ну а зачем nginx нужно больше для активных соединений ? Все остальное это буферы. Их размер скромный и конечный. А вот апач в данной ситуации понаплодит переменных во всех своих модулях просто потому что модули написаны для традиционной модели.

myhand:
Стандартная модель - вовсе не эта

Тут "стандартный" не в смысле ограниченности некоторых программистов стандартами, а в том смысле, что эта модель не является изобретением Сысоева лично. Просто одна из известных моделей обработки, особенно выгодная при обслуживании большого числа сетевых соединений.

Более того, переключение контекстов происходит каждый раз и при вызове фунций ОС.
Не всех/не всегда, ЕМНИП.

но при операциях с сокетам и файлами нужно копаться в структурах данных ядра, так что происходит.

Да вы вон лучше какому-нибудь любимому клиенту фронтенд c nginx на апач смените и проверите на практике. Наверняка, такие найдутся.

Желательно проект побольше. С несколькими физическими бекендами.

myhand:
Сокращаются _от чего_? Напоминаю, в апаче тут тоже только один поток.

нет речь шла о общем расходе памяти. все потоки apache против всех потоков nginx (из которых спокойно можно оставить один ). активные потоки имеют свои локальные переменные и их в сервере общего назначения много.

Переключение контекста. "Созданием" потоков апач занимается только тогда, когда сконфигурирован неправильно, или нагрузка резко подскочила.

прикладной программист на своем уровне абстракции может и не понять о чем речь. речь о переключении контекстов процессора. сохранение регистров cpu и прочих состояний потока, для того чтобы cpu мог оставить один поток и обрабатывать другой. при этом при переключении локальные данные потока начинают вылетать из кеша процессора.

Если потоков много, а ядер процессоров мало, переключение контекстов обязательно возникает. Чем больше потоков тем более выражены негативные эффекты. Отсюда и советы сделать число воркеров nginx равное числу ядер.

Более того, переключение контекстов происходит каждый раз и при вызове фунций ОС. Эффективные приложения пытаются минимизировать и число вызовов ОС тоже. Например, пытаются запихнуть в один вызов максимально много данных. Тут очень к месту приходятся специальные вызовы ОС : select, epoll, фильтры httpready и т.д.

В апаче, как в сервере общего назначения для прикладных программистов, этого всего нет и не будет.

А в nginx, в свою очередь, никогда не возникнет mod_php.

Есть ли статьи, публикации по внутренней работе nginx? Или вы все почерпнули из исходный кодов?

Это все стандартная модель работы серверов описанная в литературе. Не обязательно читать код nginx, чтобы понимать как и почему он эффективно работает. Так же работают lighttpd, squid, varnish и менее известные программы.


Если несколько соединений будет с одним и тем же состоянием, то nginx их будкт обрабатывать в последовательном порядке? Правильно ли я понимаю, что в случае с большим io_wait зависает вся "цепочка" таких соединений?

Да, в последовательном порядке. Однако, благодаря использованию неблокируемых функций ввода-вывода даже при больших io_wait потоки nginx не тормозятся.

И это не то, что называется AIO в nginx. Использование AIO еще больше сокращает необходимость в системных вызовах.

Использование sendfile вообще исключает переключение контекстов во время отправки файла по сети, так как ядро полностью берет на себя все связанные с отправкой функции.

Ms-Dred, а почему именно screen ?

можно просто зациклить в bash. goto 1 и все.

теоретически при очень большой нагрузке oom-killer может остановить даже bash. тогда еще можно в /etc/inittab вписать скриптик

Ага... Т.е. все-таки - дело-то не в памяти.

проще прикинуть хотя бы расходы памяти. они сокращаются до вышеназванных 2.5 мб на 10000 + фиксированной объем на одного worker. И больше никаких расходов нет.

Посчитать эффект от принципиального несоздания потоков по сравнению с их созданием и поддержкой сложно. Но он точно есть.

В промежутках между состояниями keep-alive, фронтенд не может быстро отправить ответ клиенту и освободиться. Все время отправки файла поток в апаче занимает и память и ресурсы ОС. Потоков много и CPU постоянно занимается переключением контекстов. mpm_event устраняет только лишь фазу keep-alive ожидания потоком клиента.

В nginx в принципе такого не возникает. Если конечному автомату нечего делать в данном соединении, он обрабатывает следующее не переключая контекст процесса.

Andreyka:
vm.swappiness: При меньшем значении ядро вытесняет кеш приложениями. При большем значении вытесняет приложение в своп и наращивает кеши. Соотвественно под эту задачу надо ставить максимум (100).

vm.vfs_cache_pressure: чем меньше значение, тем больше хранится информации в кеше об структуре файловой системы вместо содержимого оных файлов. Тут надо подбирать исходя из того, что собственно надо кешировать - множество мелких файлов или несколько больших. Кроме того в nginx можно управлять кешированием дескрипторов через open_file_cache. Ну и сам nginx настроить под файлы - aio, число воркеров по числу камней.

полна фигня. эти параметры в данном случае ничем не помогут тс ввиду малозначительности влияния описанных процессов на кеширование содержимого файлов. Объем памяти занимаемый приложениями и структурой ФС слишком маленький.

другие параметры есть?

хотелось бы повысить эффективность кеша, о чем в вопросе и было написано, а не изменить его размер на 1%.

myhand:
Т.е. не знаете?

нет. я свою часть нашел. теперь вы найдите.

для меня сравнительная эффективность модели сервера "конечный-автомат без потоков" как в nginx, при обслуживании многих клиентов очевидна.

Всего: 6293