Почему мой RPC-сервер использует 5-кратный процессор при переходе на более новое ядро ​​Linux?

275
bjb

Мы тут как бы натолкнулись на стену, поэтому я решил, что стоит спросить на этом сайте.

У нас есть процесс Java, который обслуживает старые RPC-подключения Sun в качестве уровня совместимости в новой системе. На старых машинах SuSE (2007 Xeon с 2.6.16) все работало просто отлично. В то время как мы пытались перейти на более современную платформу Xeon E5-2670 с RHEL 2.6.32, процесс выполняется, но он привязывает все процессоры под нагрузкой и отвечает МЕДЛЕННО, чем предыдущий комплект. Загрузка на стороне клиента одинакова, мы используем более быстрый серверный диск, такое же количество физических ядер (хотя теперь x2 из-за гиперпоточности), ту же оперативную память (которая не голодает и не переставляется).

Профилирование на самом деле ничего не показывает. Было некоторое подозрение о том, что диск работает медленнее из-за записи журналов (раньше было ext3, теперь ext4 + acl), но это, кажется, не большая проблема, и «загрузка журналов» такая же. iostat, netstat все выглядит нормально.

Я подозреваю, что что-то изменилось в обработке RPC между ядрами, но, кажется, трудно найти много информации, так как (я предполагаю) связь типа Sun RPC сегодня не так популярна.

Какие-нибудь мысли? Я не ожидаю, что кто-то обязательно решит проблему, так как не могу рассказать об этом слишком много, но, возможно, указатели на то, на что обратить внимание при диагностике RPC и издержек ядра?

Спасибо!

1
Вы пытались отключить гиперпоточность? Какой тип использования процессора он использует (пользователь / система / iowait / ...)? golimar 9 лет назад 0

2 ответа на вопрос

1
bjb

Похоже, что проблема связана с прозрачным функционалом ядра страницы . Я не уверен в полных технических деталях, но достаточно сказать следующие три команды, чтобы отключить это исправленные вещи:

echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag echo never > /sys/kernel/mm/transparent_hugepage/defrag echo never > /sys/kernel/mm/transparent_hugepage/enabled 

Загрузка процессора снизилась до того уровня, на котором она была у нас до перехода на новое ядро.

Надеюсь, что это поможет кому-то еще, так как я не смог найти в Интернете ничего плохого в отношении RPC, который не был связан с NFS! :-)

-1
Alexey Vesnin

Check your code for While-sleeps and replace them by actual sleep + check your kernel config.

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