【问题标题】:What is meant by cpu slack?cpu松弛是什么意思?
【发布时间】:2013-09-15 06:01:43
【问题描述】:

以下是 Java Concurrency in Practice 第 12.2 章 Testing for Performance 一书的节选,其中作者谈到了有界缓冲区实现的吞吐量。

图 12.1 显示了在 4 路机器上使用缓冲区的一些示例结果 容量为 1、10、100 和 1000。我们立即看到缓冲区 大小为 1 会导致吞吐量非常低;这是因为每个线程 在阻塞和等待之前只能取得一点点进展 另一个线程。将缓冲区大小增加到 10 会有很大帮助,但是 增加超过 10 会提供递减收益。

添加更多线程一开始可能有点令人费解 只会稍微降低性能。原因很难看出 数据,但很容易在诸如 perfbar 之类的 CPU 性能计上看到 测试正在运行:即使有很多线程,计算量也不多 继续进行,其中大部分用于阻塞和解除阻塞线程。所以 有足够的 CPU 空闲时间让更多线程做同样的事情 不会对性能造成太大影响。

但是,请谨慎从这些数据中得出结论,您可以 总是将更多线程添加到使用 有界缓冲区。这个测试在模拟的方式上是相当人为的 应用;生产者几乎不做任何工作来生成项目 放在队列中,消费者几乎不处理该项目 取回。如果工作线程在真正的生产者-消费者中 应用程序做一些重要的工作来生产和消费物品(如 一般情况下),那么这种松弛就会消失,并且 线程过多的影响可能非常明显。这 这个测试的主要目的是测量哪些约束 通过有界缓冲区进行的生产者-消费者切换强加于整体 吞吐量。

作者这里的cpu slack是什么意思?为什么随着线程数量的增加,吞吐量不会越来越下降?我没有遵循作者给出的关于在添加越来越多线程时性能轻微下降的推理,假设缓冲区大小的界限保持不变。

编辑:我能想到一个原因:因为在这种情况下,线程并没有真正的工作,所以共享内存总线上的流量增加的经典问题,由于缓存未命中的数量随着越来越多的线程被添加,线程的上下文切换并没有发挥主要作用。一旦线程开始做更多的工作,情况就会改变。这就是作者在第三段中试图表达的意思吗?

【问题讨论】:

    标签: multithreading performance concurrency performance-testing java.util.concurrent


    【解决方案1】:

    没有诸如 CPU slack 之类的正式术语。作者的意思只是说 CPU 在做有意义的工作时没有充分利用,因为大部分时间都花在等待成功获取互斥锁上。作者将CPU的未使用容量称为CPU slack。

    注意:相关代码测试多生产者/多消费者场景,生产者和消费者数量相等。

    编辑:在后面的讨论中,他们讨论了添加更多线程的效果,如果 a) 线程几乎不做任何工作,并且 b) 对于每个生产或消费的项目,线程基本上占用了 CPU。我将尝试用一些稍微人为的场景来解释差异。

    假设加锁主动占用1个时间单位,被动等待8个时间单位。被动等待不占用CPU。

    案例1:生产者-消费者成本为1个时间单位。

    所以我们目前占 CPU 时间的 2 个时间单位,其中 额外 8 个时间单位的被动等待时间。所以我们有 8/10 可用的 CPU 时间单位。

    如果我们现在想将线程数增加一倍,我们需要容纳 额外的 2 个时间单位(1 个用于生产者-消费者的东西,1 个用于 主动锁定时间)。这会消耗我们的可用 CPU 供应 时间——但我们有足够的时间。

    案例 2:生产者-消费者成本为 11 个时间单位。

    所以我们目前占 CPU 时间的 11+1=12 个时间单位,另外还有 8 个时间单位的被动等待时间。所以我们有 8/20 个可用的 CPU 时间单位。

    如果我们现在想将线程数加倍,我们需要容纳额外的 12 个时间单位(11 个用于生产者-消费者的东西,1 个用于活动锁定时间)。这超出了可用的 CPU 时间单位。必须付出一些代价——因此等待时间会增加,吞吐量也会受到影响。

    因此,在情况 2 中,实际工作量减少了新线程可用的时间量,从而增加了观察到的锁定争用对吞吐量的影响。如果他们在书中也包含了这个想象场景的数字,那就太好了。这会让他们手舞足蹈的论点更容易理解。

    【讨论】:

    • 请查看更新。这个问题还有第二部分。
    【解决方案2】:

    我认为 cpu slack 是资源。根据维基百科的说法,如果现在开始工作,它指的是工作后剩余的时间。 大量的 cpu slack 意味着大量的计算资源。当消费者/生产者做一些不平凡的事情时,cpu slack 会减少并影响吞吐量。

    【讨论】:

    • 这是否意味着如果生产者-消费者成本和锁定时间超过被动等待时间,吞吐量会受到影响?
    猜你喜欢
    • 2015-11-18
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2011-02-05
    相关资源
    最近更新 更多