如何使用ADB shell获取HZ

时间:2013-06-27 07:44:49

标签: android linux-kernel adb

如何通过ADB shell了解Android内核的HZ值? (没有任何编码)

我检查了How to check HZ in the terminal?,但这不适用于Android ADB shell。

有什么建议吗?

2 个答案:

答案 0 :(得分:5)

理论

您可以通过在 jiffies 中经过一段时间并将其除以中的已用时间来推导出内核空间HZ值。

您可以从 / proc / timer_list 文件中获取 jiffies 纳秒中的系统正常运行时间。

  • 纳秒的系统正常运行时间
    • 搜索now at <nanoseconds> nsecs
    • <nanoseconds>将是纳秒
    • 的正常运行时间
  • jiffies 中的系统正常运行时间
    • 搜索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 的数量保存到变量jiffies
  • END {
    • print nsec, jiffies;
      • 打印出以空格分隔的纳秒 jiffies
    • system("sleep 1");
      • 在我们计算HZ值
      • 时,睡眠一秒以防止除以0
  • ' /proc/timer_list | awk '
    • 处理 / proc / timer_list 文件
    • 将输出管道输出到awk
    • 的新实例
  • NR==1 { nsec1=$1; jiffies1=$2; }
    • 分别将nsecjiffies值从之前的awk设置为nsec1jiffies1
  • /^now at/ NR>1 { nsec2=$3; }
    • 纳秒的数量保存到变量nsec2
  • /^jiffies/ NR>1 { jiffies2=$2; }
    • jiffies 的数量保存到变量jiffies2
  • END {
    • dsec=(nsec2-nsec1)/1e9;
      • 以秒计算更改
    • djiff=(jiffies2-jiffies1);
      • 计算 jiffies中的变化
    • print int(djiff/dsec);
      • 将HZ值打印为整数
  • ' - /proc/timer_list
    • 处理标准输入,然后处理 / 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))