虚拟机间延迟测量_如何(不)测量延迟

虚拟机间延迟测量

延迟定义

刺激和React之间的时间间隔

它是在许多计算机系统(金融系统,游戏,网站等)中非常重要的值。 因此,作为计算机工程师,我们希望为我们构建的系统指定一些上限/最坏情况。 我们应该怎么做? 汇编指令计数周期的日子已经一去不复返了(除非您在嵌入式系统上工作)–有太多其他因素需要考虑(操作系统–主要是任务计划程序,其他运行进程,JIT,GC等) )。 剩下的替代方法是进行经验(动手)测试。

使用百分位

因此,我们淘汰了JMeter ,配置了负载测试,取平均值(平均值)土3 x标准偏差,并自豪地声明99.73%的用户将经历此时间间隔内的延迟。 我们特别感到自豪,因为(a)我们考虑了一组实际的呼叫(如果我们正在测试网站,则为URL),并且(b)我们允许进行JIT预热。

但是我们还是很错的! (如果我们的公司根据我们的数字编写SLA ,则可能会很可悲-我们可以一手破产!)

让我们看看问题出在哪里以及如何在造成损坏之前解决它。 考虑下面描述的数据集(您可以在此处获取实际值来进行自己的计算)。

等待时间

为简单起见,本示例中使用了100个值。 可以说,它们代表获取特定URL的延迟。 您可以立即知道这些值可以分为三个不同的类别:非常小(也许数据已经在缓存中了?),中等(这是大多数用户会看到的)和差(可能有一些极端情况) 。 这对于由许多运动部件组成的中到大型复杂性(即“现实生活”)是典型的,称为多峰分布。 不久之后会更多。

如果我们将这些值快速放入LibreOffice Calc中并进行数字处理,我们将得出以下结论:这些值的平均值(均值)为40,并且根据6 sigma规则,99.73%的用户应将等待时间小于137.如果仔细查看图表,您会发现平均值(标有红色)略微位于中间。 您也可以做一个简单的计算(因为正好代表了100个值),然后看到第99个百分位数的最大值是148而不是137。这看起来似乎不是一个很大的差异,但是它可以是获利与破产(例如,如果您基于此值编写了SLA)。

我们哪里错了? 让我们再次仔细看一下三个西格玛规则(加了强调):

几乎所有的值位于内一个正态分布均值的三倍标准差。

我们的问题是我们没有正态分布。 我们可能有一个多峰分布(如前所述),但是为了安全起见,我们应该使用与分布的性质无关的解释结果的方法。

从这个例子中,我们可以得出一些建议:

  1. 确保您的测试框架/负载生成器/基准测试不是瓶颈,请针对“空端点”(不执行任何操作)运行它,并确保可以获得更好的数量级数字
  2. 如果要测试基于JVM的系统(或其他基于相同原理的系统-.NET,luajit等),请考虑诸如JITing(预热期)和GC之类的问题。
  3. 使用百分位数 。 可以说“系统的中位数(第50个百分位数)响应时间是……”,“第99.99个百分位的延迟时间是……”,“最大(100个百分位的)延迟时间是……”之类的东西
  4. 不要计算平均值(均值)。 不要使用标准偏差。 实际上,如果您在测试报告中看到该价值,则可以假定将报告汇总在一起的人员(a)不知道他们在说什么,或者(b)故意试图误导您(我敢打赌首先,但这只是我的乐观情绪。
  5. 注意协调一致的遗漏

    如果测试循环看起来像这样,则可能会发生坐标遗漏(由Azul名望的Gil Tene创造的短语):

    start:
      t = time()
      do_request()
      record_time(time() - t)
      wait_until_next_second()
      jump start

    也就是说,我们正在尝试每秒执行一个请求(也许每100ms会更实际,但要指出的是)。 许多测试系统(包括JMeter和YCSB)都具有这样的内部循环。

    我们运行测试并(从先前的讨论中学到)报告:如果每秒有1个请求,则将在0.5秒内满足85%的请求。 而且我们仍然可能是错的! 让我们看下面的图以了解原因:

    协调遗漏

    在第一行,我们进行了测试(水平轴为时间)。 可以说在第二个3到第6个之间,系统(以及因此对它的所有请求)被阻止(也许我们有很长的GC暂停时间)。 如果您计算第85个百分位数,则将为0.5(因此,在上一段中要求赔偿)。 但是,您可以在下面看到10个独立的客户端,每个客户端在不同的时间执行请求(因此我们的标准是每秒满足一个请求)。 但是,如果我们对数字进行运算,就会发现在这种情况下,实际的第85个百分位数是1.5(比原始计算差了三倍)。

    我们哪里错了? 问题在于,测试循环和被测系统协同工作(“协调”,因此得名)以隐藏(忽略)在阻止服务器期间发生的其他请求。 这导致低估了延迟(如示例中所示)。

  6. 确保每个请求的时间间隔都小于采样间隔, 或者使用更好的基准测试工具(我不知道哪种方法可以对此进行更正), 或者使用Gil的HdrHistogram库对数据进行后处理,该库包含用于协调遗漏的内置工具

翻译自: https://www.javacodegeeks.com/2014/04/how-not-to-measure-latency.html

虚拟机间延迟测量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值