Я работаю на многопоточном сетевом сервере, используя epoll (edge-triggered) и нити, и использую httperf для тестирования моего сервера.
Пока что он работает очень хорошо или почти точно с той скоростью, с которой отправляются запросы. До барьера 1024, где все замедляется до 30 запросов в секунду.
Запуск в 64-битной Ubuntu 9.04.
Я уже пробовал:
- Успешно увеличено максимальное количество дескрипторов файлов. Это просто не повышает производительность выше 1024 одновременных подключений.
andri @ filefridge: ~ / Dropbox / School / Group 452 / Код / сервер $ ulimit -n
20000
Я почти уверен, что это замедление происходит в операционной системе так же, как и до отправки события в epoll (и да, я также увеличил лимит в epoll).
Мне нужно измерить, сколько одновременных подключений может обработать моя программа, пока она не начнет замедляться (без вмешательства операционной системы).
Как заставить мою программу работать с более чем 1024 дескрипторами файлов?
Этот предел, вероятно, существует по какой-то причине, но для целей бенчмаркинга он мне нужен.
Обновление
Спасибо за все ваши ответы, но я думаю, что нашел виновника. После переопределения __FD_SETSIZE в моей программе все стало двигаться намного быстрее. Конечно, ulimit также необходимо повысить, но без __FD_SETSIZE моя программа никогда не воспользуется этим.