- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
据我了解,USER_HZ
常量是在 Linux 2.6 中添加的,以解决由用户空间中的 HZ
值期望引起的问题:在以前的版本中Linux,更改 HZ
值可能会导致用户空间应用程序中的值无意间缩放。
我对 USER_HZ
常量如何解决这个缩放问题感到困惑。例如,假设用户空间应用程序将 jiffies 转换为秒:
long MY_HZ = sysconf(_SC_CLK_TCK);
/* num_jiffies acquired from /proc but
* simplified to 1000 here for clarity */
long num_jiffies = 1000;
long num_seconds = num_jiffies / MY_HZ;
由于用户空间应用程序通过 sysconf
调用确定 HZ
值,这是否可以防止缩放问题?
另一方面,如果用户空间应用程序确实将 HZ
值硬编码到它们的源代码中,那么 USER_HZ
常量防止缩放问题——用户空间应用程序将使用它们的硬编码常量而不是系统的USER_HZ
,并且不能保证硬编码-coded 常量匹配 USER_HZ
?
此外,用户空间可用的所有时钟滴答值(例如 /proc
)是否都已缩放到 USER_HZ
?用户空间程序如何知道 jiffies 中的值是缩放到 HZ
还是 USER_HZ
?
最佳答案
USER_HZ
作为折衷方案实现:尽管用户代码可以具有不同于 USER_HZ
的硬编码值, Linux 内核历史上有一个 HZ
100 的值——因此几乎所有硬编码 HZ
现有用户代码中的值已设置为 100。
这是发生的事情的本质:
The Linux kernel used to have HZ set at a constant 100 for all
architectures. As additional architecture support was added, the HZ
value became variable: e.g. Linux on one machine could have a HZ
value of 1000 while Linux on another machine could have a HZ value
of 100.
This possibility of a variable HZ value caused existing user code,
which had hardcoded an expectation of HZ set to 100, to break due to
the exposure in userspace of kernel jiffies which may have be based
on a HZ value that was not equal to 100.
To prevent the chaos that would occur from years of existing user
code hardcoding a constant HZ value of 100, a compromise was made:
any exposure of kernel jiffies to userspace should be scaled via a
new USER_HZ value -- thus preventing existing user code from
breaking on machines with a different HZ value, while still allowing
the kernel on those machines to have a HZ value different from the
historic 100 value.
现在,这留下了为什么一些内核 jiffies 暴露给未缩放的用户空间的问题(例如在 /proc/timer_list
中)。 Thomas Gleixner explains :
All instances which are de facto APIs, syscalls and also various files in proc/ must be in USER_HZ because userspace applications depend on the USER_HZ value.
proc/timer_list is exempt from that because its more a debugging interface which is not part of the strict kernel API. And we really want to see the real values and not the scaled USER_HZ ones for that purpose. I hope that answers your question.
因此,所有属于严格内核 API 的实例都旨在通过 USER_HZ
扩展内核 jiffies。在暴露于用户空间之前,其他实例是免除的。
The Tick Rate: HZ section of Linux Kernel Development Second Edition by Robert Love
关于linux - USER_HZ 如何解决 jiffy 缩放问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17410841/
我搜索了整个 Linux-3.13 代码,但找不到定义。也许这个问题很简单,但是却让我困惑了很久。而且我无法通过 Google 找到类似的主题 :( , 谁能告诉我? 提前致谢! 大家好,我找到了。它
来自 here : The value of HZ varies across kernel versions and hardware platforms. On i386 the situatio
内核维护一个名为 jiffies 的全局变量。它保存系统启动时的滴答/定时器中断数。 每次发生定时器中断时,内部内核计数器的值都会增加。 在无滴答内核/动态滴答中,中断不会定期发生,jiffies 的
我正在使用 msecs_to_jiffies(msecs) 来获得延迟。我需要延迟 16 毫秒。但问题是函数为输入 1-10 返回 1,为 11-20 返回 2,为 21-30 返回 3 等等。因此我
我有一段代码,我想以秒为单位计算时间。虽然我得到的时间是以 jiffies 为单位的,但我如何将它转换为秒? 这是我的内核代码: #include #include #include #incl
我正在尝试添加 davisp/jiffy作为 Ejabberd 中的 rebar 依赖项,因此我可以在模块中进行一些 JSON 解析。我发现this tutorial ,他们将 Jiffy 添加为另一
这个问题在这里已经有了答案: Python: How to get number of mili seconds per jiffy (3 个答案) 关闭 8 年前。 在 linux 上,我正在用
在内核中,我想将 jiffies 与毫秒进行比较。我们可以在 if 语句中用 5 毫秒这样做吗?你能帮帮我吗? 吉菲斯>5 最佳答案 来自include/linux/jiffies.h: extern
我在嵌入式系统上使用 Linux 2.6.36。我尝试用信号量来编程。为此,我需要 jiffies.h 库中的一个函数。到目前为止一切都很好。当我包含 Lib 时 无论是这样 #include 或者
我想获取Linux“jiffies”变量的物理地址,这样我就可以通过读取这个内存地址的内容来读取它。 最佳答案 在内核模式代码(例如可加载内核模块)中,您需要包含 头文件。它包含 jiffies 的定
queue_delayed_work(struct workqueue_struct *wq,struct delayed_work *dwork,unsigned long delay) 在上面的函
据我所知,Linux内核中的“jiffies”是开机后的滴答数,一秒内的滴答数用“HZ”来定义,所以理论上: (uptime in seconds) = jiffies / HZ 但根据我的测试,上述
cat /proc/stat gives values in jiffies cat /proc/[pid]/stat gives values in tick count. tickcount和ji
重启后,jiffies 没有初始化为零,而是初始化为某个高值(接近环绕)。 例如(重启后立即): cat /proc/timer_list | grep jiffies .idle_jiffi
我有一段用户空间代码正在解析/proc/PID/task/TID/stat 以获取 cpu 使用情况。我可以使用 HZ 来获取每秒的 jiffies,但是这段代码可以移动到另一台具有不同配置值的机器。
如何在 Linux 中手动将 jiffies 转换为毫秒,反之亦然?我知道内核 2.6 有一个功能,但我正在研究 2.4(家庭作业),虽然我查看了代码,但它使用了很多宏常量,我不知道它们是否在 2.4
在 Linux 上,jiffies 和 ticks per second 之间有区别吗?我了解 jiffies 和 HZ 之间的关系。但我无法理解每秒滴答数是如何相关的。我在某处读到它是一个内部操作系
假设我们有如下代码: if (timeout > jiffies) { /* we did not time out, good ... */ } else { /* we timed
据我了解,USER_HZ 常量是在 Linux 2.6 中添加的,以解决由用户空间中的 HZ 值期望引起的问题:在以前的版本中Linux,更改 HZ 值可能会导致用户空间应用程序中的值无意间缩放。 我
我正在将 3.14 移植到成功运行 3.2 内核的基于 ARM 的 SOC。 我陷入了校准 jiffies 的代码中。 calibrate_delay_converge()-init/calibrat
我是一名优秀的程序员,十分优秀!