@phpclubru

Страница 369 из 956
Adel
02.11.2017
13:16:48
мне не нравится пхп тем, что он не статический :)

Dmitry
02.11.2017
13:16:51
ну... сколько нынче максимум на сервер... около 200 ядер?

Vladislav
02.11.2017
13:17:08
@miksir 8 ядер было у сервака, где снимали бенч.

Adel
02.11.2017
13:17:16
поэтмоу я последнее время изучаю ява-фреймворки..

Google
Dmitry
02.11.2017
13:17:44
8 ядер? "не верю" ;)

Vladislav
02.11.2017
13:17:57
@miksir 8 ядер.

Dmitry
02.11.2017
13:19:05
максимум вореров 20... хотя и это много... 100к запросов на воркер... 0.01мс на запрос?

или там был мультиплекс демон... хм... все-равно много

Maksim
02.11.2017
13:19:58
откуда взяться воркерам ещё)

Dmitry
02.11.2017
13:20:16
в смысле?

Maksim
02.11.2017
13:21:19
в смысле кто их создаёт эти самые воркеры

Dmitry
02.11.2017
13:21:50
а, ну я обычную схему fastcgi сервера рассматривал

Maksim
02.11.2017
13:22:05
не, нету её там

там что-то вроде реактовского tcp сервера, как я понимаю

Dmitry
02.11.2017
13:22:26
откуда ты знаешь, что есть в Владислава?

Maksim
02.11.2017
13:22:40
читаю что он пишет)

Dmitry
02.11.2017
13:23:26
а воркеры ну как откуда, треды ;)

Google
Dmitry
02.11.2017
13:23:40
или reuse

Vladislav
02.11.2017
13:23:50
Треды + libEvent + Ev.h (системный)

+ тюнинг ядра.

в потоках stream_select

каждый селект при этом яростно смотрит события

Dmitry
02.11.2017
13:24:47
но треды в линуксе почти что процессы... т.е. все-равно их много не наплодишь, на ядра оглядываться нужно

Vladislav
02.11.2017
13:25:40
правильно. Потому у меня порядка 24-28 воркеров. и при выходе на пиковую пропускную способность процы не уходят далее 80-90%

т.е. не впадает во фризы

Pavel
02.11.2017
13:26:10
в потоках stream_select
Это как так? Звучит как костыль

Dmitry
02.11.2017
13:26:25
каждый воркер отрабатывает пачку соединений?

Vladislav
02.11.2017
13:26:34
это не костыль. Это имитация принципа потокового распределения в apache kafka

Pavel
02.11.2017
13:26:36
libevent работает противоположно stream_select

Dmitry
02.11.2017
13:27:00
libevent работает противоположно stream_select
почему? так же работает, только лучше ;)

Vladislav
02.11.2017
13:27:44
@chebotarevp они делают немного разные вещи. Я событиями сообщаю, что надо положить в тред. А селект уже разбирает что и кому обработать. Мне же надо как то дергать воркеры, в которые этот самый селект и происходит

Pavel
02.11.2017
13:28:31
Разница в направлении воркфлоу. при stream_select пользовательский код переьирает набор сокетов и каждый опрашивает, не случилось ли там события. А в libevent пользовательских код только регистрирует обработчики, и ядро само доставляет события на сокетах на них. Получается быстрее, и перебирать ничего не надо.

Vladislav
02.11.2017
13:29:14
Лан, расскрою секрет. Логика работы написана на 7.2. Но обвязка сервера написана на Zephir Lang и позволяет мне при обработке не пересобирать байт-код и производить максимум работы в оперативке. Плюс у нас база данных реплицируется в inMemoryTables.

ну и прямой доступ к memalloc

Dmitry
02.11.2017
13:29:46
там в другом разница... в случае селекта тебе после кажого события нужно пачку сокетов сново в ядро отправлять... в этом огромный оверхед

Vladislav
02.11.2017
13:29:46
(malloc)

Google
Dmitry
02.11.2017
13:30:18
а в случае еполла ты один раз отправляешь пачку, и потом работаешь как со списком хранящимся в ядре

Vladislav
02.11.2017
13:30:35
@miksir огромный оверхед в данном случае компенсируется тем, что я могу из зефира делать напрямую time_wait соединение =)

Dmitry
02.11.2017
13:32:34
Ты написал ровно то же что и я только другими словами :)
ну может я не понял... но код не "опрашивает" все сокеты, он засыпает на таймаут, но если событие на сокете произошло - то код просыпается раньше таймаута

Vladislav
02.11.2017
13:33:31
@miksir Я так извращаюсь как раз потому, что упарываюсь по ерлангу. но мне оч нравится пыха.

Pavel
02.11.2017
13:33:37
Формирует множество дескрипторов, потом над этим множествовм вызываешь сисколл select(). Он по ним и бегает.

Dmitry
02.11.2017
13:34:04
Ну вызов же неблокирующий
блокирующий ;) в неблокирующем смысла нет ;)

Pavel
02.11.2017
13:34:41
блокирующий ;) в неблокирующем смысла нет ;)
А вот и есть. В хайлоадкапе все чемпионы только так и спаслись

Dmitry
02.11.2017
13:34:44
если у тебя будет неблокирующий селект, т.е. с таймаутом в 0 - то у тебя просто ЦПУ будет жраться в цикле

Pavel
02.11.2017
13:34:59
Да

