- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当您使用命令运行 perf
实用程序时,您获得的输出行之一如下所示:
2.088031 task-clock (msec) # 0.700 CPUs utilized
如果您使用 perf stat --all-cpus --no-aggr
,您将获得每个 CPU 核心的这些行之一,例如:
CPU0 38.518960 cpu-clock (msec) # 0.528 CPUs utilized
CPU1 38.564135 cpu-clock (msec) # 0.529 CPUs utilized
CPU2 38.611806 cpu-clock (msec) # 0.529 CPUs utilized
我不明白这到底是什么意思——在这两种情况下;我只有一个猜测:
但这些猜测充满了假设。在这两种情况下,这些数字的确切含义是什么?此外,他们如何计算进程线程在内核调用中花费的时间?他们如何解释在同一核心上工作的同一进程的多个线程?将不胜感激详尽的解释。
最佳答案
我会一一解释你的猜测。
案例二
使用 perf stat -all-cpus --no-aggr
:
./perf stat -vvv -all-cpus --no-aggr ls [957/1827]
Using CPUID GenuineIntel-6-4F
intel_pt default config: tsc,pt,branch
------------------------------------------------------------
perf_event_attr:
type 1
size 112
sample_type IDENTIFIER
read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING
disabled 1
inherit 1
exclude_guest 1
------------------------------------------------------------
sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 3
sys_perf_event_open: pid -1 cpu 1 group_fd -1 flags 0x8 = 4
sys_perf_event_open: pid -1 cpu 2 group_fd -1 flags 0x8 = 5
sys_perf_event_open: pid -1 cpu 3 group_fd -1 flags 0x8 = 7
sys_perf_event_open: pid -1 cpu 4 group_fd -1 flags 0x8 = 8
sys_perf_event_open: pid -1 cpu 5 group_fd -1 flags 0x8 = 9
sys_perf_event_open: pid -1 cpu 6 group_fd -1 flags 0x8 = 10
sys_perf_event_open: pid -1 cpu 7 group_fd -1 flags 0x8 = 11
---------------------------------------------------------------
CPU0 7.628452 cpu-clock (msec) # 0.509 CPUs utilized
CPU1 7.622132 cpu-clock (msec) # 0.509 CPUs utilized
CPU2 7.648510 cpu-clock (msec) # 0.511 CPUs utilized
CPU3 7.644246 cpu-clock (msec) # 0.510 CPUs utilized
CPU4 7.670066 cpu-clock (msec) # 0.512 CPUs utilized
CPU5 7.689670 cpu-clock (msec) # 0.513 CPUs utilized
CPU6 7.687918 cpu-clock (msec) # 0.513 CPUs utilized
CPU7 7.715103 cpu-clock (msec) # 0.515 CPUs utilized
调用sys_perf_event_open
反射(reflect)出 pid = -1
,这意味着与命令关联的 pid ls
没有被测量。这些是per-CPU
的特点测量,这意味着事件 cpu-clock
针对特定的 CPU 而不是特定的任务。将监视在该特定 CPU 上运行的所有线程。测量将针对每个 CPU 独立开始。这些测量只会持续到命令 ls
执行。
cpu-clock
事件(以及 task-clock
)事件使用软件 hrtimer
取样。在测量开始时,函数 cpu_clock_event_start
here使用如下示例周期设置 hrtimer-
} else {
period = max_t(u64, 10000, hwc->sample_period);
}
hrtimer_start(&hwc->hrtimer, ns_to_ktime(period),
HRTIMER_MODE_REL_PINNED_HARD);
}
hrtimer
之后过期,函数 perf_swevent_hrtimer将读取并更新 cpu-clock
周期性地计算值。 cpu-clock
的值反射(reflect)上一次采样值和当前采样值之间的运行差异(以 jiffies 为单位)。要获得 CPU 使用率百分比,您可以除以 cpu-clock
值由命令运行所用的挂钟时间决定。
命令运行所用的挂钟时间得到维护here .特别是,查看 t1
的计算和 t0
.
所以 2) 应该是 --> 在分解的情况下,“它是在命令执行的持续时间内在该 CPU 上运行的所有线程所使用的 CPU 的一部分。”
案例 1:
使用 perf stat <command>
./perf stat -vvv ls
Using CPUID GenuineIntel-6-4F
intel_pt default config: tsc,pt,branch
------------------------------------------------------------
perf_event_attr:
type 1
size 112
config 0x1
sample_type IDENTIFIER
read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING
disabled 1
inherit 1
enable_on_exec 1
exclude_guest 1
------------------------------------------------------------
sys_perf_event_open: pid 1833 cpu -1 group_fd -1 flags 0x8 = 3
------------------------------------------------------------
2.120763 task-clock (msec) # 0.038 CPUs utilized
现在调用 sys_perf_event_open
反射(reflect)出 pid=1833
这是 pid
与命令相关的进程 ls
.但是,CPU = -1
的值意味着每当这个进程被调度时,不管它被调度到哪个 CPU,软件 hrtimer 计数 task-clock
将会被更新。请注意,此计数现在将特定于进程以及仅与此进程关联的所有线程。
调度程序在函数的帮助下维护有关进程何时被安排进来和安排出去的信息 perf_event_task_sched_in和 perf_event_task_sched_out .函数update_context_time维护任务执行的总时间。
static void update_context_time(struct perf_event_context *ctx)
{
u64 now = perf_clock();
ctx->time += now - ctx->timestamp;
ctx->timestamp = now;
}
ctx->time
维护任务在任何特定 CPU 上执行的总时间。 ctx->timestamp
value 维护软件 hrtimer 到期时的时间戳,或者与此进程关联的事件被安排出去,或者事件被禁用。
比率的计算现在是进程在任何 CPU 上执行所花费的总时间除以进程执行的挂钟时间。挂钟时间计算与案例 2 相同。
关于performance - "1.234 CPUs used"在 perf 输出中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61442853/
我在 OS X 中构建菜单栏项时找到了一些示例代码。它使用了单个 |我不确定它的实际含义。 (我想做的是在菜单项左键单击时调用一个函数,但在右键单击时显示菜单) 这是我的代码 //Get refere
为什么它在第 23 行抛出编译错误。'a' 是 Apple 类的对象,col 是包含 Apple 对象的列表,但它仍然是抛出下面提到的编译错误: 类型 Collection 中的方法 add(capt
我有一个类A,它扩展了抽象类B。 让B有一个 protected 字段值 我想在 A 中使用这个字段。如果 A 没有 value,我可以编写 this.value 从 B 获取它。 与super.va
DBLint 用于检查数据库状态。有46条规则。在 www.dblint.org 上对每条规则都有一些简单的解释,但对规则 31 的描述如下: 定义的主键不是最小键:主键是最小的 super 键。如果
var aa: (()?) = (john.residence?.address = someAddress) var bb: ()? = john.residence?.printNumberOfR
我对 jquery 的可重用插件有点陌生。我已经多次遇到这段代码,但无法弄清楚究竟发生了什么。 (function( $ ){ ... })( jQuery ); 谁能帮我解答一下吗? 最佳答案
这个问题已经有答案了: int foo (int argc, ...) vs int foo() vs int foo(void) in C (4 个回答) 已关闭 9 年前。 所以我最近在 Hack
typedef struct Element { struct Element *next; void *data; } Element; 在 pop 函数中,(!(elem = *s
数据加载两次...意味着 AsyncTask onPostExecute 加载相同的数据两次?我的 AsyncTask onPostExecute 运行两次它加载相同的数据...我正在运行异步任务以从
运行“yomeanjs”时,我无限期地挂起“这可能需要几分钟”。当我尝试运行 grunt 时,它失败了,与 npm start 相同。 我使用的是 Win 8.1,并安装了最新的 Node 和 Mon
我正在看 big nerd ranch 的“Android Programming”中的这个页面,我对下面的句子感到困惑。它声明“当 Activity 被隐藏时, Activity 对象不存在”。这让
是否 const vector意味着它的元素是const也一样? 在下面的代码中, v[0].set (1234);在 void g ( const vector & v )产生编译器错误 const
我是 xml 相关事物的新手 我无法理解: SelectNodes(@"//Form/*[. = 'on']"); 注:SelectNodes是 XmlNode 的函数.(与 XmlDocument
我想方便地控制命令行参数。因此我想使用 ShellLib。 我的代码是这样的: ... #include ... EFI_STATUS EFIAPI UefiMain ( EFI_HANDL
着眼于更正 Debian 上/etc/init.d/hostapd 中的一个问题。但是,我不知道这行代码是做什么的,也不知道它是如何工作的 [ -n "$DAEMON_CONF" ] || exit
有没有人遇到过类似我下图所示的情况? 我有一个变量 landingBools.didSlowPast40Knots(正如您从调试打印输出中看到的那样)为假,但出于某种原因,if 语句评估为真。 知道为
我设法使用 flexbox 和一些非常基本的 JavaScript 为自己构建了三个下拉菜单。 因为我不太了解,所以我使用了一个简单的函数三次,而不是使用参数、变量和其他东西。我将其称为丑陋的“蛮力”
这周刚开始学习 javascript。我有一个非常菜鸟的问题。 exports.displayName = (undefined: ?string); 在 React Native 中意味着什么? 这
我正在阅读有关 NaN here 的内容它说: A comparison with a NaN always returns an unordered result even when compari
编码格式:引入*表示“从头开始重复”。例子。输入-{a,b,a,b,c,a,b,a,b,c,d}可以写成{a,b,*,c,*,d}。输出:5;例如2:ABCABCE,输出- 5。 这里*表示从头开始重
我是一名优秀的程序员,十分优秀!