isolcpusが有効になっていることをどのように検出しますか?

isolcpusが有効になっていることをどのように検出しますか?

たとえば、サーバーに初めて接続するときに isolcpus が有効になっているか、どの CPU にあるかを検出する方法などがあります。状況:

移行する場所を確認するためのプロセスは作成されません。

ユースケースは、6コアi7で起動するとisolcpusが有効になっていないようです。カーネル内でも可能なものでも、isolcpus=1-7isolcpusのアクティブ化の明確な状態に関連する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;
}

しかし、観察したように、誰かがデーモンによって生成されたプロセスを含むプロセスの類似性を修正した可能性がありますcronsystemdこれが発生すると、代わりに変更されたアフィニティマスクを継承する新しいプロセスが作成されますisolcpus

したがって、上記の内容はisolcpusあなたの要求に応じて提供されますが、まだ役に立ちません。

isolcpusこの緩やかな動作が発生しましたが、まだ「実行」されていないことを発見したとしましょう。できるのみバインドできることを認識し、シングルCPU=0プロセッサモードにあると誤って信じ、好みマスクをリセットして「エラー修正」を試みるいくつかのプロセスによってフォークされます。この場合、CPUS 1-6の代わりに0-5を分離して動作していることを確認できます。

おすすめ記事