探しているものは、この仮想ファイル内にあるはずです:
/sys/devices/system/cpu/isolated
そしてその逆
/sys/devices/system/cpu/present // Thanks to John Zwinck
06
から 表示されるソースはカーネル変数 14
であることがわかります :
static ssize_t print_cpus_isolated(struct device *dev,
n = scnprintf(buf, len, "%*pbl\n", cpumask_pr_args(cpu_isolated_map));
...
static DEVICE_ATTR(isolated, 0444, print_cpus_isolated, NULL);
と 29
33
によって設定されるものとまったく同じです 起動時:
/* Setup the mask of cpus configured for isolated domains */
static int __init isolated_cpu_setup(char *str)
{
int ret;
alloc_bootmem_cpumask_var(&cpu_isolated_map);
ret = cpulist_parse(str, cpu_isolated_map);
if (ret) {
pr_err("sched: Error, all isolcpus= values must be between 0 and %d\n", nr_cpu_ids);
return 0;
}
return 1;
}
しかし、あなたが観察したように、誰かがプロセスのアフィニティーを変更した可能性があります。 、 58
等々。その場合、65
によって設定されたものではなく、変更されたアフィニティ マスクを継承する新しいプロセスが生成されます。 .
したがって、上記は 78
を返します リクエストどおりですが、それでも役に立たない可能性があります。
85
がわかったとします。 発行されましたが、「取得」されていない場合、この望ましくない動作は可能性があります 96
のみにバインドされていることを認識しているプロセスによって派生する 、誤ってモノプロセッサ モードになっていると信じて、アフィニティ マスクをリセットすることで「物事を正しく設定」しようとします。その場合は、1 ~ 6 の代わりに CPU 0 ~ 5 を分離してみて、これがうまくいくかどうかを確認してください。
101
かどうかを検出する簡単な方法の 1 つ 119
に相談中です 実行時にカーネルに渡されたパラメータを確認します。
そのためには、以下を使用します:
$cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-4.8.0-1-amd64 root=/dev/sda1 ro isolcpus=2,3 quiet
ご覧のとおり、この特定の例では 128
実行中のカーネルに引数として渡されました。
137
も使用できます PID 1 を指しています。PID 1 は、カーネルによって起動された最初のタスクの標準 PID であるため、141
を持っているかどうかを反映するかなり良い指標と見なすことができます。 働く。のように:
$taskset -cp 1
pid 1's current affinity list: 0,1
150
との比較 同じサーバー内のコマンド:
$lscpu | grep CPU.s
CPU(s): 4
On-line CPU(s) list: 0-3
NUMA node0 CPU(s): 0-3
ご覧のとおり、164
179
ながら 4 つの CPU/コアを示しています 0,1しか表示されていないため、これは 183
を示しています
参照してください:実行中のプロセスで排他的な CPU の可用性を確保する方法
Cpus_allowed を確認できます および Cpus_allowed_list 現在のシェル プロセスで予約されている CPU を確認する
cat /proc/$$/status|tail -6
例えば
Cpus_allowed_list: 0-1, 3-5
cpu=2 が 195
によって予約されたことを意味します 6 CPU サーバー上