EC2 t2.medium突破性信用“储蓄”计算

我正在使用一个T2.medium实例。 三分之一的时间我正在进行密集的统计计算,并认为剩余2/3的时间我将以每小时24的速度“赚取”信贷。

但是这并没有发生。 这是我过去两天的用法:

CPU信用使用情况

这是我的信用账户:

CPU信用余额

直到昨天下午6点,我一天都没有使用它(超过)。 我用它密集了五个小时。 那么我希望我的“账户”每小时可以累积24个学分,但是9-10个小时几乎没有任何事情发生,然后如预期的那样9个小时完成,然后再次变平。

我无法弄清楚是怎么回事,如果是错的。 有没有人有一个很好的解释?

编辑:我已经包括了一个星期的活动。 我仍然不知道这个algorithm:

CPU信用使用周 CPU信用平衡周

这个问题在过去的几个小时里引起了我很大的精神痛苦,因为根据我对t2实例的了解,图表几乎是有意义的。 几乎,但不完全,我不能把我的手指在这个问题上。 这是最糟糕的一种。 特别是t2机器提供的价值主张的巨大风扇。

但是我终于明白了这里发生了什么事情。

有一个CPU信用的概念,文档似乎没有解释,但是math运算出来了,并且在现实世界的观察下,这个解释很好地支持:

最近获得的CPU积分首先被使用,而不是最后使用。

订单是否重要? 它确实。

为了testing,我使用了一个t2.micro(主要是因为我有一个已经运行好几天的空闲的,并且需要做些什么,而且我不希望新实例的额外的“初始”观察结果),但是t2类中的所有实例types都有类似的行为。

作为背景:在t2类中,CPU学分是以不同的速率获得的,但CPU学分对于类中的所有实例types使用相同的速率:

CPU信用提供了一分钟的完整CPU内核的性能。

t2.micro和t2.small只有一个核心,所以他们可以在CPU使用率达到100%的情况下,每分钟消耗1个信用点,或者每小时消耗60个信用点。 t2.medium和t2.large是双核,所以它们可以在两个内核上以100%的CPU利用率每分钟刻录2个信用点,或者每小时120个信用点。

如果1分钟= 1分钟的100%1分钟,那么1分钟也等于1分钟的20%,持续5分钟。 由于Cloudwatchgraphics间隔以5分钟为增量,因此我设置了以下testing:

在已经运行好几个星期,基本上没有任何负载的t2.micro上 ,我安装了lookbusy ,这是一个方便的工具,可以让你使用你指定的参数使机器“看起来很忙” – 例如,保持CPU的利用率为20% 。

$ screen -S eat_cpu $ ./lookbusy -v -c 20 -r fixed 

这正是你所期望的,每5分钟烧1个CPU信用点。 “CPU Credit Usage”图表证实了这一点,显示每5分钟使用1个信用。 (“CPU利用率”图和top ,都确认了20%。)

但是我的贷方余额发生了什么? 每5分钟就要消耗1分。 这似乎是错的,不是吗? 我的意思是,是的,我刚刚说过这是我使用的数量, 但是…我也应该每小时赚取6个学分,所以我应该每5分钟才能净减0.5个学分, 对?

继续…再次检查数字:我每小时挣6,每小时花费12,所以,好像…应该是每小时只净减6,而不是12。对? 显然,有些东西并没有按照我预期的方式加在一起,因为我的平衡肯定会以每小时12次的速度下降,而我的CPU肯定只能以20%的速度运行。

我似乎没有赚取学分抵消我的用法。 这怎么可能?

除非…

从给定的5分钟时间间隔中获得的未使用学分在获得后24小时到期

那么,24小时前,我的例子完全闲置了。 在那个小时里,我赚了6个学分,我没有(?)使用。 我现在不使用它们吗? 我不该呢?

任何过期的积分将从当时的CPU积分余额中删除,然后再添加新获得的积分

污物。 这可能是相关的吗? 这个小时,我赢得了6个新的学分。 但在此之前,我从24小时前就减掉了6个学分。 然后我花了12个学分这个小时…所以我的平衡时,下降了6,增加了6,下降了另一个12.那么,这解释了小时的-12变化,但…

这可能是原因吗?

我是一个贪婪的文档阅读者,所以我知道即将到期的学分方面……但我始终认为,这只不过是一个闲置的实例在最大平衡附近hover的原因,没有任何其他意义。 怎么可能? 如果我低于最大值(对于t2.micro,6 x 24 = 144),那么我怎么能有信用需要过期?

如果我24小时前的信用总是对我不利,那么无论我做什么,我的余额是不是会趋于零?

除非…

在考虑在一个虚构的桌面上(代表时间)在大量的想象的代币(代表CPU信用)上滑动并转动大部分的夜晚之后,我意识到“过期”规则将导致我们观察到的行为,直觉上,信用不会按照他们赚取的顺序(FIFO),而是按照相反的顺序(LIFO)。

按照这样的推理,我20%的CPUtesting实际上做的解释是这样的,我的testing的第一个小时是“小时0”

  | spends 6+6 credits | expire 6 credits test | earned this many | earned this many hour | hours before hour 0 | hours before hour 0 -----+---------------------+-------------------- 0 -1, -2 -24 1 -3, -4 -23 2 -5, -6 -22 3 -7, -8 -21 4 -9, -10 -20 5 -11, -12 -19 6 -13, -14 -18 7 -15, -16 -17 

他们在中间相遇。

这是真的,还是我猜? 我没有猜测,这里是证据:

在8小时之后,我的CPU信用使用图保持稳定,仍然保持稳定在每5分钟1个信用点,但在相同的8小时后,我的CPU信用余额最终开始以我原本预期的(较慢)速率消耗: 5分钟。

显然,当我在时间上倒退时,以前的消费获得了“最新的优先”信用,我赶上了我即将到期的旧信用,最终达到了在他们有机会到期之前使用它们的地步。 现在,我没有24小时的信用,所以没有信用到期 – 所以我不再失去信用,才能获得新的信用。 我现在可以保留我每小时赚取的6美元,因为我用完了旧的帐户,将对我的贷方余额的净影响降低到预期的水平。

这就解释了我对这个问题中唯一的保留意见:为什么在利用率下降的时候,这个平衡会反弹呢?

TL,DR的答案是这样的:在一次大量使用之后,余额不会立即反弹,因为在24小时之前,您仍然有未使用的信用,这就是取消新获得的信用,直到达到当你没有任何24小时的未使用的信用。 当这种情况发生时,您的贷方余额再次增加。

让实例完全闲置24小时,您将最终稳定地(大部分)平稳地看到余额再次上升到预期的水平。 任何less于24小时的完全闲置将导致您的余额永远保持在最大值以下的某个位置。

我的testing脚本最终几乎完全耗尽了我的信用余额。 当我杀死CPU的进程时,信用余额立即开始恢复,预期每小时6个信用。

相反,当我使用一台已经使用了24小时不同的机器,并在几分钟内将CPU的使用率降至100%,然后将其重新设置为闲置状态,这些信用并没有立即开始累积。旧的,到期的。

行情来自http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html