2KB项目,专业的源码交易网站 帮助 收藏 每日签到

MariaDB 的单线程模式性能提升 40%

  • 时间:2019-01-23 18:37 编辑:2KB 来源:2KB.COM 阅读:373
  • 扫一扫,手机访问
  • 分享
摘要:
MariaDB 英文原文:40% better single-threaded performance in MariaDB

为继续我的MariaDB服务器单线程性能调查,我设法用sysbench在单线程只读的情况下使吞吐量提升40%以上,目前的情况如下:

我用如下命令运行只读的sysbench 0.4.12:

    sysbench --num-threads=1 --test=oltp --oltp-test-mode=simple --oltp-read-only --oltp-skip-trx run

mysqld以最少的参数运行:

    sql/mysqld --no-defaults --basedir=X --datadir=Y --innodb-buffer-pool-size=128M

现代CPU性能都已经很高了,有必要利用内置的性能计数器来对各类应用性能及瓶颈情况进行细致的测量。忘掉以前我们看代码、计算指令或周期的情形吧,它们已经不奏效了,至少已经不在一个数量级了。

我使用了Linux的perf对此编程。 在我的调研中,我发现基准测试中最大的瓶颈是缓存指令的丢失。测试样例如下:

Counter               Value 

INST_RETIRED.ANY 170431I

CACHE.MISSES       17194

这就是说10%在缓存中的一级指令在执行时丢失。这是很糟糕的。Intel的优化手册指出CACHE.MISSES/INST_RETIRED.ANY的比率: 任何超过1%的指令退役都会是明显的问题。我们比明显的问题的10倍还要糟糕。

缓存指令的丢失引起了CPU前端的瓶颈,在CPU的前端x86的指令进行获取、解码并运行到微软操作系统的队列,这些队列将在后端数据流发生故障时被调度。为了进一步的明确在这个基准中我们的前端瓶颈究竟有多严重,我们用到了Intel使用说明中的另一个考核方法:IDQ_UOPS_NOT_DELIVERED.CORE / (4*CPU_CLK_UNHALTED.THREAD) = 81.5%

这个比例说明的是前端不能迅速响应后端指令的占用时间百分比。在这种情况下,只要指令可以更快的被读取和解码,在超过80%的相同时间里,CPU就能做更多的工作。 

知道如何分析相应的模块对于提高性能十分重要。粗略地说,80%的时间都花在等待ICACHE。过去我们会花费大量的时间调试代码中包括改善数据局部性或分支错误预测等等问题,但却始终不能大幅改善。问题就是,只有真正知道关键点在哪里才能把好钢用到刀刃上。

在icache misses,最好是使用配置文件导引优化。profile-guided optimisation

这可以通过运行配置的mysqld binary数去收集有关的加载数据。之后binary数会重新编译,以便使用相关的信息去优化生成的代码。

通过分析程序的实际的运行情况可以帮助编译器分离出基本代码单元以及运行路径。

这可以帮助减少icache在运行中频繁跃进或跃出一个16字节的指令流(这种频繁跳跃会浪费icache的基本单元流也就是16-byte 流,)

它也可以提高直线代码执行路径的长度,这应该有助于提高硬件缓存中 icache中的保有数量。

理论上应该是这样的 - 但是实际效果如何呢? 事实证明它是有效的。首先我用带--coverage 参数的CFLAGS/CXXFLAGS来进行编译。然后我运行sysbench来产生配置文件数据。然后,我换用--profile-use 参数重新编译。这就是需要为它做的全部,GCC会自动处理其它所有事情。

使用优化后的程序重新运行基准测试,会获得一个大幅度的速度提升:

Binary Queries per second Speedup
Base:-O3 21404
PGO:-O3 --profile-use 30903 44%

可以看到仅仅用了不同的优化编译方案,就获得了44% 的速度提升,还不错! (服务器端实际的提升还会更高,这是因为,由于该测试的单线程的特点,sysbench客户端耗费了部分的运行时资源)。

顺便说一句,那44 %的加速来源于只是适度减少ICACHE失效率 - 从10%下降到8%。这说明ICACHE misses造成的影响很显著。从二级缓存获取需要像12个周期,而在每个周期的CPU可能什么都不做,这对于本能在每个时钟后台执行4个操作数的情况下,是一个很大的浪费。因此,剩下的8%的失效率还是可有很大的改进,但实现起来就不仅仅是调试编译器的一些配置那么简单了。

我觉得很自然,以后应该开始使用档案导引优化未来的MariaDB的二进制文件。这会有不小的工作量,因为我们需要制定一套典型的工作负载来进行优化实验,然后将其集成到编译过程中。之后需要优化处理一系列不同的用途。然后是更多覆盖范围更广的测试来确保不会引入新的问题也不会造成性能的回退。通过测试能确保代码的质量,但这是没有止境的。

对提高单线程性能的工作将继续下去,只要时间允许,我当然会做出更多的好成绩(几个补丁已经在发布中)。但我认为本文提到的这部分很有趣的,值得与大家分享。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部