TencentOS 内核特性助力数据库性能提升30%,内存占用下降15%
👉目录
1 架构升级的挑战与影响
2 原子写方案介绍
3 小规格的资源冗余挑战
4 原子写方案介绍
5 总结与展望
01
新架构从传统物理机转向 TKE HouseKeeper,以实现计算资源与存储资源的解耦,提升资源利用率以及丰富产品形态; 存量物理机从 Intel 转向 AMD,在单位成本内提供更高的单核性能,以及大规格独享型实例。
对于物理机形态,由于使用了云原生构建的服务(采用云盘),所以在存储点查性能以及 IO 性能上存在天然的瓶颈; 相对物理机更小的 node 规格,对各个数据库节点的内存使用和分配策略不能照搬物理机策略,此时产生了挑战;
数据在磁盘上会写入两次,占用磁盘带宽*2,造成性能负担。 这两次写入的磁盘地址大概率并不连续,造成性能抖动。
02
规格选择为中等规格 4vCPU 16GB 内存/100GB 存储。主要考虑是,一方面是改规格为核心业务使用的起步规格,另外,4vCPU 规格的实例数为现网实例总数的42.64%,更具代表性。 对比测试方法使用 sysbench 的读写混合模型(oltp_read_write)进行测试,单表大小为 100 万,共十个表,单次测试时长为 300 秒,分别测试了如下并发度的性能表现:16、32、64、128。 写入对比测试使用 sysbench 的只写模型(oltp_write_only)进行测试,单表大小为 100 万,共十个表,单次测试时长为 300 秒,分别测试了如下的并发度的性能表现:32、64、128、256。
03
04
透明大页 THP(Transparent Huge Pages):是动态可生成的,不用预留,即用即申即可,但是透明大页不是必定就能合成成功的,首先需要唤醒 khugepage 去执行,后面申请连续的 4k page,达到 2M,才能满足要求,此外对于大内存耗用的业务场景,存在申请连续 2M 内存失败的风险。 标准大页(HUGETLB):采用标准大页,需要预留,一当预留成功后,不用考虑申请失败的问题,但是缺点也明显,标准大页由于需要先预留后才能使用,并且预留部分无法被其他业务使用,存在通用性差的问题,此外预留意味着束缚,预留多了,导致浪费,预留少了,大页使用不足。
4.2 NUMA-aware qspinlocks
NUMA-aware 性能优化结果
4.3 投机性缺页异常-SPF
VMA 发生拆分或者合并情况: 为此投机性缺页异常特性在 VMA 引入了顺序锁 seqlock, 该锁用于判定 VMA 是否发生了篡改,在 VMA 发生合并或者拆分处理过程中,都会先增加该 count 值,在每一次缺页异常路径中,都会先保存顺序锁 count 值,在缺页处理完成之后,同样以原子方式再次获取该 count 值,如果值仍然没有发生变化,就可以确定 VMA 没有发生修改,「投机」成功,否则表示失败。 VMA 发生被释放情况:这种情况可以使用 Read-Copy-Update(RCU)来避免,此处使用了 RCU 的变体 SRCU,因为缺页异常路径是运行睡眠的,所以环境语义不能变,在投机性缺页异常处理过程中,会调用 get_vma()方式,增加原子变量 vm_ref_count 引用值,异常处理完成后,将调用 put_vma()将原子变量减一,在要释放 VMA 的路径,只需要通过判定该原子变量 vm_ref_count 引用值是否为 0 即可。
4.4 ORC Unwinder
05
📢📢欢迎加入腾讯云开发者社群,享前沿资讯、大咖干货,找兴趣搭子,交同城好友,更有鹅厂招聘机会、限量周边好礼等你来~
(长按图片立即扫码)