Senfile + Threads + mincore in Linux?

Gelun, Artem a at gelun.ru
Sun Jun 28 19:10:24 UTC 2015


Добрый день всем.

Возможно, идея/вопрос не новы, но:

Сейчас (с версии 1.7.11, если не ошибаюсь) sendfile может быть как
блокирующим, так и неблокирующим *основной поток*, вызываясь в отдельном
треде.

При этом пул тредов фиксирован и если, например, я выделил 10 тредов,
которые заняты чтением с диска (заблокированы), то другие "читатели" будут
ожидать их даже если данные уже находятся в page cache, что не рационально,
имхо. Т.е. мы можем иметь нагрузку, при которой 90% трафика будет
отдаваться из PageCache, 10% с диска и эти 10% могут заблокировать
кэшированные, "популярные" ответы.

Вопрос: можно ли добавить в эту логику вызов mincore (в linux) для того,
чтобы определить сколько данных есть в page cache, отправке этого объема
данных и, если они отправились (возврат == NGX_OK) вызывать остаток
sendfile в треде? Есть ли какие-то потенциальные проблемы за пределами
ngx_linux_sendfile_chain.c строк 182-203 внутри #if (NGX_THREADS) ?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20150628/0e4ae3f3/attachment.html>


Подробная информация о списке рассылки nginx-ru