我有一个单线程应用程序,它(带有任务集和CPU隔离)固定(纺丝并)到一个内核(即isolcpus = 12-23 nohz_full = 21,22,23 rcu_nocbs = 12-23;我有2个CPU,并且每个12核心-Skylake):
exec taskset -c 22 setuidgid myuser envdir ./env -c = /opt/bin/UtilityServer > /tmp/logs/utility-server.log
出于某种原因,在运行了几个小时后,我检查了统计信息:
UtilityServer (1934, #threads: 1)
-------------------------------------------------------------------
se.exec_start : 78998944.120048
se.vruntime : 78337609.962134
se.sum_exec_runtime : 78337613.040860
se.nr_migrations : 6
nr_switches : 41
nr_voluntary_switches : 31
nr_involuntary_switches : 10
se.load.weight : 1024
policy : 0
prio : 120
clock-delta : 13
mm->numa_scan_seq : 925
numa_migrations, 0
numa_faults_memory, 0, 0, 0, 0, 1
numa_faults_memory, 1, 0, 0, 0, 1
numa_faults_memory, 0, 1, 1, 1, 0
numa_faults_memory, 1, 1, 0, 1, 9
问题:
se.nr_migrations
,nr_switches
,nr_voluntary_switches
,nr_involuntary_switches
为零)?鉴于我的应用程序确实想使用整个内核。nr_voluntary_switches
跟踪了我的应用程序自愿放弃核心的次数?如果是,在什么情况下我的应用程序将放弃核心?我的应用程序确实执行了一些非阻塞磁盘I / O(即fwrite_unlocked()
等),但网络事务为零。nr_involuntary_switches
= 10,这意味着我的应用程序被迫切换了10次吗?numa_faults_memory
之后的数字是什么意思?如果有问题,我正在使用3.10.0-862.2.3.el7.x86_64。
谢谢!