3

Я потратил полдня на то, чтобы выяснить, почему простое приложение для сетевых коммуникаций работает медленнее на машине, которая кажется лучше настроенной.

Существует две программы: простой клиент, который через TCP/IP подключается к серверу, пишет (одно и то же) сообщение и ожидает ответа, прежде чем снова написать то же сообщение. Простой сервер ждет, пока клиент напишет сообщение, а затем пишет (то же самое) сообщение клиенту. Этот обмен выполняется в цикле 1M раз. Этот тест проводится на локальном хосте.

Это взаимодействие на старом компьютере достигает около 90000 сообщений в секунду, а на более новом компьютере - около 44000 сообщений в секунду, даже несмотря на то, что новый компьютер имеет лучшие характеристики и на нем не запущены другие пользовательские процессы.

Старый компьютер:

  • является общим блоком разработки - различные другие процессы выполняются параллельно с моими тестами
  • имеет 16 процессоров Intel(R) Xeon(R) X5570 @ 2,93 ГГц
  • имеет 49 Гб памяти, из которых только около 5 Гб свободны

Более новый компьютер:

  • не является общим - единственные запущенные процессы - мои
  • имеет 24 процессора Intel Xeon® X5690 с частотой 3,47 ГГц
  • имеет 24,5 ГБ памяти, из которых 21 ГБ свободна

Я проверил следующее:

  • Ядра ОС одинаковы. Uname -a показывает: Linux ficsydapd20 2.6.18-238.9.1.el5 # 1 SMP пт 18 марта 12:42:39 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
  • архитектура памяти лучше на новой машине - тестируется с использованием cachebench
  • новая машина превзошла по производительности процессора - Fhourstone
  • strace показывает примерно одинаковое количество системных вызовов
  • vmstat не показывает подкачки во время работы программы
  • MTU одинаков для петлевого устройства через /sbin /ifconfig
  • Буферы сокетов по умолчанию, используемые для обеих систем, проверены с использованием /proc /sys /net /ipv4 /tcp_wmem и /proc /sys /net /ipv4 /tcp_rmem
  • localhost определен как 127.0.0.1 в /etc /hosts для обеих машин

Кто-нибудь знает, в чем может быть проблема, или что может предоставить больше информации?

2 ответа2

2

Вы должны проверить еще несколько вещей здесь

1) убедитесь, что qdisc не настроен .. убедитесь, что здесь нет записи для устройства lo

[qdisc используется для ограничения скорости интерфейсов]

root@x:~# tc qdisc
qdisc pfifo_fast 0: dev eth0 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc mq 0: dev wlan0 root 

2) проверьте iptables: убедитесь, что они одинаковы для обеих машин [регистрация подключений в iptables или маскировка могут снизить эффективную скорость]

root@x:~# iptables -L
root@x:~# iptables -L -t nat

if not you can try using iptables -F  and iptables -t nat -F  to flush them

3) проверить статус статуса selinux на обоих (включен или отключен)

4) скорость соединений в /proc /sys /net /ipv4 tcp зависит от многих параметров, например (поскольку вы отправляете соединения с очень высокой скоростью)

net.ipv4.tcp_tw_reuse

net.ipv4.tcp_max_syn_backlog

поэтому вы должны убедиться, что эти значения одинаковы для обеих машин

Простой способ выявить различия

Машина 1

root@x:~# sysctl -a | grep net.ipv4.tcp_ > s1

Машина 2

root@x:~# sysctl -a | grep net.ipv4.tcp_ > s2

скопируйте файлы и проверьте diff

root@x:~# diff s1 s2

Вы можете изменить значения, которые отличаются.

1

Мы синхронизировали версии ядра и драйверы, что не помогло. Оказывается, некоторые настройки BIOS приводили к снижению производительности. Особенно:

Состояния C и опции C1E, которые уменьшают тактовую частоту и потребление напряжения, когда устройство не используется для экономии энергии - поскольку более новая машина использовалась не так часто, она переводилась в это состояние, что могло бы снизить производительность ( счетчик интуитивно).

Производительность сейчас соответствует, а иногда и превосходит производительность старой машины.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .