Этот вопрос связан с бывший, который содержит полную предысторию моей проблемы. В итоге у меня есть две почти идентичные виртуальные машины, и одна из них очень плохо масштабируется при некоторых нагрузках с интенсивным использованием ЦП, при этом, я думаю, задействован хотя бы некоторый ввод-вывод. Сейчас я сравниваю результаты sysctl -a
для обеих виртуальных машин и исследования различий.
Одно из этих различий касается планировщика задач, начальные значения после холодной перезагрузки на проблемной виртуальной машине намного выше, чем на другой. Итак, я блуждаю, откуда изначально берутся эти ценности? Например. если они рассчитаны, от каких фактов они зависят, возможно, от виртуального хоста, если они автоматически меняются во время выполнения и т. д. Также приветствуются оценки того, могут ли эти разные значения иметь какое-либо разумное влияние на общее масштабирование системы.
Ниже приведены примеры для различных значений, в то время как я привожу только один из 8 виртуальных ЦП и общие настройки планировщика. Важные части каждого виртуального ЦП выглядят очень похоже.
Хорошая и плохая ВМ:
--- C:/Users/tschoening/Desktop/Good VM.txt Mi 18. Apr 19:24:47 2018
+++ C:/Users/tschoening/Desktop/Bad VM.txt Mi 18. Apr 19:24:44 2018
@@ -8,3 +8,3 @@ kernel.sched_domain.cpu0.domain0.imbalance_pct = 1
-kernel.sched_domain.cpu0.domain0.max_interval = 4
-kernel.sched_domain.cpu0.domain0.max_newidle_lb_cost = 75519
-kernel.sched_domain.cpu0.domain0.min_interval = 2
+kernel.sched_domain.cpu0.domain0.max_interval = 16
+kernel.sched_domain.cpu0.domain0.max_newidle_lb_cost = 155384
+kernel.sched_domain.cpu0.domain0.min_interval = 8
@@ -15 +15 @@ kernel.sched_domain.cpu0.domain0.wake_idx = 0
-kernel.sched_latency_ns = 12000000
+kernel.sched_latency_ns = 24000000
@@ -17 +17 @@ kernel.sched_migration_cost_ns = 500000
-kernel.sched_min_granularity_ns = 1500000
+kernel.sched_min_granularity_ns = 3000000
@@ -25 +25 @@ kernel.sched_tunable_scaling = 1
-kernel.sched_wakeup_granularity_ns = 2000000
+kernel.sched_wakeup_granularity_ns = 4000000
Хорошая ВМ:
kernel.sched_domain.cpu0.domain0.busy_factor = 32
kernel.sched_domain.cpu0.domain0.busy_idx = 2
kernel.sched_domain.cpu0.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu0.domain0.flags = 4143
kernel.sched_domain.cpu0.domain0.forkexec_idx = 0
kernel.sched_domain.cpu0.domain0.idle_idx = 1
kernel.sched_domain.cpu0.domain0.imbalance_pct = 125
kernel.sched_domain.cpu0.domain0.max_interval = 4
kernel.sched_domain.cpu0.domain0.max_newidle_lb_cost = 75519
kernel.sched_domain.cpu0.domain0.min_interval = 2
kernel.sched_domain.cpu0.domain0.name = DIE
kernel.sched_domain.cpu0.domain0.newidle_idx = 0
kernel.sched_domain.cpu0.domain0.wake_idx = 0
kernel.sched_latency_ns = 12000000
kernel.sched_migration_cost_ns = 500000
kernel.sched_min_granularity_ns = 1500000
kernel.sched_nr_migrate = 32
kernel.sched_rr_timeslice_ms = 25
kernel.sched_rt_period_us = 1000000
kernel.sched_rt_runtime_us = 950000
kernel.sched_shares_window_ns = 10000000
kernel.sched_time_avg_ms = 1000
kernel.sched_tunable_scaling = 1
kernel.sched_wakeup_granularity_ns = 2000000
Плохая ВМ:
kernel.sched_domain.cpu0.domain0.busy_factor = 32
kernel.sched_domain.cpu0.domain0.busy_idx = 2
kernel.sched_domain.cpu0.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu0.domain0.flags = 4143
kernel.sched_domain.cpu0.domain0.forkexec_idx = 0
kernel.sched_domain.cpu0.domain0.idle_idx = 1
kernel.sched_domain.cpu0.domain0.imbalance_pct = 125
kernel.sched_domain.cpu0.domain0.max_interval = 16
kernel.sched_domain.cpu0.domain0.max_newidle_lb_cost = 155384
kernel.sched_domain.cpu0.domain0.min_interval = 8
kernel.sched_domain.cpu0.domain0.name = DIE
kernel.sched_domain.cpu0.domain0.newidle_idx = 0
kernel.sched_domain.cpu0.domain0.wake_idx = 0
kernel.sched_latency_ns = 24000000
kernel.sched_migration_cost_ns = 500000
kernel.sched_min_granularity_ns = 3000000
kernel.sched_nr_migrate = 32
kernel.sched_rr_timeslice_ms = 25
kernel.sched_rt_period_us = 1000000
kernel.sched_rt_runtime_us = 950000
kernel.sched_shares_window_ns = 10000000
kernel.sched_time_avg_ms = 1000
kernel.sched_tunable_scaling = 1
kernel.sched_wakeup_granularity_ns = 4000000
В другом месте есть ответ, который я хотел бы задокументировать и связать с этой веткой:
Начальные значения основаны на вашем оборудовании и предлагаемых значениях по умолчанию. Если серверы разные, т.е. разная память, процессор; значения по умолчанию могут быть разными. Ничто из того, что я здесь вижу, не будет иметь большого значения в реальном мире. Я знаю, что цифры выглядят по-разному, но в реальном мире это не так.
Кроме того, теперь я точно знаю, что большая часть различий связана просто с тем фактом, что одна виртуальная машина имела 2, а другие 8 виртуальных ЦП на момент выполнения. sysctl -a
. Скорее всего, нет неправильной глобальной настройки или чего-то подобного, как я предполагал. Я вижу точно такие же разные значения, например, *_interval
и sched_*_ns
используя некоторый Ubuntu 14.04, который у меня был на моем рабочем столе в VMware Workstation с 2 и 8 виртуальными ЦП. Комплектовать разное оборудование, виртуальные машины и т. Д., Одинаковые номера.