たとえば、サーバーに初めて接続するときに isolcpus が有効になっているか、どの CPU にあるかを検出する方法などがあります。状況:
移行する場所を確認するためのプロセスは作成されません。
ユースケースは、6コアi7で起動するとisolcpusが有効になっていないようです。カーネル内でも可能なものでも、isolcpus=1-7
isolcpusのアクティブ化の明確な状態に関連するCPUを提供できるかどうか疑問に思います。ユーザー空間で読むことができます。あるいは、isolcpusが最初に焦点を当てるスケジューラのアクティビティ設定を読んでください。/proc/
/sys
稼働時間が高すぎるdmesg
ため、起動時にエラーを検出するために起動ログが表示されなくなることを検討してください。基本的な答えは「カーネルコマンドラインの表示「受け取れません:)
答え1
あなたが探しているものはこのダミーファイルにあります:
/sys/devices/system/cpu/isolated
そしてその逆
/sys/devices/system/cpu/present // Thanks to John Zwinck
私たちが見ることができるdrivers/base/cpu.c
ディスプレイソースはカーネル変数ですcpu_isolated_map
。
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);
これがcpu_isolated_map
すぐに起動時に設定されますkernel/sched/core.c
。
/* 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;
}
しかし、観察したように、誰かがデーモンによって生成されたプロセスを含むプロセスの類似性を修正した可能性がありますcron
。systemd
これが発生すると、代わりに変更されたアフィニティマスクを継承する新しいプロセスが作成されますisolcpus
。
したがって、上記の内容はisolcpus
あなたの要求に応じて提供されますが、まだ役に立ちません。
isolcpus
この緩やかな動作が発生しましたが、まだ「実行」されていないことを発見したとしましょう。できるのみバインドできることを認識し、シングルCPU=0
プロセッサモードにあると誤って信じ、好みマスクをリセットして「エラー修正」を試みるいくつかのプロセスによってフォークされます。この場合、CPUS 1-6の代わりに0-5を分離して動作していることを確認できます。
答え2
このような場合を検出する最も簡単な方法の1つは、実行時にどのパラメータがカーネルに渡されるかを確認することisolcpus
です。proc
これを行うには、次のものを使用できます。
$cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-4.8.0-1-amd64 root=/dev/sda1 ro isolcpus=2,3 quiet
ご覧のとおり、この特定の例では、isolcpus=2,3
実行中のカーネルにパラメータとして渡されます。
taskset
PID 1へのポインタを使用することもできます。 PID 1は、カーネルが開始した最初のジョブの標準PIDであるため、isolcpus
作業中かどうかを反映する良い表示と考えることができます。良い:
$taskset -cp 1
pid 1's current affinity list: 0,1
lscpu
同じサーバー上のコマンドと比較してみてください。
$lscpu | grep CPU.s
CPU(s): 4
On-line CPU(s) list: 0-3
NUMA node0 CPU(s): 0-3
ご覧のとおり、lscpu
4つのCPU /コアが表示され、taskset
0、1のみが表示されるため、isolcpus
ここではすべてが正しく機能していることを示しています。
答え3
確認できますCPU_許可そしてCPU_allowed_list現在のシェルプロセスを確認して、どのCPUが予約されているかを確認してください。
cat /proc/$$/status|tail -6
例えば
Cpus_allowed_list: 0-1, 3-5
CPU = 2がisolcpus
6つのCPUサーバー用に予約されていることを意味します。