GNU/Linux >> Linux の 問題 >  >> Linux

isolcpusがアクティブになっているかどうかを検出する方法は?

探しているものは、この仮想ファイル内にあるはずです:

/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 サーバー上


Linux
  1. メモリリークを検出する方法は?

  2. インストールされている pip パッケージのサイズを確認するには?

  3. Bash/Shell で GUI の可用性を検出する方法は?

  1. Sys ::Detector ::Virtualization Perlスクリプトを使用して仮想化を検出する方法は?

  2. バッシュを検出する方法>=4.0?

  3. 変更された dmesg 出力を確認するにはどうすればよいですか?

  1. シェルがSshから制御されているかどうかを検出する方法は?

  2. LinuxでIPアドレスの変更をプログラムで検出する方法は?

  3. Linux でプログラムの起動を検出する方法は?