我目前在高可用性环境中工作,因此性能对这家公司来说是个问题。我今天发现他们正在运行 Perl 5.10.0,根据 perl5101delta
在列表分配中有性能回归。现在,由于我们使用的是 Debian,更新并不十分容易,因此我正在寻找统计数据来说明我们需要更新多少改进更新。
最佳答案
其他人的代码基准测试只会显示这些其他人的代码的不同之处。
我假设您已经有了一些基准,可用于量化“高可用性环境”的性能,这些基准可能显示每秒可以对特定页面(对于网站)执行的当前请求数) 或重要模块中特定高可见度子程序的子程序调用次数。
如果您还没有类似的东西,我建议您创建一些代码来跟踪系统的当前性能,特别是对于您认为最引人注目或性能下降的位会对公司产生负面影响。
还请记住,很多代码可能是 IO 绑定(bind)的,并且您所指的回归可能与它无关:它涉及列表分配,因此它会影响大多数子例程调用和参数杂耍。如果您最宝贵的代码花费很长时间等待数据库返回数据,那么上述回归对您来说应该可以忽略不计。
对于您自己的代码,找出哪个是哪个的好方法是对其进行基准测试并衡量其当前性能。
一旦你有了它,并且与你想要迁移的特定版本完全无关,你就可以使用 App::perlbrew 安装你想要迁移到的任何版本,安装您需要使用 App::cpanm 进行基准测试的模块,然后“简单地”运行您的基准测试/测试套件。
作为额外的好处,您还可以跟踪 Perl 的开发版本,并向 perl5-porters 提供有值(value)的反馈,以便在 下一个主要版本。
虽然 perl5-porters 确实竭尽全力确保现有代码不会被破坏,但每几个主要版本都会明智地进行弃用,等等。事情确实会发生变化,这是知道它们是否会发生变化的唯一方法对于您自己的代码就是对其进行测试。
补充:为了解决特定问题,关于 Perl 的“列表分配中可测量的性能下降”回归,您可以通过 perlbrew 安装各种 Perls 并使用以下基准对其进行基准测试:
use Benchmark qw/:all/;
sub test_this {
my ($a,$b,@c) = @_;
1;
}
timethis(10_000_000, "test_this(1..10);");
对 Perl 5.10 和 Perl 5.10.1 或其他 perls 执行此操作并查看。
对于我的机器,5.10.1 产生 540k/秒,而 5.10.0 产生 498k/秒。
关于perl - 是否有关于 Perl 5.10.0 中的性能回归有多糟糕的基准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3353771/