Все гораздо проще.
Если ваша проблема производительность - т
о просто логируйте этапы (с указанием времени) обработки каждого запроса. ОТДЕЛЬНОГО запроса. Потом собираете и анализируйте. Да хоть в Excel.
Вам не нужно мониторить на уровне ядер.
Вам нужно определить - а какое именно место в вашей обработке запроса тормозит.
Уже оттуда и начнете танцевать про ядра и пр.
Среднее за сутки, т.к. за бОльшее кол-во времени слишком долго ждать.
Достаточно подождать несколько минут, чтобы собрать результаты по десяткам и сотням запросов.
Но что же не так с первой машиной? Как только я загружаю на ней больше физических ядер, чем у неё есть, user time увеличивается.
Это что? Магия hyperthreading? Но ведь в htop видно, что во время теста загружено лишь одно виртуальное ядро из 4-х.
Без спуска на уровень прикладной задачи вряд ли у вас что получится тут узнать.
Это могут быть тупо
блокировки.
Да и кто вам сказал, что ваша подсистема спроектирована работать
действительно параллельно?