Project

General

Profile

RADOS Object Temperature Monitoring » History » Version 1

Jessica Mack, 06/09/2015 07:25 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
* Name
19
20
h3. Current Status
21
22
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.
23
24
h3. Detailed Description
25
26
There are two main challenges:
27
# Providing an upper bound on the most recent access for an object without maintaining an atime
28
# Allowing the client to efficiently find objects which have a sufficiently old atime
29
30
We can provide 1. through an api like:
31
ObjectFilterHandle IoCtx::open_object_filter();
32
void IoCtx::close_object_filter(ObjectFilterHandle handle);
33
void IoCtx::get_object_filter(ObjectFilterHandle handle, ObjectFilter *filter);
34
void IoCtx::remove_object_filter(ObjectFilterHandle handle);
35
bool ObjectFilter::maybe_accessed(const std::string &oid, const std::string &namespace) const;
36
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.
37
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.
38
 
39
h3. Work items
40
41
h3. Coding tasks
42
43
# Task 1
44
# Task 2
45
# Task 3
46
47
h3. Build / release tasks
48
49
# Task 1
50
# Task 2
51
# Task 3
52
53
h3. Documentation tasks
54
55
# Task 1
56
# Task 2
57
# Task 3
58
59
h3. Deprecation tasks
60
61
# Task 1
62
# Task 2
63
# Task 3