Сегодня было завершено создание первой версии Cat Server Linux – нашего дистрибутива Linux для платформы x86_64, предназначенного для развёртывания серверных приложений созданных на основе CSRTL (и опционально CSO). При создании основной упор делался на минимализм и простоту дистрибутива. CSL занимает на диске всего 6,1МБ, не содержит разделяемых библиотек и при запуске потребляет менее 16МБ ОЗУ. При этом CSL поддерживает работу как с IPv4, там и с IPv6, имеет все необходимые утилиты, Syslogd, SSH-сервер, RSync. Сразу хочу отметить, что CSL не является заменой какому-либо стандартному дистрибутиву, вроде CentOS, и служит сугубо для решения узкого круга задач.
В процессе тестирования дистрибутива проводилось также тестирование уже знакомого нам TCPEcho-сервера, но теперь собранного на базе новой версии CSO.
В рамках тестирования было проведено 2 теста: тест на передачу данных по паралельным соединениям и тест на обработку большого числа подключений к серверу.
Тестирование проводилось с помощью двух машин (Core i7 6×4.2GHz) под управлением Windows7 с установленной на них VMWare. Реальный лимит дуплексной передачи данных по сети (машина-роутер-машина) между ними составлял около 44-45МБ/с. Для сервера использовалась виртуальная машина с 3-мя ядрами, 1ГБ ОЗУ под управлением CSLv1.
При проведении теста на передачу данных по параллельным соединениям при 1к, 2к, 4к, 8к и 16к соединений везде был достигнул лимит физ. среды передачи данных, т.е. 44-45МБ/с, при этом загрузка сервера оставалась на уровне 33% (т.е. хватило бы одного ядра). Как минимум половина из этого времени приходится на обработку software irq, а вот показатели затрат времени на обработку настоящего irq стабильно находились на 0. Также было установлено, что использование более 2к активных соединений приводит к возникновению случайных задержек в обработке запросов размером до 3-4 сек, а при 16к соединений задержки доходили и до 14 секунд!.
Второй тест был пройден без проблем. Сервер успешно обработал 10млн. входящих соединений при 1024 параллельных. По каждому соединению передавалось 8кб данных. Скорость обработки составила 3к соединений в секунду (что коррелировалось со скоростью обмена данными в 24МБ/с).