首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测多核可伸缩性/争用问题

如何检测多核可伸缩性/争用问题
EN

Stack Overflow用户
提问于 2017-10-09 14:13:03
回答 1查看 217关注 0票数 0

我正面临多核系统的可伸缩性问题。我的应用程序是在4台物理核心机上并行处理科学数据,8台具有超线程激活的逻辑核。我们启动了8个JVM,每个逻辑核心一个(为了避免JVM的开销,我们可能最终会切换到一个JVM)

问题是,可伸缩性几乎是线性的,最多可达4个核心,但通过增加4个“逻辑核”,我们几乎无法获得10-20%的性能。

我通过分析应用程序来分析线程的行为,我没有看到太多等待的锁或线程。我还检查了pidstat,例如,我没有看到过多的上下文切换开销。更确切地说,java进程几乎没有上下文切换。CPU使用率极高,几乎达到100%,这似乎也可以。

我的问题是,在超过物理核的数量之后,如何检测和分析这种糟糕的可伸缩性的原因。我可以使用哪些工具和方法来检测争用的位置,应该在哪里查看,并且可以在不改变应用程序的架构的情况下以某种方式修复它(例如,每台机器切换到一个JVM )

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-09 15:28:27

请注意,超线程并不是单核容量的两倍.事实上,当超线程运行时,有些任务执行得更糟糕。

收益将很大程度上取决于工作的性质-更多的管道档位将意味着更多的机会来安排另一个过程,而不是停滞不前的一个。

例如:完全随机访问内存将产生更多的超线程性能增益,而不是非常快的cpu密集型计算,所有这些都在同一高速缓存线内。

以下是两个硬件线程共享的东西,因此任何争用都会限制任何增益:

  • 缓存
  • 分支预测资源
  • 指令提取与解码
  • 执行单元(整数和浮点数)

另一个观察是,操作系统必须支持SMT/HT,否则它将无法将任何内容安排到其他内核中,或者安排错误的任务。

当操作系统支持时,OS仍有可能在文件句柄或网络套接字等方面发生争用。工作性质越‘尴尬可并行的’,就越有机会限制这种争论。但是,如果您的工作涉及到对同一系统资源的读取和/或写入,则您的收益将更少。

一旦将所有这些任务都放到了一个JVM中,那么您的并行性将是:

代码语言:javascript
复制
int cores = Runtime.getRuntime().availableProcessors();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46648534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档