Производительность сети Ubuntu на по 2k соединениям

Я использую машину LTS Ubuntu 14.04 EC2 c3.8xlarge с по потокам 3k, одновременно загружающим веб-страницы один за другим.

Хотя эта машина должна иметь производительность сети на 10 ГБ, я не могу заставить ее работать выше, чем 10MB/s.

ЕСТЬ ЛИ какой-либо способ, которым я могу улучшить скорость сети своей машины?

мой/etc/sysctl.conf

net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_syncookies = 0
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0
fs.file-max = 262144
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.conf.all.log_martians = 0
net.ipv4.ip_local_port_range = 1024 65000
net.core.somaxconn = 1024
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_mem = 16777216 16777216 16777216
net.ipv4.tcp_max_orphans = 262144
net.core.netdev_max_backlog = 2000
net.ipv4.route.flush=1 
0
задан 2 February 2016 в 22:47

1 ответ

3k распараллеливает одновременно

существует Ваша проблема. Необходимо перепроектировать приложение для не использования безумного количества потоков, которые все конкурируют друг с другом для ресурсов. См. io_submit() и друзья для того, как отправить ядру запрос IO, не блокируя поток, пока это не завершается. Можно также использовать setsockopt() для обнуления размера буфера ядра так, чтобы он не напрасно тратил время, копируя данные назад и вперед между буферами и его собственным. Конечно, необходимо будет удостовериться, что дали его несколько ожидающие запросы IO одновременно так, чтобы, как только это заканчивает тот, это уже имело другого для хождения дальше к завершению. Путем выполнения этого у Вас может быть единственный поток (или один на ядро CPU во всяком случае) управляют всеми IO на тысячах соединений без издержек переключения между тысячами потоков.

0
ответ дан 26 July 2019 в 08:23

Другие вопросы по тегам:

Похожие вопросы: