在我的桌面上,我有一个小小部件告诉我当前的CPU使用情况.它还显示了我的两个核心的使用情况.
我总是想知道,CPU如何计算其处理能力的使用量?此外,如果CPU挂起来进行一些强烈的计算,它怎么能(或任何处理此活动)检查使用情况,而不会挂断?
从第11章(性能和可扩展性)和部分命名上下文切换的的JCIP书:
当切换新线程时,它所需的数据不太可能在本地处理器高速缓存中,因此上下文切换会导致一连串的高速缓存未命中,因此线程在首次调度时运行速度会慢一些.
language-agnostic cpu concurrency cpu-architecture cpu-cache
GPU如何比CPU更快?我读过有关GPU如何在破坏密码方面比CPU更快的文章.如果是这样的话那为什么CPU的设计不能像GPU一样速度均匀?
我一直在寻找对VisualVM上下文中"自我时间"实际引用的一致而清晰的解释,以及它与"自我时间(cpu)"的区别.'自我时间[%]'也指自我时间或自我时间CPU.
似乎没有太多关于此的文档,或者至少我没有找到它.所以任何想法/意见将不胜感激.
我在某处读到了setInterval是CPU密集型的.我创建了一个使用setInterval的脚本并监视CPU使用情况但没有注意到更改.我想知道是否有遗漏的东西.
代码所做的是每隔100毫秒检查URL中的哈希值(#之后的内容)的变化,如果它已经改变,则使用AJAX加载页面.如果它没有改变,没有任何反应.是否会有任何CPU问题.
假设你的Java程序占用了100%的CPU.它有50个线程.你需要找到哪个线程是有罪的.我还没有找到可以提供帮助的工具.目前我使用以下非常耗时的例行程序:
jstack <pid>
,其中pid是Java进程的进程ID.找到它的简单方法是运行JDK中包含的另一个实用程序 - jps
.最好将jstack的输出重定向到文件.或者,您可以附加到Eclipse中的Java进程并尝试逐个挂起线程,直到您遇到占用CPU的那个.在单CPU机器上,您可能需要首先降低Java进程的优先级才能移动.即便如此,由于超时,Eclipse通常无法附加到正在运行的进程.
我本来期望Sun的visualvm
工具可以做到这一点.
有人知道更好的方法吗?
我想指定特定pthread的cpu-affinity.到目前为止,我发现的所有引用都涉及设置进程的cpu-affinity(pid_t)而不是线程(pthread_t).我尝试了一些传递pthread_t的实验,正如预期的那样,它们会失败.我想做一些不可能的事吗?如果没有,你能发一个指针吗?太感谢了.
是否有一个API来获取Linux中可用的CPU数量?我的意思是,不使用/ proc/cpuinfo或任何其他sys-node文件......
我已经使用sched.h找到了这个实现:
int GetCPUCount()
{
cpu_set_t cs;
CPU_ZERO(&cs);
sched_getaffinity(0, sizeof(cs), &cs);
int count = 0;
for (int i = 0; i < 8; i++)
{
if (CPU_ISSET(i, &cs))
count++;
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
但是,使用公共库是不是更高级别?
这是一个多次被问过的问题,但是我找不到很好的支持答案.
许多人建议使用top命令,但如果你运行top一次(因为你有一个脚本,例如每1秒收集一次Cpu使用),它将始终给出相同的Cpu使用结果(例1,例2).
计算CPU使用率的更准确方法是从中读取值/proc/stat
,但大多数答案仅使用前4个字段/proc/stat
来计算它(此处为一个示例).
/proc/stat/
从Linux内核2.6.33开始,每CPU核心有10个字段!
我还使用/ proc/stat问题在Linux中找到了这个准确计算CPU利用率的问题,该问题指出了同样的问题 - 大多数其他问题只考虑了许多领域中的4个问题 - 但这里给出的答案仍然是"我在认为"(不确定),除此之外,它只关注前7个领域(满分为10个/proc/stat/
)
这个 perl脚本使用所有字段来计算CPU使用率,经过一些进一步的调查后我再也认为这是不正确的.
采取快速查找到内核代码后在这里,它看起来像,例如,guest_nice
并且guest fields
总是与一起增加nice
和user
(所以他们不应该被包含在CPU使用率计算,因为它们包含在nice
和user
领域已经)
/*
* Account guest cpu time to a process.
* @p: the process that the cpu time gets accounted to
* @cputime: the cpu time spent in virtual machine since the last update …
Run Code Online (Sandbox Code Playgroud) 在Linux中是否有任何方法可以将一个CPU内核分配给特定的给定进程,并且不应该在此内核上安排任何其他进程或中断处理程序?
我已经阅读了Linux 绑定进程中使用taskset实用程序对CPU的进程关联,但这并没有解决我的问题,因为它只是试图将给定的进程关注到该核心,但是可能可以在此核心上安排其他进程,这是我想避免的.
我们应该更改内核代码以进行调度吗?
cpu ×10
linux ×3
c ×2
cpu-usage ×2
java ×2
linux-kernel ×2
performance ×2
processor ×2
affinity ×1
ajax ×1
algorithm ×1
calculator ×1
concurrency ×1
cpu-cache ×1
gpu ×1
javascript ×1
profiling ×1
scheduling ×1
setinterval ×1
visualvm ×1