鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

CACHELINE对齐优化

多并发编程中的临界区变量属于写频率高的变量,如锁中的lockword,会由于上锁和释放锁等操作不停地修改状态,每次修改都会导致其他core中的CACHE_LINE失效。避免此类数据结构与其他变量间的干扰,会在应用中对该CACHELINE做对齐操作,使得该变量独占一个CACHELINE。

表1 不同平台的各级CACHELINE大小

Cacheline/Byte

x86

鲲鹏920

L1

64

64

L2

64

64

L3

64

128

MySQL中对x86平台做了很多CACHELINE的64字节对齐,由于鲲鹏920处理器的L3 CACHELINE为128字节,因此需要将MySQL源码中的对齐方式修改为128字节。修改的对齐数据结构如下:

brt_search_latches btr_search_sys

ReadView::m_view_list

trx_sys_t::rw_trx_list

trx_sys_t::mysql_trx_list

trx_sys_t::rsegs

srv_conc_t::n_active

srv_conc_t::n_active

lock_sys_t::mutex

lock_sys_t::wait_mutex

MySQL中原64Byte对齐的数据结构修改为128Byte对齐。

修改后,TPM提升至3%~4%。