Skip to content

Commit ddd3de5

Browse files
mmichal10Robert Baldyga
authored andcommitted
Debug request tracing
Signed-off-by: Michal Mielewczyk <michal.mielewczyk@huawei.com> Signed-off-by: Robert Baldyga <robert.baldyga@huawei.com>
1 parent 1ab882a commit ddd3de5

File tree

14 files changed

+87
-3
lines changed

14 files changed

+87
-3
lines changed

src/engine/cache_engine.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ enum ocf_io_if_type {
4141
OCF_IO_FAST_IF,
4242
OCF_IO_FLUSH_IF,
4343
OCF_IO_DISCARD_IF,
44+
OCF_IO_REFRESH_IF,
45+
OCF_IO_INVALIDATE_IF,
46+
OCF_IO_RD_IF,
4447
OCF_IO_PRIV_MAX_IF,
4548
};
4649

@@ -108,6 +111,18 @@ static const struct ocf_io_if IO_IFS[OCF_IO_PRIV_MAX_IF] = {
108111
},
109112
.name = "Discard",
110113
},
114+
[OCF_IO_REFRESH_IF] = {
115+
.cbs = { },
116+
.name = "Refresh",
117+
},
118+
[OCF_IO_INVALIDATE_IF] = {
119+
.cbs = { },
120+
.name = "Invalidate",
121+
},
122+
[OCF_IO_RD_IF] = {
123+
.cbs = { },
124+
.name = "Read generic",
125+
},
111126
};
112127

