Я запускаю службу memcached в контейнере Linux, прикрепленном к определенному физическому ядру. Как и ожидалось, ЦП увеличивается при увеличении количества запросов. Запросы отправляются генератором рабочей нагрузки на другом компьютере. Однако для заданного количества запросов количество используемых ЦП варьируется интуитивно интуитивно в разных сценариях. У машины 4 физических ядра (0,1,2,3), и гиперпоточность отключена.
1) Memcached работает отдельно на одном ядре (CPU0)
2) Memcached работает на одном ядре (CPU0), а приложение, интенсивно использующее процессор (выполняет много операций с плавающей запятой), работает на (CPU3).
Например, Memcached использует ЦП 88% для 60000 запросов в секунду для сценария 1. Для тех же 60000 запросов в секунду Memcached использует меньшее количество ЦП - 78% для сценария 2. Как это возможно? Почему загрузка ЦП Memcached падает, когда приложение, интенсивно использующее ЦП, работает на другом ядре?
Некоторые результаты прерывания для каждого ядра из mpstat:
сценарий1 (memcached работает только на CPU0):
CPU usage of Memcached = 88%
Average: CPU HI/s TIMER/s NET_TX/s NET_RX/s BLOCK/s BLOCK_IOPOLL/s TASKLET/s SCHED/s HRTIMER/s RCU/s
Average: 0 0,00 231,61 0,20 102893,92 0,00 0,00 0,00 4,14 0,18 42,53
Average: 1 1,80 18,33 0,00 0,00 0,00 0,00 0,98 4,25 0,02 15,98
Average: 2 0,00 22,96 0,00 0,00 0,00 0,00 0,00 3,47 0,02 20,49
Average: 3 0,00 20,59 0,00 0,00 0,78 0,00 0,00 3,43 0,02 18,71
Сценарий 2: (memcached на CPU0 и приложение с интенсивным использованием процессора на CPU 3)
CPU usage of Memcached = 78%
Average: CPU HI/s TIMER/s NET_TX/s NET_RX/s BLOCK/s BLOCK_IOPOLL/s TASKLET/s SCHED/s HRTIMER/s RCU/s
Average: 0 0,00 204,87 0,21 102268,58 0,00 0,00 0,00 2,77 0,40 133,05
Average: 1 0,03 24,94 0,00 0,00 0,00 0,00 0,55 5,56 0,06 23,38
Average: 2 0,00 17,23 0,00 0,00 0,00 0,00 0,00 4,23 0,04 16,12
Average: 3 0,00 250,00 0,00 0,00 0,74 0,00 0,00 2,50 0,00 37,69