Project

General

Profile

RADOS Object Temperature Monitoring » History » Version 2

liu mingxin, 06/18/2015 03:37 AM

1 1 Jessica Mack
h1. RADOS Object Temperature Monitoring
2
3
h3. Summary
4
5
RADOS level tiering requires a way to identify objects which are infrequently read or written (cold objects).  To that end, RADOS needs to expose a way for users to efficiently find cold objects.
6
7
h3. Owners
8
9
* Samuel Just (Inktank)
10
* Name (Affiliation)
11
* Name
12
13
h3. Interested Parties
14
15
* Samuel Just (Inktank)
16
* Loic Dachary <loic@dachary.org>
17
* Kai Zhang (Cisco)
18 2 liu mingxin
* Mingxin Liu (Ubuntukylin)
19 1 Jessica Mack
* Name
20
21
h3. Current Status
22
23
RADOS currently exposes information about the last modification time, but not about the last read time.  In addition, there is no efficient way to find cold objects save for iterating over a pool.
24
25
h3. Detailed Description
26
27
There are two main challenges:
28
# Providing an upper bound on the most recent access for an object without maintaining an atime
29
# Allowing the client to efficiently find objects which have a sufficiently old atime
30
31
We can provide 1. through an api like:
32
ObjectFilterHandle IoCtx::open_object_filter();
33
void IoCtx::close_object_filter(ObjectFilterHandle handle);
34
void IoCtx::get_object_filter(ObjectFilterHandle handle, ObjectFilter *filter);
35
void IoCtx::remove_object_filter(ObjectFilterHandle handle);
36
bool ObjectFilter::maybe_accessed(const std::string &oid, const std::string &namespace) const;
37
A tiering system could use this interface to obtain an ObjectFilter which would tell it whether a particular object was possibly accessed over the lifetime of the filter.  One approach to implementing this would be to add filter open, close, and removal events to the OSDMap as with snapshots.  PGs would then, upon processing an OSDMap, check for filter events and update local filters accordingly.  A simple option to handle OSD failure to be for a new primary upon going active to simply create replacement filters which report that all objects might have been modified.  get_object_filter obtains the set of filters from each PG and maybe_accessed queries the appropriate filter for the object queried.
38
There seem to be two approaches for 2.  One is for the client to simply use the existing rados pool iteration facilities to walk through the set of objects in the pool and compare them against filters which have been obtained.  The second would be for the OSD scrub mechanism to call into user provided code with each object and the set of stored filters.  The user provided code (scrub class?) could send a message to a tiering service based on the object and filters to satisfy a particular tiering policy.
39
 
40
h3. Work items
41
42
h3. Coding tasks
43
44
# Task 1
45
# Task 2
46
# Task 3
47
48
h3. Build / release tasks
49
50
# Task 1
51
# Task 2
52
# Task 3
53
54
h3. Documentation tasks
55
56
# Task 1
57
# Task 2
58
# Task 3
59
60
h3. Deprecation tasks
61
62
# Task 1
63
# Task 2
64
# Task 3