如何在没有root权限的情况下获取Linux(Ubuntu)下的CPU序列号?
我尝试了cpuid命令,它没有root权限,但似乎返回所有零(我相信因为需要在BIOS中更改某些内容).
你能否建议我从没有root权限的程序中检索CPU串行的另一种方法,而不必修改BIOS?
我正在深入研究多线程编程并考虑使用原子操作进行无锁引用计数。
很明显,至少在恒定规模上,原子操作可能比非原子操作慢。我担心的是其他 CPU 同步来执行原子操作。
我想知道在核心 A 上执行原子操作是否(如果,以及多少)影响其他核心的性能,其中:
维基百科说:
在计算中,抢占是暂时中断计算机系统正在执行的任务的行为,不需要它的合作,并打算在以后恢复任务。
其他消息来源说:
[...] 抢占意味着从一个进程中强行夺走处理器并将其分配给另一个进程。[操作系统 (Self Edition 1.1), Sibsankar Haldar ]
当程序在执行过程中出现中断并且调度程序选择一些其他程序执行时,就会发生程序的抢占。[操作系统:基于概念的方法,2E,DM Dhamdhere ]
所以,我的理解是,如果进程被中断(通过硬件中断,即 I/O 中断或定时器中断),并且在处理中断后调用的调度程序选择另一个进程运行(根据CPU调度算法)。如果调度器选择了被中断的进程,我们就没有进程抢占(中断不一定会导致抢占)。
但我发现许多其他来源以下列方式定义抢占:
抢占是从程序中强制释放 CPU。[操作系统:基于概念的方法,2E,DM Dhamdhere ]
您可以看到同一本书报告了两种不同的抢占定义。在后者中没有提到必须将 CPU 分配给另一个进程。根据这个定义,抢占只是“中断”的另一个名称。当硬件中断出现时,进程被中断(它从“运行”状态切换到“就绪”状态)或被抢占。
所以我的问题是:这两个定义中哪一个是正确的?我很困惑。
我想将 apache spark 与 GPU 集成,但 spark 可以在 java 上运行,而 gpu 使用 CUDA/OpenCL,那么我们如何合并它们。
我们在生产中看到了这个间歇性问题。CPU 随机固定在 50%(2 核 CPU),并且永远不会回来。唯一的选择是重新启动服务器。\n这就是 Dynatrace 中 CPU 的显示方式
\n\n
\n这就是我们通过 dynatrace 分析时线程转储的样子。
通过我的研究,似乎存在 jdk 缺陷
\n\nCalling \'java.util.zip.Deflater.finish()\' prematurely hangs the application. \nThe application is spinning consuming one cpu\nRun Code Online (Sandbox Code Playgroud)\n\nhttps://bugs.openjdk.java.net/browse/JDK-8060193
\n\n仅当涉及某些多个过滤器时才会随机发生。
\n\n我能够在具有 JDK“1.8.0_201”的 CentOs 虚拟机上使用上述 jira 中的测试类来重现此问题\n这令人惊讶,因为根据文档和票证,此问题已得到修复。
\n\n经过进一步研究,发现jdk中再次打开了类似的缺陷。
\n\nhttps://bugs.openjdk.java.net/browse/JDK-8193682
\n\n现在团队不愿意继续研究它,除非有人可以重现它。\n由于它是在生产中随机发生的,我不确定如何重现它。https://bugs.openjdk.java.net/browse/JDK-8060193中的测试类仍然存在问题。这是否是一个有效的测试用例?\n如果这是有效的,那么每次我们发送压缩数据时都会出现问题。
\n\n关于为什么会发生这种情况以及我们如何解决这个问题有任何指示吗?
\n\n更新:\n在我们正在使用的库之一中,它抛出异常\n格式错误的 UTF-8 字符(意外的非连续字节 0x00,紧接在起始字节 0xfd 之后)
\n\nLastName, First\xe2\x80\x99Name\n正如我们所见,这不是一个常规的撇号。我们可以通过从 word 中复制粘贴来实现这一点,它会自动将常规撇号更正为这个时髦的字符。
\n\n我们的重现器确实抛出了一个错误,但 CPU 并没有卡住。我认为这是在高流量和流量的情况下发生的。 …
所以我有这个 C++ 程序,它基本上解析巨大的数据集文件并将内容加载到内存中的 hashmap 中(这部分在主线程中受到限制,所以它永远不会占用大量时间)。完成后,我将指针翻转到新的内存位置,并对旧的内存位置调用 delete。除此之外,程序通过在内存映射(在主线程上)中查找内容来进行传入请求匹配。假设那些巨大的地图被包裹在Evaluator类中:
Evaluator* oldEvaluator = mEvaluator;
Evaluator* newEvaluator = parseDataSet();
mEvaluator = newEvaluator;
delete oldEvaluator;
//And then on request processing:
mEvaluator.lookup(request)
Run Code Online (Sandbox Code Playgroud)
映射可以包含数百万个字符串对象作为键。它们是常规字符串,可以是 ip、UserAgent 等请求属性,但每个字符串都是插入到 STL unordered_map 中的字符串对象。
数据集会定期更新,但大多数情况下,程序只是对内存中的数据集进行请求属性匹配,它很好,高效且没有错误,除非发生新数据集的批量消耗。使用这个大型数据集的另一种方法是使用流,但这是一个相对长期的解决方案。
它曾经是一个使用事件驱动模型的单线程程序,但是每次放置一个完整的新集合并调用销毁时,删除整个事物花费的时间太长,从而阻塞了请求处理。
所以我把这种地图的删除放到了一个单独的线程上。问题是现在删除和请求处理似乎同时发生,我可以看到请求处理线程非常明显,急剧放缓。
当然,主机上还有其他进程在运行,我确实希望这 2 个线程竞争 CPU 周期。但我没想到请求匹配线程会大幅放缓。平均而言,一个请求应该被处理 500us 级别,但是当删除线程正在运行时,它会慢到 5ms。有时 cpu 会中断匹配的线程(因为它花费的时间太长),它可能会持续 50 毫秒,或 120 毫秒等。在极端情况下,一个请求可能需要整个 1000 毫秒来处理,这大约是整个时间数据结构删除需要另一个线程。
了解这种减速的根本原因的最佳方法是什么?它更像是 CPU 还是内存带宽瓶颈?我想象着只要我把它放在一个单独的线程上,我就不会在乎它有多慢,因为它毕竟必须一个一个地删除字符串对象,所以我没想到它会影响另一个线程......
编辑:多亏了一些评论/答案似乎已经指出了几个可能的原因:
在 Azure 中比较两个不同的 VM 系列时,我看到一个有核心,另一个有 vCPU。撇开内核/CPU 的数量、内存和处理器类型(英特尔至强 E/Platinum 等)不谈,两者相比有什么优势?我知道 CPU 可以有多个核心,但在 Azure 中,4 个 vCPU 和 4 个 vCore 之间有什么区别?
我在 AWS Fargate 上以 1 vCPU/2GB 内存任务配置部署了一个节点应用程序。我一直想知道 Node.js 在此设置上运行时与可用 vCPU 的关系。
根据 AWS 文档,vCPU 只是 intel Xeon CPU 核心上的超线程:Fargate 中的 vCPU 真正意味着什么?。那么,如果整个程序仅在一个本身已经是超线程的 vCPU 上运行,那么 libuv 如何运行线程池(默认情况下运行 4 个线程)呢?另外,Node 程序在具有 0.256 vCPU 的较低配置上运行的配置上的行为如何?
此外,Fargate 通过运行配置中指定的任务数量来自动处理扩展;但是,如果我决定使用 PM2 之类的东西在每个任务中运行多个 Node 进程,会发生什么?由于我在 1 个 vCPU 上运行,这是否真的不起作用?
首先,我不知道我是否应该在这里问这个问题,或者在 Electronics StackExchange 中问这个问题,所以如果您认为我应该在那里问这个问题,请告诉我。
我对测量 Intel CPU 中每个 CPU 核心的能耗感兴趣。我已阅读 Intel 的 Intel 64 开发人员手册,据我了解,RAPL 将提供以下方面的能耗估算:
这表明我能期望的最好结果是 CPU 中所有内核的集体能耗值。然而,我也知道“RAPL不是模拟功率计,而是使用软件功率模型”,根据https://01.org/blogs/2014/running-average-power-limit-%E2%80 %93-rapl。
我想知道的是,这个模型的工作方式是已知的还是公开的?并且,是否可以使用 RAPL 或其他接口提供的指标来估计各个核心功耗?我知道,如果英特尔不通过 RAPL 提供此信息,则可能无法获得它,但我想至少找到一个证实这一点的来源。
感谢您的帮助!
假设我在 Windows 计算机上运行(电源)shell。
有没有我可以用来获得的单行:
注意:我只想要一个数字作为命令输出,而不是任何标题或文本。
cpu ×10
linux ×2
apache-spark ×1
atomic ×1
atomicity ×1
autoscaling ×1
aws-fargate ×1
azure ×1
c++ ×1
core ×1
cuda ×1
energy ×1
gpu ×1
intel ×1
interrupt ×1
java ×1
javascript ×1
memory ×1
msr ×1
node.js ×1
opencl ×1
powershell ×1
preemption ×1
scheduling ×1
windows ×1
windows-10 ×1