Project

General

Profile

Rbd copy-on-read for clones » History » Version 1

Jessica Mack, 06/07/2015 01:19 AM

1 1 Jessica Mack
h1. Rbd   copy-on-read for clones
2
3
h3. Summary
4
5
Copy-on-read would improve locality for data that's actually used by a clone, without using the full space required by flattening the clone.
6
This is especially useful when the clone is a high-latency connection away from its parent.
7
8
h3. Owners
9
10
* Name (Affiliation)
11
12
h3. Interested Parties
13
14
* Josh Durgin (Inktank)
15
* Danny Al-Gaaf
16
* Anip Patel (Arizona State University)
17
* Name
18
19
h3. Current Status
20
21
This would be in addition to the copy-on-write support implemented in librbd/AioRequest.cc.
22
23
h3. Detailed Description
24
25
Currently clones in rbd only copy data from their parent when they write to an object. Reading a clone will read data from the parent if the relevant object in the clone does not exist yet. If the clone is being used from a location far away from the parent in latency, reads will be very expensive. Caching the parent image could help, but if the clone is expected to stay far away from the parent (for example if the parent is in a different pool in a separate geographical location), it is useful to have a local copy of the parent. Rather than copying the parent all at once, we can opportunistically copy data from the parent to the clone as it is read (or partially overwritten). That is, a read would fetch the entire
26
range needed for a clone's object, and write it to the clone in the background.
27
28
h3. Work items
29
30
h3. Coding tasks
31
32
# librbd: add copy-on-read option (standard ceph option that can be read from config file, env, or cli)
33
# librbd: for clone reads from a parent, read the entire object if copy-on-read (or another? flag is set)
34
# librbd: asynchronously write parent data to the child if copy-on-read flag is set
35
36
h3. Documentation tasks
37
38
# Document new flag(s) - where and why to use them