天天看点

MariaDB · 社区动态 · MariaDB on Power8

power平台作为ibm的企业级平台,其稳定性和高效能在业界尤其是大型金融企业有着良好的口碑,mariadb作为mysql的重要开源分支,也对ibm power8平台进行了适配。

很幸运我拿到了一台power8的机器,在linux on power上成功编译了mariadb 10.1版本,不过还没有拿到同规格的pc服务器用于对比,所以本期我先介绍一下mariadb on power的一些信息,下期月报我会拿出实测对比数据,并且分析一下mariadb在power平台和x86平台上关键路径的效率。

与我们常见的x86平台不同,power平台是risc架构,而intel的x86是cisc架构,早期的mac也是采用powerpc。

risc相对于cisc,把主要的设计放在最常用的指令上,尽量使这些执行执行更加简单高效,对于不常用的指令,通过组合指令来完成。所以在实现特殊任务时,risc会比cisc更复杂,但是因为risc指令简单,可以更轻松的实现更多核数更多流水线来弥补。而且risc单元电路少,功耗低,整体能耗水平会比cisc好很多。

数据库业务属于简单业务,如果一台主机只运行数据库,那么在x86下其实有很多指令集是完全用不上的,所以理论上单位面积更低功耗,更多流水线,更高频率的power平台运行数据库会更加高效。

同时ibm也提供了linux on power,并且同时提供了大端、小端两种模式,而不再要求必须是aix,毕竟linux大部分人会更熟悉。

mariadb迁移到power8平台不仅仅是简单的修改代码让编译可以通过,当然这也是很重要的。

从 git log 中可以看到,官方针对power和intel平台的不同,例如<code>cache_line_size</code>的差异,intel平台是64,power平台是128。还有<code>memory_barrier</code>上的差异,也会导致在锁操作和部分io操作上两个平台会有差异,mariadb在这部分也做了修改。

另外为了能使用ibm advance toolchain工具集编译 mariadb 提升效率,也对代码上做了不少改动以便ibm advance toolchain能使用。

总之看起来一切都很好,针对很多细节都做了针对性修改。

既然广告看起来这么好,那么就亲自动手试一下。

在power on linux上我下载了mariadb 10.1.9的源码用gcc编译然而报错了:

查看了下报错的代码行:

storage/innobase/include/sync0sync.ic

storage/innobase/include/os0sync.h

可以看到,只有在<code>have_ib_gcc_atomic_test_and_set</code>或<code>ib_strong_memory_model</code>至少有一个标签打开的情况,<code>ib_mutex_test_and_set()</code>中调用的<code>os_atomic_test_and_set()</code>函数才会被开启。

然而因为rhel6的原因,在power8平台上gcc只有<code>have_atomic_builtins</code>和<code>__powerpc__</code>两个宏(升级到rhel7可以解决)。因此就出现了这一幕,<code>ib_mutex_test_and_set</code>中调用了<code>os_atomic_test_and_set()</code>而<code>os_atomic_test_and_set()</code>在头文件中没有被定义。修改很简单啦,改成用同一个宏判断就行了。

跟官方开发者沟通后这个fix可以解决这个问题

虽然官方也是有性能测试结果的,然而显然我们是不能相信官方测试的。因此我还会构造场景针对cpu本身的效能进行测试,下一期大家期待测试结果吧。

最后放两张官方的测试结果,看起来还是很牛x的!

MariaDB · 社区动态 · MariaDB on Power8
MariaDB · 社区动态 · MariaDB on Power8