Это очень высокий уровень, который работает с приятненьким tcp, который эрлангу уже кто-то сделал готовенький.
Но есть кто-то, кто делает готовенький tcp, и там всё очень сложно: много ядер, локальный контекст, перенос которого между ядрами дорогой, и мы не хотим на каждый новый пакет переносить его. В то же самое время у нас есть куча ядер и мы не можем обрабатывать все пакеты на одном ядре. Это означает, что сетевая карта предоставляет несколько очередей, и каждое ядро обрабатывает свою очередь, но это создаёт проблему, в какую очередь какой пакет класть.
Ядру надо знать, какой сокет с какими 5-tuple (или другими признаками flow) соотносится и настраивать правила сетевой карты по определению очереди для принятия пакета.
Отдельная красота касается новых пакетов - их класть в round-robin, на least connections, на least load CPU (и связанную с ним очередь?)
Это очень глубокая область, сильно более глубокая, чем кассиры на кассах. По крайней мере я не видел кассовых сетапов на обработку 10 миллионов клиентов в секунду. Но было бы интересно посмотреть.
(Я так же не видел кода на эрланге, способного обрабатывать 10 миллионов flow в секунду на одной машине; не 10 миллионов обращений в секунду, а 10 миллионов активных соединений).
no subject
Date: 2024-09-12 10:33 am (UTC)Но есть кто-то, кто делает готовенький tcp, и там всё очень сложно: много ядер, локальный контекст, перенос которого между ядрами дорогой, и мы не хотим на каждый новый пакет переносить его. В то же самое время у нас есть куча ядер и мы не можем обрабатывать все пакеты на одном ядре. Это означает, что сетевая карта предоставляет несколько очередей, и каждое ядро обрабатывает свою очередь, но это создаёт проблему, в какую очередь какой пакет класть.
Ядру надо знать, какой сокет с какими 5-tuple (или другими признаками flow) соотносится и настраивать правила сетевой карты по определению очереди для принятия пакета.
Отдельная красота касается новых пакетов - их класть в round-robin, на least connections, на least load CPU (и связанную с ним очередь?)
Это очень глубокая область, сильно более глубокая, чем кассиры на кассах. По крайней мере я не видел кассовых сетапов на обработку 10 миллионов клиентов в секунду. Но было бы интересно посмотреть.
(Я так же не видел кода на эрланге, способного обрабатывать 10 миллионов flow в секунду на одной машине; не 10 миллионов обращений в секунду, а 10 миллионов активных соединений).