113128
static const struct ocf_io_if *cache_mode_io_if_map[ocf_req_cache_mode_max] = {
@@ -118,8 +133,29 @@ static const struct ocf_io_if *cache_mode_io_if_map[ocf_req_cache_mode_max] = {
118133
[ocf_req_cache_mode_wo] = &IO_IFS[OCF_IO_WO_IF],
119134
[ocf_req_cache_mode_pt] = &IO_IFS[OCF_IO_PT_IF],
120135
[ocf_req_cache_mode_fast] = &IO_IFS[OCF_IO_FAST_IF],
136+
[ocf_req_refresh] = &IO_IFS[OCF_IO_REFRESH_IF],
137+
[ocf_req_cache_mode_discard] = &IO_IFS[OCF_IO_DISCARD_IF],
138+
[ocf_req_cache_mode_invalidate] = &IO_IFS[OCF_IO_INVALIDATE_IF],
139+
[ocf_req_cache_mode_rd] = &IO_IFS[OCF_IO_RD_IF],
121140
};
122141

142+
void ocf_debug_request_trace(struct ocf_request *req,
143+
ocf_req_cache_mode_t engine, uint8_t origin)
144+
{
145+
ENV_WARN_ONCE(origin & ~0xf, "Invalid req origin origin\n");
146+
ENV_WARN_ONCE(engine & ~0xe, "Invalid req engine\n");
147+
148+
ENV_WARN_ONCE(req->engine_trace & 0xff00000000000000,
149+
"Request trace too long\n");
150+
151+
req->engine_trace <<= 4;
152+
// +1 to make sure that WT has a different value than zero
153+
req->engine_trace |= (engine + 1);
154+
155+
req->engine_trace <<= 4;
156+
req->engine_trace |= origin;
157+
}
158+
123159
const char *ocf_get_io_iface_name(ocf_req_cache_mode_t cache_mode)
124160
{
125161
if (cache_mode == ocf_req_cache_mode_max)
@@ -211,6 +247,7 @@ int ocf_engine_hndl_req(struct ocf_request *req)
211247
* to into OCF workers
212248
*/
213249

250+
ocf_debug_request_trace(req, req->cache_mode, 0xf);
214251
ocf_queue_push_req(req, OCF_QUEUE_ALLOW_SYNC);
215252

216253
return 0;
@@ -227,6 +264,7 @@ int ocf_engine_hndl_fast_req(struct ocf_request *req)
227264

228265
ocf_req_get(req);
229266

267+
ocf_debug_request_trace(req, req->cache_mode, 0xe);
230268
ret = engine_cb(req);
231269

232270
if (ret == OCF_FAST_PATH_NO)
@@ -239,13 +277,15 @@ void ocf_engine_hndl_discard_req(struct ocf_request *req)
239277
{
240278
ocf_req_get(req);
241279

280+
ocf_debug_request_trace(req, ocf_req_cache_mode_discard, 0);
242281
IO_IFS[OCF_IO_DISCARD_IF].cbs[req->rw](req);
243282
}
244283

245284
void ocf_engine_hndl_flush_req(struct ocf_request *req)
246285
{
247286
ocf_req_get(req);
248287

288+
ocf_debug_request_trace(req, ocf_req_cache_mode_flush, 0);
249289
req->engine_handler = IO_IFS[OCF_IO_FLUSH_IF].cbs[req->rw];
250290

251291
ocf_queue_push_req(req, OCF_QUEUE_ALLOW_SYNC);

src/engine/cache_engine.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,7 @@ void ocf_engine_hndl_flush_req(struct ocf_request *req);
4747

4848
void ocf_engine_hndl_discard_req(struct ocf_request *req);
4949

50+
void ocf_debug_request_trace(struct ocf_request *req,
51+
ocf_req_cache_mode_t engine, uint8_t info);
52+
5053
#endif

src/engine/engine_bf.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ static void _ocf_backfill_complete(struct ocf_request *req, int error)
5959
}
6060

6161
if (error) {
62+
ocf_debug_request_trace(req, ocf_req_cache_mode_invalidate, 1);
6263
ocf_engine_invalidate(req);
6364
} else {
6465
ocf_req_unlock(ocf_cache_line_concurrency(cache), req);

src/engine/engine_common.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,6 +612,7 @@ static int _ocf_engine_refresh(struct ocf_request *req)
612612
req->engine_handler = req->priv;
613613
req->priv = NULL;
614614

615+
ocf_debug_request_trace(req, ocf_req_refresh, 0xd);
615616
req->engine_handler(req);
616617
} else {
617618
ENV_WARN(true, "Inconsistent request");

src/engine/engine_discard.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,11 @@ static int _ocf_discard_step(struct ocf_request *req)
181181

182182
if (lock >= 0) {
183183
if (OCF_LOCK_ACQUIRED == lock) {
184+
ocf_debug_request_trace(req, ocf_req_cache_mode_discard, 0);
184185
_ocf_discard_step_do(req);
185186
} else {
186187
/* WR lock was not acquired, need to wait for resume */
188+
ocf_debug_request_trace(req, ocf_req_cache_mode_discard, 1);
187189
OCF_DEBUG_RQ(req, "NO LOCK")
188190
}
189191
} else {

src/engine/engine_fast.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ static void _ocf_read_fast_complete(struct ocf_request *req, int error)
3838

3939
OCF_DEBUG_RQ(req, "ERROR");
4040

41+
ocf_debug_request_trace(req, ocf_req_cache_mode_pt, 1);
4142
ocf_queue_push_req_pt(req);
4243
} else {
4344
ocf_req_unlock(ocf_cache_line_concurrency(req->cache), req);
@@ -55,6 +56,7 @@ static int _ocf_read_fast_do(struct ocf_request *req)
5556
if (ocf_engine_is_miss(req)) {
5657
/* It seams that after resume, now request is MISS, do PT */
5758
OCF_DEBUG_RQ(req, "Switching to read PT");
59+
ocf_debug_request_trace(req, ocf_req_cache_mode_pt, 0);
5860
ocf_read_pt_do(req);
5961
return 0;
6062

@@ -129,8 +131,10 @@ int ocf_read_fast(struct ocf_request *req)
129131
if (lock != OCF_LOCK_ACQUIRED) {
130132
/* Lock was not acquired, need to wait for resume */
131133
OCF_DEBUG_RQ(req, "NO LOCK");
134+
ocf_debug_request_trace(req, ocf_req_cache_mode_fast, 0);
132135
} else {
133136
/* Lock was acquired can perform IO */
137+
ocf_debug_request_trace(req, ocf_req_cache_mode_fast, 1);
134138
_ocf_read_fast_do(req);
135139
}
136140
} else {
@@ -194,9 +198,12 @@ int ocf_write_fast(struct ocf_request *req)
194198

195199
if (lock != OCF_LOCK_ACQUIRED) {
196200
/* Lock was not acquired, need to wait for resume */
201+
ocf_debug_request_trace(req, ocf_req_cache_mode_wb, 0);
197202
OCF_DEBUG_RQ(req, "NO LOCK");
198203
} else {
199204
/* Lock was acquired can perform IO */
205+
ocf_debug_request_trace(req, ocf_req_cache_mode_wb, 1);
206+
200207
ocf_write_wb_do(req);
201208
}
202209
} else {

src/engine/engine_pt.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ int ocf_read_pt(struct ocf_request *req)
9797

9898
OCF_DEBUG_TRACE(req->cache);
9999

100-
101100
/* Get OCF request - increase reference counter */
102101
ocf_req_get(req);
103102

@@ -136,14 +135,17 @@ int ocf_read_pt(struct ocf_request *req)
136135
* because of this force read data from cache
137136
*/
138137
ocf_req_clear(req);
138+
ocf_debug_request_trace(req, ocf_req_cache_mode_rd, 0);
139139
ocf_read_generic(req);
140140
} else {
141141
if (lock >= 0) {
142142
if (lock == OCF_LOCK_ACQUIRED) {
143143
/* Lock acquired perform read off operations */
144+
ocf_debug_request_trace(req, ocf_req_cache_mode_pt, 2);
144145
ocf_read_pt_do(req);
145146
} else {
146147
/* WR lock was not acquired, need to wait for resume */
148+
ocf_debug_request_trace(req, ocf_req_cache_mode_pt, 3);
147149
OCF_DEBUG_RQ(req, "NO LOCK");
148150
}
149151
} else {

src/engine/engine_rd.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,10 @@ int ocf_read_generic(struct ocf_request *req)
183183
int lock = OCF_LOCK_NOT_ACQUIRED;
184184
struct ocf_cache *cache = req->cache;
185185

186-
187186
if (env_atomic_read(&cache->pending_read_misses_list_blocked)) {
188187
/* There are conditions to bypass IO */
189188
req->force_pt = true;
189+
ocf_debug_request_trace(req, ocf_req_cache_mode_pt, 4);
190190
ocf_read_pt(req);
191191
return 0;
192192
}
@@ -204,9 +204,11 @@ int ocf_read_generic(struct ocf_request *req)
204204
if (lock >= 0) {
205205
if (lock != OCF_LOCK_ACQUIRED) {
206206
/* Lock was not acquired, need to wait for resume */
207+
ocf_debug_request_trace(req, ocf_req_cache_mode_rd, 1);
207208
OCF_DEBUG_RQ(req, "NO LOCK");
208209
} else {
209210
/* Lock was acquired can perform IO */
211+
ocf_debug_request_trace(req, ocf_req_cache_mode_rd, 2);
210212
_ocf_read_generic_do(req);
211213
}
212214
} else {
@@ -217,6 +219,7 @@ int ocf_read_generic(struct ocf_request *req)
217219
} else {
218220
ocf_req_clear(req);
219221
req->force_pt = true;
222+
ocf_debug_request_trace(req, ocf_req_cache_mode_pt, 5);
220223
ocf_read_pt(req);
221224
}
222225

src/engine/engine_wa.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,14 @@ int ocf_write_wa(struct ocf_request *req)
3636
ocf_req_clear(req);
3737

3838
/* There is HIT, do WT */
39+
ocf_debug_request_trace(req, ocf_req_cache_mode_wt, 2);
3940
ocf_write_wt(req);
4041

4142
} else {
4243
ocf_req_clear(req);
4344

4445
/* MISS, do WI */
46+
ocf_debug_request_trace(req, ocf_req_cache_mode_wi, 3);
4547
ocf_write_wi(req);
4648
}
4749

src/engine/engine_wb.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ static void _ocf_write_wb_complete(struct ocf_request *req, int error)
8787

8888
req->complete(req, error);
8989

90+
ocf_debug_request_trace(req, ocf_req_cache_mode_invalidate, 0);
9091
ocf_engine_invalidate(req);
9192
} else {
9293
ocf_queue_push_req_cb(req, ocf_write_wb_do_flush_metadata,
@@ -149,7 +150,6 @@ int ocf_write_wb(struct ocf_request *req)
149150
{
150151
int lock = OCF_LOCK_NOT_ACQUIRED;
151152

152-
153153
/* Not sure if we need this. */
154154
ocf_req_get(req);
155155

@@ -166,7 +166,9 @@ int ocf_write_wb(struct ocf_request *req)
166166
if (lock != OCF_LOCK_ACQUIRED) {
167167
/* WR lock was not acquired, need to wait for resume */
168168
OCF_DEBUG_RQ(req, "NO LOCK");
169+
ocf_debug_request_trace(req, ocf_req_cache_mode_wb, 3);
169170
} else {
171+
ocf_debug_request_trace(req, ocf_req_cache_mode_wb, 2);
170172
ocf_write_wb_do(req);
171173
}
172174
} else {
@@ -176,6 +178,7 @@ int ocf_write_wb(struct ocf_request *req)
176178
}
177179
} else {
178180
ocf_req_clear(req);
181+
ocf_debug_request_trace(req, ocf_req_cache_mode_wi, 0);
179182
ocf_write_wi(req);
180183
}
181184

0 commit comments

Comments
 (0)