如何通过ADB shell了解Android内核的HZ值? (没有任何编码)
我检查了How to check HZ in the terminal?,但这不适用于Android ADB shell。
有什么建议吗?
答案 0 :(得分:5)
您可以通过在 jiffies 中经过一段时间并将其除以秒中的已用时间来推导出内核空间HZ值。
您可以从 / proc / timer_list 文件中获取 jiffies 和纳秒中的系统正常运行时间。
now at <nanoseconds> nsecs
行<nanoseconds>
将是纳秒 jiffies: <jiffies>
行(任何处理器都可以)<jiffies>
将是 jiffies 中的正常运行时间
INITIAL_JIFFIES
向前偏移 - 因此它可能无法从0
开始计数。然而,这不应该影响我们的计算结果,因为我们关注经过时间而不是绝对正常运行时间。通过在经过的一段时间内取这两个值,您可以使用以下等式计算HZ值:
(jiffies_after - jiffies_before)
HZ = -----------------------------------------
((nsecs_after - nsecs_before)/1000000000)
如果您碰巧拥有awk
(可能通过BusyBox),您可以自动执行此计算:
$ awk '/^now at/ { nsec=$3; } /^jiffies/ { jiffies=$2; } END { print nsec, jiffies; system("sleep 1"); }' /proc/timer_list | awk 'NR==1 { nsec1=$1; jiffies1=$2; } /^now at/ NR>1 { nsec2=$3; } /^jiffies/ NR>1 { jiffies2=$2; } END { dsec=(nsec2-nsec1)/1e9; djiff=(jiffies2-jiffies1); print int(djiff/dsec); }' - /proc/timer_list
由于舍入误差,HZ值可能稍微偏离;您可能希望多次执行此计算并对其进行平均。大多数现代内核的内核空间HZ
设置为250
。
这是相同的命令,分布在几行上,以阐明它是如何工作的:
$ awk '
> /^now at/ { nsec=$3; }
> /^jiffies/ { jiffies=$2; }
> END {
> print nsec, jiffies;
> system("sleep 1");
> }
> ' /proc/timer_list | awk '
> NR==1 { nsec1=$1; jiffies1=$2; }
> /^now at/ NR>1 { nsec2=$3; }
> /^jiffies/ NR>1 { jiffies2=$2; }
> END {
> dsec=(nsec2-nsec1)/1e9;
> djiff=(jiffies2-jiffies1);
> print int(djiff/dsec);
> }
> ' - /proc/timer_list
/^now at/ { nsec=$3; }
nsec
/^jiffies/ { jiffies=$2; }
jiffies
END {
print nsec, jiffies;
system("sleep 1");
' /proc/timer_list | awk '
awk
NR==1 { nsec1=$1; jiffies1=$2; }
nsec
和jiffies
值从之前的awk
设置为nsec1
和jiffies1
/^now at/ NR>1 { nsec2=$3; }
nsec2
/^jiffies/ NR>1 { jiffies2=$2; }
jiffies2
END {
dsec=(nsec2-nsec1)/1e9;
djiff=(jiffies2-jiffies1);
print int(djiff/dsec);
' - /proc/timer_list
答案 1 :(得分:2)
如果您已安装busybox
:
T1=`grep gp_timer /proc/interrupts| busybox awk '{print$2}'`;sleep 1;T2=`grep gp_timer /proc/interrupts| busybox awk '{print$2}'`;echo $((T2-T1))