cpu核心线程计算和详解

  • 线程总数 = processor 计数
  • 物理cpu数量 = physical id 去重后计数
  • 每颗物理cpu的物理核心 = 对于每个具有相同 physical id 的条目,查找并统计它们的 cpu cores 字段的值。cpu cores 表示每个物理核心的数量

示例php代码如下

<?php
        $cpuModelArray = [];
        $cpuPhysicalArray = [];
        $cpuProcessor = 0;
        $physicalId = -1;
        $proc_cpuinfo_array = explode("\n", file_get_contents('/proc/cpuinfo'));
        foreach ($proc_cpuinfo_array as $value) {
            if (strstr($value, 'model name')) {
                $modelName = trim(substr($value, strpos($value, ':') + 1));
                if (!in_array($modelName, $cpuModelArray)) {
                    $cpuModelArray[] = $modelName;
                }
            } elseif (strstr($value, 'physical id')) {
                $physicalId = trim(substr($value, strpos($value, ':') + 1));
                $cpuPhysicalArray[$physicalId] = 0;
            } elseif (strstr($value, 'cpu cores')) {
                $cpuPhysicalArray[$physicalId] = intval(trim(substr($value, strpos($value, ':') + 1)));
            } elseif (strstr($value, 'processor')) {
                $cpuProcessor++;
            }
        }

        //物理cpu个数
        $cpuPhysical = count(array_keys($cpuPhysicalArray));

        //总物理核心数 = 每个物理cpu的物理核心数相加
        $cpuCore = array_sum(array_values($cpuPhysicalArray));

        $data['cpu'] = [
            'percent' => round($cpuAvgUsage, 1),
            'cpu' => $cpuModelArray,
            'cpuPhysical' => $cpuPhysical, //物理CPU个数
            'cpuCore' => $cpuCore, //物理CPU的总核心数
            'cpuProcessor' => $cpuProcessor, //物理CPU的线程总数/逻辑核心总数
        ];

原创文章,作者:witersen,如若转载,请注明出处:https://www.witersen.com

(0)
witersen的头像witersen
上一篇 2023年3月28日 下午9:05
下一篇 2023年7月25日 上午11:25

相关推荐

发表回复

登录后才能评论