在Linux机器上,我需要显示上周每小时的平均CPU利用率.这些信息是否记录在某处?或者我是否需要编写一个每15分钟唤醒一次的脚本来将/ proc/loadavg复制 到日志文件中?
编辑:我不允许使用Linux以外的任何工具.
我听到很多数据应该在内存中正确对齐,以提高访问效率.CPU访问内存在字边界上.
因此,在以下场景中,CPU必须进行2次内存访问才能获得单个字.
Supposing: 1 word = 4 bytes
("|" stands for word boundary. "o" stands for byte boundary)
|----o----o----o----|----o----o----o----| (The word boundary in CPU's eye)
----o----o----o---- (What I want to read from memory)
Run Code Online (Sandbox Code Playgroud)
为什么会这样?什么是CPU的根本原因只能读取字边界?
如果CPU只能访问4字节字边界,则地址线应仅需要30位,而不是32位宽.因为CPU的眼中最后2位始终为0.
更重要的是,如果我们承认CPU必须读取字边界,为什么边界不能从我想要读取的地方开始?似乎边界在CPU眼中是固定的.
根据AndreyT的说法,似乎边界设置是硬连线的,它是由内存访问硬件硬连线的.就这一点而言,CPU是无辜的.
非常感谢...
在FreeBSD v8.1上Linux的/ proc/cpuinfo相当于什么?我的应用程序读取/ proc/cpuinfo并将信息保存在日志文件中,我该怎么做才能在FreeBSD上记录类似的信息?
示例/ proc/cpuinfo如下所示:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Xeon(R) CPU E5420 @ 2.50GHz
stepping : 8
cpu MHz : 2499.015
cache size : 6144 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge …Run Code Online (Sandbox Code Playgroud) 我试图想出一个启发式来估计一个进程或一个线程在两个时间点之间消耗了多少能量(例如,在焦耳中).这是在PC(Linux/x86)上,而不是移动设备,因此统计数据将用于比较采用类似挂钟时间的计算的相对能效.
这个想法是收集或采样硬件统计数据,如周期计数器,p/c状态或动态频率,总线访问等,并提出一个合理的测量间能量使用公式.我问的是这是否可能,以及这个公式可能是什么样子.
想到的一些挑战:1)正确地考虑到其他进程(或线程)的上下文切换.
2)正确计算CPU外部使用的能量.如果我们假设I/O可以忽略不计,这意味着主要是RAM.分配数量和/或访问模式如何影响能源使用?(也就是说,假设我有办法测量动态内存分配,例如,使用修改后的分配器.)
3)使用CPU时间作为估计仅限于粗粒度和错误计算,仅限 CPU能量使用,并假设固定时钟频率.它包括但不能很好地考虑等待RAM的时间.
什么是描述CPU利用率和能源消耗(电/热)之间关系的函数.
我想知道它是否是线性/次线性/ exp等.
我正在编写一个程序来降低其他程序的CPU利用率/负载,我主要担心的是我能从多大程度上受益于能源......
此外,我的服务器主要用作数据中心(无头)中的Web服务器或DB.
如果数据中心需要更多的冷却功率,我也需要考虑这一点.我还需要知道CPU利用率对整个机器功耗的影响.
我在AWS EC2大型实例上有一个<20MB pdf文件的目录(每个pdf代表一个广告).我正在尝试使用ruby和DM-Paperclip将每个pdf文件上传到S3.
大多数文件上传成功,但有些文件似乎需要数小时才能将CPU挂起100%.我通过在相关部分中打印调试语句找到了导致问题的代码行.
# Takes an array of pdf file paths and uploads each to S3 using dm-paperclip
def save_pdfs(pdfs_files)
pdf_files.each do |path|
pdf = File.open(path)
ad = Ad.new
ad.pdf.assign(pdf) # <= Last debug statment is printed before this line
begin
ad.save
rescue => e
# log error
ensure
pdf.close
end
end
Run Code Online (Sandbox Code Playgroud)
为了帮助解决问题,我将过程固定在100%的过程中.结果是数十万行像这样:
...
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3543, ...}) = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3543, ...}) = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3543, ...}) = 0
... 500K lines
Run Code Online (Sandbox Code Playgroud)
接下来几千:
...
brk(0x1224d0000) = …Run Code Online (Sandbox Code Playgroud) 我想动态查看CPU每个核心的使用情况,包括花费用户模式和内核,我应该怎么做?
我试图为dd命令的CPU使用量设置一个硬限制.我创建了以下单元文件
[Unit]
Description=Virtual Distributed Ethernet
[Service]
ExecStart=/usr/bin/ddcommand
CPUQuota=10%
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
它调用以下简单脚本
#!/bin/sh
dd if=/dev/zero of=/dev/null bs=1024k
Run Code Online (Sandbox Code Playgroud)
正如我在本指南中看到的: http ://www.freedesktop.org/software/systemd/man/systemd.resource-control.html我的dd服务的CPU使用率不应超过10%.但是当我运行system-cgtop命令时,使用率约为70-75%.
我有什么错误的想法,我该如何解决?
PS当我执行时,systemctl show dd我得到有关CPU的以下结果
CPUShares=18446744073709551615
StartupCPUShares=18446744073709551615
CPUQuotaPerSecUSec=100ms
LimitCPU=18446744073709551615
Run Code Online (Sandbox Code Playgroud) 我很难理解当翻译旁视缓冲区的前两个级别导致未命中时会发生什么?
我不确定特殊硬件电路中是否出现"页面行走",或者页表是否存储在L2/L3高速缓存中,或者它们是否只存在于主存储器中.
我知道线程有一个消息队列,处理程序能够将runnables或消息推送到它们,但是当我使用Android Studio工具分析我的android应用程序时,有一个奇怪的过程:
android.os.MessageQueue.nativePollOnce
它使用CPU比所有其他进程更多.它是什么以及如何减少CPU花费的时间?您可以在下面找到分析器结果.