Pavel
02.11.2017
13:35:09
Но при этом скорость ответа возрастает ))

Dmitry
02.11.2017
13:35:29
гм... за счет чего?

Pavel
02.11.2017
13:36:20
Хотя, это как раз в epoll они выставляли 0 таймаут

Dmitry
02.11.2017
13:36:46
тут, возможно, другая проблема - работа с файлами...

насколько я помню, даже то подобие aio, что есть в линукс - не может быть загнано в epoll

Pavel
02.11.2017
13:41:11
Забыл как эта опция называется, но в linux есть она специально, когда нулевой таймаут, жрется процессор но время ответа на сокет минимально.

Dmitry
02.11.2017
13:42:19
есть, да... вопрос в том - с какими целями

Google
Dmitry
02.11.2017
13:43:57
как бы while(1) { epoll_wait(,,,-1); ... } ничем не хуже, а много лучше while(1) { epoll_wait(,,,0); ... }

но только если у нас нет операций, которые не попадают в еполл...

Adel
02.11.2017
13:45:57
последняя сотня сообщений явно не про пхп :)

Dmitry
02.11.2017
13:46:15
а это и не про пхп чат ;)

Pavel
02.11.2017
14:37:45
как бы while(1) { epoll_wait(,,,-1); ... } ничем не хуже, а много лучше while(1) { epoll_wait(,,,0); ... }
Лучше в мирное время, хуже в военное. Когда синус может достигать двух.

У заснувшего epoll тратится немного времени на разгон электронов в процессоре, когда приходит событие и будит его.

Admin
ERROR: S client not available

Dmitry
02.11.2017
15:05:35
нолики растут ;)

под нагрузкой 0.018, без нагрузки 0.105? ничего не напутал? ;)

Vladislav
02.11.2017
15:09:01
под нагрузкой 0.018, без нагрузки 0.105? ничего не напутал? ;)
XD под вечер мозг поплыл. Да, перепутал. Холостой: 0.018мс, Под нагрузкой 0.105мс. Все замеры без нагрузки на сеть (без сетевой задержки)

Dmitry
02.11.2017
15:09:54
ну 0.105 мс при 30 воркерах - это никак не 2 ляма... где-то на порядок меньше

Dmitry
02.11.2017
15:11:09
ну, это около 10к зарпосов в секунду

Vladislav
02.11.2017
15:11:19
О_о

Dmitry
02.11.2017
15:12:31
шо? 1/0.000105 = 9523 :)

Vitaliy Nameless
02.11.2017
15:12:51
тогда верю

Pavel
02.11.2017
15:13:25
Собери докер контейнер чтобы можно было скачать и ручками потыкать

в 2 ляма в секунду даже на 8 ядрах и вусмерть оттюнингованном ядре верится слабо.

Если это там не внедрение в нулевое кольцо и в TCP стек.

И попадание в когерентность кеша.

Google
Vladislav
02.11.2017
15:15:53
С утра тестили на чистой сборке ubuntu-server (без тюнячек), вот лог: Total data sent: 123640.4 MiB (129646334294 bytes) Total data received: 852.8 MiB (894251446 bytes) Bandwidth per channel: 43.513⇅ Mbps (5439.1 kBps) Aggregate bandwidth: 59.616↓, 8642.922↑ Mbps Packet rate estimate: 137211.4↓, 838519.4↑

значения собственно: {от} {до}

Dmitry
02.11.2017
15:16:52
ааа... где тут коннекты?

Vladislav
02.11.2017
15:16:53
в пике: 838519, на разогреве 137211

Dmitry
02.11.2017
15:17:06
аа... причем тут пакеты?

Vladislav
02.11.2017
15:17:44
потому, что тестировалось постоянное tcp соединение и мерились именно пакеты с валидным ответом.

Maksim
02.11.2017
15:18:01
бгг

Dmitry
02.11.2017
15:18:11
мдя...

Vladislav
02.11.2017
15:18:23
я же писал об этом выше..

Dmitry
02.11.2017
15:20:00
ну... под "запросы в секунды" обычно нечто другое подразумевается, да...

Pavel
02.11.2017
15:20:34
Да какая разница? Норм тащит

Dmitry
02.11.2017
15:20:40
ну у него и не пхп ;_

Pavel
02.11.2017
15:20:58
Правда если пошли извраты с тюнингом ядра и переписыванием на зефире, то может стоит переписать на go тогда

Vladislav
02.11.2017
15:21:11
ну запросы бывают разные.. Кто то имеет ввиду http, в нашем вот случае tcp. Http запросы тоже замеряли: вот AB (обращаю внимание, что без тюнинга ос) Requests per second: 208415.11 [#/sec] (mean) Time per request: 0.960 [ms] (mean) Time per request: 0.005 [ms] (mean, across all concurrent requests)

Dmitry
02.11.2017
15:21:48
не, tcp запросы в секунду и "число пакетов" - тоже немного разные штуки... ну в моем понимании

Vladislav
02.11.2017
15:21:56
8 ядер, одна виртуалка. Правда на базе собственного облака на open stack.

Dmitry
02.11.2017
15:22:20
вот если бы были udp запросы ;)

Vladislav
02.11.2017
15:22:23
@miksir Ок, сори, возможно не правильно выразился. Просто для меня пакет == запрос т.к. с пакетом приходит.. запрос =))

Страница 369 из 956