滴滴Ceph分布式存储系统优化之锁优化

2020 年 9 月 08 日

滴滴Ceph分布式存储系统优化之锁优化

1. 背景

在支撑一些延迟敏感的在线应用过程中,我们发现 Ceph 的尾延迟较差,当应用并发负载较高时,Ceph 很容易出现延迟的毛刺,对延迟敏感的应用造成超时甚至崩溃。我们对 Ceph 的尾延迟问题进行了深入细致的分析和优化。造成尾延迟的一个重要原因就是代码中锁的使用问题,下面根据锁问题的类型分别介绍我们的优化工作。本文假设读者已熟悉 Ceph 的基本读写代码流程,代码的版本为 Luminous。

2. 持锁时间过长

2.1 异步读优化

Ceph 的 osd 处理客户端请求的线程池为 osd_op_tp,在处理操作请求的时候,线程会先锁住操作对应 pg 的 lock。其中,处理对象读请求的代码如下图所示,在锁住对象所属 pg 的 lock 后,对于最常用的多副本存储方式,线程会同步进行读操作,直到给客户端发送返回的数据后,才会释放 pg lock。

在进行读操作时,如果数据没有命中 page cache 而需要从磁盘读,是一个耗时的操作,并且 pg lock 是一个相对粗粒度的锁,在 pg lock 持有期间,其它同属一个 pg 的对象的读写操作都会在加锁上等待,增大了读写延迟,降低了吞吐率。同步读的另一个缺点是读操作没有参与流量控制。

我们对线上集群日志的分析也验证了上述问题,例如,一个日志片段如下图所示,图中列举了两个 op 的详细耗时信息,这两个 op 均为同一个 osd 的线程所执行,且操作的是同一个 pg 的对象。根据时间顺序,第一个 op 为 read,总耗时为 56ms。第二个 op 为 write,总耗时为 69ms。图中信息显示,第二个 op 处理的一个中间过程,即副本写的完成消息在处理之前,在 osd 请求队列中等待了 36ms。结合上图的代码可以知道,这 36ms 都是耗在等待 pg lock 上,因为前一个 read 操作持有 pg lock,而两个对象属于相同 pg。

原文链接:【 https://www.infoq.cn/article/Jv3GygMyVBgedrN84rAT 】。未经作者许可,禁止转载。

登录后可解锁全站优质内容

免费畅享技术公开课、顶尖技术团队访谈、一线互联网大厂技术实践

文章
视频
电子书
研究报告
立即登录
2020 年 9 月 08 日 10:08 624

评论

发布
暂无评论
发现更多内容

ARTS 打卡 WEEK1

编程之心

ARTS 打卡计划

绿宝这条宝藏街,夜宵也太太太太太好吃了吧!

极客编

你所不知道的淘宝325秘密

毒手疯波

ios 淘宝 325

手把手透析C语言堆内存申请malloc及扩容realloc

卓丁

c 堆内存管理 heap memory malloc realloc

程序员的晚餐 | 5 月 24 日 咖喱鸡块

清远

美食

Rust 遇上 C/C++ (一):数组操作

Coding Fatty

c c++ rust 编程语言

ARTS 01 - 为什么写作在远程工作中那么重要?

Calvin

ARTS 打卡计划

Mobileye如何在云上进行深度学习模型训练

Randy

自动驾驶 深度学习 AI AWS

我的读书生涯-小学到大学: 没有成长, 只有不断加深的疑惑

lmymirror

人生 读书 经历 半虚构

LeetCode 1048. Longest String Chain

liu_liu

LeetCode

回“疫”录(24):开始了就不算晚

小天同学

疫情 个人成长 回忆录 个人感想 日常思考

重学 Java 设计模式:实战抽象工厂模式

小傅哥

设计模式 小傅哥 重构 代码质量 代码坏味道

利用树形结构辅助实现去重算法

卓丁

算法 algorithm tree Deduplication

ARTS打卡第一周

Tom

从 Node 到 Deno

寇云

node.js deno

学会推销自己

一尘观世界

创业 程序员 外包 销售 接项目

人工智能学习心得--人工智能分类

岛乾坤

AI

John 易筋 ARTS打卡Week 01

John(易筋)

ARTS 打卡计划

ARTS week 1

刘昱

游戏夜读 | 刀塔选手比较老吗?

game1night

最优组合问题-贪心算法

公众号:好奇心森林

python实现·十大排序算法之归并排序(Merge Sort)

南风以南

Python 排序算法 归并排序

Spring事务@Transactional底层原理

公众号:好奇心森林

spring 事务 hiber

别在发愁写页面了,强烈推荐几款傻瓜式扒网站神器!!

公众号:V5codings

ziliqa生态打造区块链技术实体应用新标杆

极客编

Implement Stack using Queues

Forelax

LeetCode

JUC整理笔记二之聊聊volatile

JFound

ARTS打卡第一周

落曦

ARTS 第一周

Forelax

ARTS 打卡计划

Java 火焰图

wong

Java flamegraph

Refcard,近300份技术大咖总结的cheat sheet

KAMI

学习 开发 分享 作弊卡

跨越计算鸿沟:如何靠软硬件协同突破算力瓶颈?

跨越计算鸿沟:如何靠软硬件协同突破算力瓶颈?

滴滴Ceph分布式存储系统优化之锁优化-InfoQ