Ceph中国社区9.19 Ceph IO 路径 和性能分析-王豪迈05

16
2015.9.14 Ceph IO 路径 和性能分析 王豪迈

Transcript of Ceph中国社区9.19 Ceph IO 路径 和性能分析-王豪迈05

2015.9.14

Ceph IO 路径 和性能分析王豪迈

I’m Haomai

✤ Ceph 开发者

✤ 之前做 OpenStack, Ceph

✤ 现在关注容器,Ceph

✤ 涉猎数据库,存储,⽂文件系统

IO 层次

API Interface

✤ rados_aio_write(rados_ioctx_t io, const char *oid, rados_completion_t completion, const char *buf, size_t len, uint64_t off)

✤ rados_aio_read(rados_ioctx_t io, const char *oid, rados_completion_t completion, char *buf, size_t len, uint64_t off);

✤ 特点:

✤ 类 POSIX 但没有⽬目录结构

✤ 丰富的 callback 语意,异步通知

Session Layer

✤ Objecter::read(const object_t& oid, const object_locator_t& oloc, uint64_t off, uint64_t len, snapid_t snap, bufferlist *pbl, int flags, Context *onfinish,version_t *objver, ObjectOperation *extra_ops)

✤ Objecter::write(const object_t& oid, const object_locator_t& oloc, uint64_t off, uint64_t len, const SnapContext& snapc, const bufferlist &bl, utime_t mtime, int flags, Context *onack, Context *oncommit, version_t *objver, ObjectOperation *extra_ops)

✤ 特点:

✤ 增加位置和版本信息

✤ 合并操作

Messenger Layer

✤ Connection::send_message(Message *m)

✤ Dispatcher::ms_dispatch(Message *m)

✤ 特点:

✤ Ops -> Message(连续字节流)

✤ ⾼高度封装,处理重传,⽹网络错误

Dispatcher Layer

✤ OSD::handle_op(OpRequestRef& op, OSDMapRef& osdmap)

✤ 特点:

✤ Message -> OpRequest

✤ 基本信息校验(合法性,权限,完整性,正确性)

✤ 重定向

Replication Layer

✤ ReplicatedPG::execute_ctx(OpContext *ctx)

✤ 特点:

✤ OpRequest -> OpContext

✤ 请求解析,上下⽂文组建

✤ 读类型请求执⾏行

✤ 写请求组建事务(Transaction)

✤ 写请求增加⼀一致性操作⽇日志(Undo Log)

PG Backend Layer

✤ 特点:

✤ OpContext -> RepGather

✤ 不同回调实现

✤ 实现写操作⽅方式

Store Backend

✤ ObjectStore::queue_transactions(Sequencer *osr, list<Transaction*>& tls, Context *onreadable, Context *ondisk, Context *onreadable_sync, TrackedOpRef op, ThreadPool::TPHandle *handle)

✤ 特点:

✤ Repop -> Transaction

✤ 保证原⼦子性

✤ 异步 IO

任何计算机问题总能通过加层解决

- Someone

性能问题

✤ 低延迟⾼高 IOPS 问题

✤ 复杂的分层模型

✤ ⽹网络

✤ 存储

✤ ⾼高吞吐设备利⽤用问题

✤ 存储

✤ 数据附加 Overhead

Store

✤ FileStore

✤ KeyValueStore

✤ DB

✤ 硬件 API

✤ MemStore

✤ NewStore

Messenger

✤ Simple

✤ poll

✤ 线程调度

✤ Async

✤ select/epoll/kqueue/evport …

✤ 事件驱动

✤ Xio

✤ tcp/rdma

✤ incompatible

PipelineVCPUThread

Qemu MainThread Pipe::Writer Pipe::Reader DispatchThreader OSD::OpWQ FileJournal::Writer FileJournal->finisher

FileStore::OpWQFileStore::SyncThreadPipe::WriterPipe::ReaderDispatchThreader FileStore->op_finisherFileStore->ondisk_finisherRadosClient->finisher

谢谢!