Documents/kernel team successful stories

出自淘宝内核组

跳转到: 导航, 搜索

目录

部分成功案例

这里是我们通过内核层面,帮助提高淘宝内部应用性能的部分实例。系统性能的提升,首先是由优良的架构设计决定的,其次是应用程序的正确工作模式,最后才是通过操作系统内核的优化。但是通过内核中丰富的profile能力,有助于我们通过系统来全面的观察和评价系统运行时的特征。

CDN TCOSS I/O优化

在统计CDN服务器上磁盘的page cache命中率时,为了评价page cache的替换效率,我们只做了一个磁盘块访问统计工具,将blktrace的输出信息中的数据块根据I/O频次排序。如果有个别数据块反复的被读取,那说明当前的cache系统的替换效率不高。

通过对CDN的TCOSS存储系统进行磁盘块频次统计,我们发现在SSD上发生IO中,大约20%的读取操作只针对不超过0.02%的磁盘块。经过和CDN开发团队确认,是软件缺陷。修复这个软件缺陷后,就减少了20%的SSD I/O操作。由于SSD承担了单机系统超过80%的I/O请求,通过统计磁盘块的访问频次我们提升了超过15%的系统I/O性能,降低了查询响应时间,提升了查询服务性能。

CDN COSS I/O优化

通过使用Ext4文件系统,大大降低了磁盘上COSS文件的碎片数量,同时文件在磁盘上连续分布的区域大大增加。这样整个COSS文件的元数据被限制在不到50KB的容量内,完全被缓存在系统页缓存中。同时通过定量的分析文件预读对page cache命中率的影响,调整合适的预读初始窗口,尽量降低不必要的预读I/O。优化后,对于每一个COSS对象的查询,对应的磁盘I/O次数从1.7个降低到了0.9个左右。

搜索前端服务器性能优化

通过在内核的proc文件系统中增加了一个接口,可以让用户动态调整TCP连接中断时的TIME_WAIT数值(缺省为60秒)。在搜索前端机器上,通过将这个数值设置为1,将单机服务线程数量明显降低了70%以上,提高了响应速度,降低了系统总体负载。

TFS性能优化

通过更换支持FUA/DPO命令的SAS卡,通过Ext4文件系统使用fsync+FUA/DPO方式来代替iobarrier,对于读写混合的I/O请求,理想情况下可以提升40%以上的吞吐量增加。

存储搜索一体化项目

通过使用Cgroup来替换虚拟机进行资源隔离操作,在缩短I/O路径的同时,可以将更多的内存用来做页缓存。经过优化之后,在系统在压力测试中,存储和查询综合服务能力提升了一倍以上。

KVM磁盘I/O性能优化

基于内核的vhost框架,将virtio-blk设备后端迁移到内核空间运行,在QEMU/KVM的虚拟机运行环境中,磁盘I/O操作的响应时间缩短了12%,吞吐量提升了15%左右。这对于提升基于KVM的虚拟化计算环境中的磁盘I/O性能具有积极的帮助。

Hadoop集群I/O调度器优化

由于CFQ I/O调度器在读操作较多时无法及时的响应背景写请求,在负载较高的情况下会导致某些重要的写操作无法及时完成(譬如swap或writeback相关的写操作),导致整个数据节点服务器上的任务运行都受到影响,极端情况下观察到作业处理时间延长好几倍。通过在内核中将部分元数据写操作修改为前景写,以及为CFQ添加了超时机制(从内核开发社区合并的一个patch),目前在hadoop集群上再没有收到类似问题的故障报告。

个人工具