-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathlocal-storage-model.h
More file actions
130 lines (109 loc) · 3.22 KB
/
local-storage-model.h
File metadata and controls
130 lines (109 loc) · 3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
* Copyright (C) 2013 University of Chicago.
* See COPYRIGHT notice in top-level directory.
*
*/
#ifndef __LS_MODEL__
#define __LS_MODEL__
#ifdef __cplusplus
extern "C" {
#endif
#include <ross.h>
#include "codes-callback.h"
#include "codes-mapping-context.h"
#define LSM_NAME "lsm"
/* HACK: problems arise when some LP sends multiple messages as part of an
* event and expects FCFS ordering. One could simply set a higher delay in
* delay, but that is hacky as well (and relies on knowing bounds on internal
* codes_local_latency bounds. Hence, expose explicit start-sequence and
* stop-sequence markers */
extern int lsm_in_sequence;
extern tw_stime lsm_msg_offset;
#define LSM_START_SEQ() do {\
lsm_in_sequence = 1; \
lsm_msg_offset = 0.0; \
} while (0)
#define LSM_END_SEQ() do {\
lsm_in_sequence = 0;\
} while (0)
/*
* lsm_event_t
* - events supported by the local storage model
*/
typedef enum lsm_event_e
{
LSM_WRITE_REQUEST = 1,
LSM_READ_REQUEST = 2,
LSM_WRITE_COMPLETION = 3,
LSM_READ_COMPLETION = 4
} lsm_event_t;
/*
* return type for lsm events (in the codes-callback sense)
*/
typedef struct {
int rc;
} lsm_return_t;
/*
* Prototypes
*/
/* given LP sender, find the LSM device LP in the same group */
tw_lpid lsm_find_local_device(
struct codes_mctx const * map_ctx,
tw_lpid sender_gid);
/*
* lsm_io_event
* - creates a new event that is targeted for the corresponding
* LSM LP.
* - this event will allow wrapping the callers completion event
* - lp_io_category: string name to identify the traffic category for use in
* lp-io
* - gid_offset: relative offset of the LSM LP to the originating LP
* - io_object: id of byte stream the caller will modify
* - io_offset: offset into byte stream
* - io_size_bytes: size in bytes of IO request
* - io_type: read or write request
*/
void lsm_io_event(
const char * lp_io_category,
uint64_t io_object,
int64_t io_offset,
uint64_t io_size_bytes,
int io_type,
tw_stime delay,
tw_lp *sender,
struct codes_mctx const * map_ctx,
int return_tag,
msg_header const * return_header,
struct codes_cb_info const * cb);
void lsm_io_event_rc(tw_lp *sender);
/* get the priority count for the LSM scheduler.
* returns 0 if priorities aren't being used, -1 if no LSMs were configured,
* and >0 otherwise.
* This should not be called before lsm_configure */
int lsm_get_num_priorities(
struct codes_mctx const * map_ctx,
tw_lpid sender_id);
/* set a request priority for the following lsm_event_*.
* - tw_error will be called if the priority ends up being out-of-bounds
* (won't able to tell until the lsm_event call b/c annotations)
* - not setting a priority (or setting a negative priority) is equivalent to
* setting the message to the lowest priority
*/
void lsm_set_event_priority(int prio);
/* registers the storage model LP with CODES/ROSS */
void lsm_register(void);
/* configures the LSM model(s) */
void lsm_configure(void);
#define LSM_DEBUG 0
#ifdef __cplusplus
}
#endif
#endif
/*
* Local variables:
* c-indent-level: 4
* c-basic-offset: 4
* End:
*
* vim: ft=c ts=8 sts=4 sw=4 expandtab
*/