我已经开发了一个框架,用于通过若干团队在我们的组织。那些"模块",开发在此框架内,可以表现得相当不同,但它们是所有漂亮的资源耗费,即使有些比其他人更多。他们都收到数据输入、分析和/或改变它,并送它进一步。

我们计划购买了新的硬件和我的老板请我定和实施一个基准基础上的模块以便比较不同的提供我们所拥有的。

我的想法是要简单地开始按顺序每个模块都与一个好的选择堆的数据输入。

你有什么建议吗?任何谈论这个简单的程序?

有帮助吗?

解决方案

您的问题是相当广泛的,所以很遗憾我的回答会不会很具体的要么。

首先,基准是困难的。不要小看产生有意义的,可重复的,高可信度的结果所需的工作量。

二,什么是你的业绩目标是什么?难道吞吐量(每秒交易或操作)?难道是等待时间(它需要执行交易)?你关心的平均表现?难道我关心最坏情况下的表现?你关心的绝对最坏的情况或我关心的是90%,95%或一些其它百分比获得足够的性能?

根据您有哪些目标,那么你应该设计自己的基准,以衡量这一目标。所以,如果你有兴趣的吞吐量,你可能想消息/交易/输入发送到你的系统在规定的速度,看看系统是否跟得上。

如果您有兴趣的延迟,你会发送邮件/交易/输入,并测量需要多长时间来处理每一个。

如果你有兴趣在最坏的情况下性能不管你认为“现实”,您将负载添加到系统中,直到达到(或任何系统设计说,它应该支持。)

二,你不说,如果这些模块将是CPU密集型,I / O瓶颈,如果能当你试图评估不同的硬件解决方案,你会发现,利用多个CPU /内核等。您的应用程序从一个伟大的I / O子系统与收益更加庞大的CPU的数量。

三,最好基准(和最难)是将现实负载到系统中。这意味着,从生产环境中,记录数据,并通过这个数据把新的硬件解决方案。闻听此事做的是难度比它的声音,通常,这意味着将各种测量点系统,看看它的行为(如果你没有他们已经)修改现有系统中添加记录/回放功能,修改回放以不同的速率运行,并且得到一个现实的(即,类似于生产),用于测试环境。

其他提示

在最有意义的基准是测量代码日常使用中的执行。这显然会为您提供最真实的数字。

选择几个现实生活中的数据集,并把它们通过您的组织每天使用相同的过程。对于额外的信用,与使用你的框架,并要求他们提供一些“最好的情况”的人讲,“正常”和“最坏情况”的数据。匿名数据,如果有隐私问题,但尽量不要改变任何可能影响性能。

请记住,你是衡量和比较两套硬件,而不是你的框架。对待所有的软件作为一个黑盒子和简单地测量硬件的性能。

最后,考虑保存数据集,并利用它们同样进行评价您对软件的任何后续的更改。

如果你的系统应该能够处理多个客户端同时呼吁所有,那么你应该基准反映此。请注意,某些呼叫不会玩好起来。例如,具有25个线程张贴在同一时间信息相同的位可能会导致在服务器端锁,因而倾斜你的结果。

从一个螺母和螺栓点,我使用Perl和其基准模块来收集关于我关心的信息。

如果您要比较不同的硬件,然后测量每笔交易的费用会给你硬件的性能的权衡的一个很好的比较。一个配置可以给你最好的性能,但成本太大。一个不太昂贵的配置可以给你足够的性能。

,以模拟“最坏情况”或负载的“高峰时间”是很重要的。同样重要的是与“典型”的卷进行测试。这是一个平衡的行为,以获得良好的服务器利用率,不会花费太多,给人所需的性能。

跨硬件配置测试很快变得昂贵。另一个可行的方法是在你具有的配置第一测量,然后模拟横跨使用模型的虚拟系统该行为。

如果你可以,试图记录的某些行动的用户(或过程)是在做您的框架,最好使用克隆的真正的系统。给你最真实的数据。要考虑的事项:

  1. 其功能是最经常使用呢?
  2. 有多少数据转移?
  3. 不承担任何东西。如果你认为"这将是快速/缓慢",不要打赌。在9出的10起案件,你错了。

创建一个十1+2和工作。

这说:如果你替换旧的硬件与新的硬件,可以预期大约10%的速度执行的每一年已经过去了,因为你买了第一组(如果系统是无漂亮相等)。

如果你有一个专门系统,该数字可能会完全不同,但通常,新的硬件并没有太大变化。例如,添加一个有用的指数一数据库可以减少运行的一个查询来自两个小时的时间两秒钟。硬件绝不会给你说。

在我看来,有两种基准,当谈到基准测试软件。首先,微基准,当您尝试与狭义的工作量,以评估一段代码隔离或如何系统的交易。比较用Java编写的两个分拣算法。比较两个Web浏览器的速度有多快可以各自执行一些DOM操作操作。第二,有系统基准测试(我只是做了名字了),当您尝试根据实际工作量来评估一个软件系统。比较在谷歌计算引擎和亚马逊AWS我的基于Python的后端运行。

在Java和像这样的处理,记住,虚拟机需要预热之前,它可以给你真实的性能。如果测量的时间与time命令,JVM启动时间将被包括在内。你几乎总是要要么忽略启动时间或跟踪它分开。

Microbenchmarking

在第一次运行,CPU高速缓存得到填充有必要的数据。这同样适用于磁盘缓存。在一些后续运行的虚拟机的不断升温,这意味着JIT编译其认为有帮助的编译。要忽略这些运行和随后开始测量。

请了大量的测量和计算的一些统计数据。平均数,中位数,标准差,情节图表。看看吧,看看它有多大的变化。可能影响结果的东西还包括GC在CPU的VM,频率缩放暂停,其他进程可能启动一些后台任务(如病毒扫描),OS可以决定这一进程在不同的CPU核心,如果你的有NUMA架构,结果将更加显着。

在微基准的情况下,所有的这是一个问题。杀了你可以在你开始之前,有什么处理。使用基准测试库,可以为你做了一些。如 https://github.com/google/caliper 和诸如此类。

系统的基准

在实际工作量下一个标杆系统的情况下,这些细节并不真正感兴趣的你和你的问题是“只”知道实际工作量是什么,如何产生,并收集哪些数据。它始终是最好的,如果你能仪表生产系统,并收集数据存在。通常你可以做到这一点,因为要测量的最终用户特征(网页渲染多久没有),这些都是I / O密集型所以收集数据的代码不拖慢系统。 (需要运到用户在网络上的页面,它并不重要,如果我们在这过程登录几个数字)。

要留意剖析和基准之间的差的。基准可以给你花做的事情绝对时间,剖析给你花做的事情相比,其他一切需要做的相对时间。这是因为分析器运行大量程序仪表(常用的方法是停止这世界每隔几百毫秒和保存堆栈跟踪)和仪器仪表下来显著减缓一切。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top