我目前在高可用性环境中工作,因此对于该公司而言,性能是一个问题.我今天发现他们正在运行Perl 5.10.0,根据perl5101delta
列表分配中的性能回归.现在,因为我们使用的是Debian,所以更新并不容易,所以我正在寻找统计数据,以便为我们更新提供多少改进更新.
其他人的代码基准测试只会显示这些其他人的代码有何不同.
我假设您已经有许多基准测试用于量化"高可用性环境"的性能,这可能显示当前每秒可以对特定页面(对于网站)或者网站执行的请求数量重要模块中特定高可见性子例程的子例程调用数.
如果您还没有这样的东西,我建议创建一些跟踪系统当前性能的代码,特别是对于您认为最高调或性能下降的比特.对公司的负面影响.
还要记住,很多代码可能是IO绑定的,并且你所指的回归在它上面可能是微不足道的:它关注列表赋值,因此它影响大多数子程序调用和参数杂乱.如果您最宝贵的代码花费很长时间等待数据库报告数据,则上述回归对您来说应该可以忽略不计.
找出哪种方法对您自己的代码进行基准测试并测量其当前性能的好方法.
一旦你拥有了这个,并且与你想要迁移的特定版本完全无关,你就可以安装任何你想迁移到使用App :: perlbrew的版本,安装你需要的模块使用App :: cpanm获得基准测试,然后"简单地"运行您的基准测试/测试套件.
作为额外的奖励,您还可以跟踪Perl的开发版本,并为perl5-porters提供有价值的反馈,以便在下一个主要版本之前可以修复此时的回归.
虽然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/sec,而5.10.0产生498k/sec.