Я потратил полдня на то, чтобы выяснить, почему простое приложение для сетевых коммуникаций работает медленнее на машине, которая кажется лучше настроенной.
Существует две программы: простой клиент, который через 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 для обеих машин
Кто-нибудь знает, в чем может быть проблема, или что может предоставить больше информации?