bcache.h 10.4 KB
Newer Older
K
Kent Overstreet 已提交
1 2 3 4 5 6 7 8 9
#undef TRACE_SYSTEM
#define TRACE_SYSTEM bcache

#if !defined(_TRACE_BCACHE_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_BCACHE_H

#include <linux/tracepoint.h>

DECLARE_EVENT_CLASS(bcache_request,
K
Kent Overstreet 已提交
10 11
	TP_PROTO(struct bcache_device *d, struct bio *bio),
	TP_ARGS(d, bio),
K
Kent Overstreet 已提交
12 13 14 15 16 17 18 19 20 21 22 23 24

	TP_STRUCT__entry(
		__field(dev_t,		dev			)
		__field(unsigned int,	orig_major		)
		__field(unsigned int,	orig_minor		)
		__field(sector_t,	sector			)
		__field(dev_t,		orig_sector		)
		__field(unsigned int,	nr_sector		)
		__array(char,		rwbs,	6		)
	),

	TP_fast_assign(
		__entry->dev		= bio->bi_bdev->bd_dev;
K
Kent Overstreet 已提交
25 26
		__entry->orig_major	= d->disk->major;
		__entry->orig_minor	= d->disk->first_minor;
27 28 29 30
		__entry->sector		= bio->bi_iter.bi_sector;
		__entry->orig_sector	= bio->bi_iter.bi_sector - 16;
		__entry->nr_sector	= bio->bi_iter.bi_size >> 9;
		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
K
Kent Overstreet 已提交
31 32
	),

K
Kent Overstreet 已提交
33
	TP_printk("%d,%d %s %llu + %u (from %d,%d @ %llu)",
K
Kent Overstreet 已提交
34
		  MAJOR(__entry->dev), MINOR(__entry->dev),
K
Kent Overstreet 已提交
35 36
		  __entry->rwbs, (unsigned long long)__entry->sector,
		  __entry->nr_sector, __entry->orig_major, __entry->orig_minor,
K
Kent Overstreet 已提交
37 38 39
		  (unsigned long long)__entry->orig_sector)
);

K
Kent Overstreet 已提交
40 41 42
DECLARE_EVENT_CLASS(bkey,
	TP_PROTO(struct bkey *k),
	TP_ARGS(k),
K
Kent Overstreet 已提交
43

K
Kent Overstreet 已提交
44 45 46 47 48 49
	TP_STRUCT__entry(
		__field(u32,	size				)
		__field(u32,	inode				)
		__field(u64,	offset				)
		__field(bool,	dirty				)
	),
K
Kent Overstreet 已提交
50

K
Kent Overstreet 已提交
51 52 53 54 55 56 57 58 59
	TP_fast_assign(
		__entry->inode	= KEY_INODE(k);
		__entry->offset	= KEY_OFFSET(k);
		__entry->size	= KEY_SIZE(k);
		__entry->dirty	= KEY_DIRTY(k);
	),

	TP_printk("%u:%llu len %u dirty %u", __entry->inode,
		  __entry->offset, __entry->size, __entry->dirty)
K
Kent Overstreet 已提交
60 61
);

K
Kent Overstreet 已提交
62 63 64 65 66 67 68 69 70 71 72
DECLARE_EVENT_CLASS(btree_node,
	TP_PROTO(struct btree *b),
	TP_ARGS(b),

	TP_STRUCT__entry(
		__field(size_t,		bucket			)
	),

	TP_fast_assign(
		__entry->bucket	= PTR_BUCKET_NR(b->c, &b->key, 0);
	),
K
Kent Overstreet 已提交
73

K
Kent Overstreet 已提交
74 75 76 77 78 79
	TP_printk("bucket %zu", __entry->bucket)
);

/* request.c */

DEFINE_EVENT(bcache_request, bcache_request_start,
K
Kent Overstreet 已提交
80 81
	TP_PROTO(struct bcache_device *d, struct bio *bio),
	TP_ARGS(d, bio)
K
Kent Overstreet 已提交
82
);
K
Kent Overstreet 已提交
83

K
Kent Overstreet 已提交
84
DEFINE_EVENT(bcache_request, bcache_request_end,
K
Kent Overstreet 已提交
85 86
	TP_PROTO(struct bcache_device *d, struct bio *bio),
	TP_ARGS(d, bio)
K
Kent Overstreet 已提交
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
);

DECLARE_EVENT_CLASS(bcache_bio,
	TP_PROTO(struct bio *bio),
	TP_ARGS(bio),

	TP_STRUCT__entry(
		__field(dev_t,		dev			)
		__field(sector_t,	sector			)
		__field(unsigned int,	nr_sector		)
		__array(char,		rwbs,	6		)
	),

	TP_fast_assign(
		__entry->dev		= bio->bi_bdev->bd_dev;
102 103 104
		__entry->sector		= bio->bi_iter.bi_sector;
		__entry->nr_sector	= bio->bi_iter.bi_size >> 9;
		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
K
Kent Overstreet 已提交
105 106
	),

K
Kent Overstreet 已提交
107 108 109
	TP_printk("%d,%d  %s %llu + %u",
		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
		  (unsigned long long)__entry->sector, __entry->nr_sector)
K
Kent Overstreet 已提交
110 111
);

K
Kent Overstreet 已提交
112
DEFINE_EVENT(bcache_bio, bcache_bypass_sequential,
K
Kent Overstreet 已提交
113 114 115 116
	TP_PROTO(struct bio *bio),
	TP_ARGS(bio)
);

K
Kent Overstreet 已提交
117
DEFINE_EVENT(bcache_bio, bcache_bypass_congested,
K
Kent Overstreet 已提交
118 119 120 121
	TP_PROTO(struct bio *bio),
	TP_ARGS(bio)
);

K
Kent Overstreet 已提交
122 123 124
TRACE_EVENT(bcache_read,
	TP_PROTO(struct bio *bio, bool hit, bool bypass),
	TP_ARGS(bio, hit, bypass),
K
Kent Overstreet 已提交
125

K
Kent Overstreet 已提交
126 127 128 129 130 131 132 133
	TP_STRUCT__entry(
		__field(dev_t,		dev			)
		__field(sector_t,	sector			)
		__field(unsigned int,	nr_sector		)
		__array(char,		rwbs,	6		)
		__field(bool,		cache_hit		)
		__field(bool,		bypass			)
	),
K
Kent Overstreet 已提交
134

K
Kent Overstreet 已提交
135 136
	TP_fast_assign(
		__entry->dev		= bio->bi_bdev->bd_dev;
137 138 139
		__entry->sector		= bio->bi_iter.bi_sector;
		__entry->nr_sector	= bio->bi_iter.bi_size >> 9;
		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
K
Kent Overstreet 已提交
140 141 142 143 144 145 146 147
		__entry->cache_hit = hit;
		__entry->bypass = bypass;
	),

	TP_printk("%d,%d  %s %llu + %u hit %u bypass %u",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  __entry->rwbs, (unsigned long long)__entry->sector,
		  __entry->nr_sector, __entry->cache_hit, __entry->bypass)
K
Kent Overstreet 已提交
148 149
);

K
Kent Overstreet 已提交
150 151 152
TRACE_EVENT(bcache_write,
	TP_PROTO(struct bio *bio, bool writeback, bool bypass),
	TP_ARGS(bio, writeback, bypass),
K
Kent Overstreet 已提交
153

K
Kent Overstreet 已提交
154 155 156 157 158 159 160 161
	TP_STRUCT__entry(
		__field(dev_t,		dev			)
		__field(sector_t,	sector			)
		__field(unsigned int,	nr_sector		)
		__array(char,		rwbs,	6		)
		__field(bool,		writeback		)
		__field(bool,		bypass			)
	),
K
Kent Overstreet 已提交
162

K
Kent Overstreet 已提交
163 164
	TP_fast_assign(
		__entry->dev		= bio->bi_bdev->bd_dev;
165 166 167
		__entry->sector		= bio->bi_iter.bi_sector;
		__entry->nr_sector	= bio->bi_iter.bi_size >> 9;
		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
K
Kent Overstreet 已提交
168 169 170
		__entry->writeback = writeback;
		__entry->bypass = bypass;
	),
K
Kent Overstreet 已提交
171

K
Kent Overstreet 已提交
172 173 174 175 176
	TP_printk("%d,%d  %s %llu + %u hit %u bypass %u",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  __entry->rwbs, (unsigned long long)__entry->sector,
		  __entry->nr_sector, __entry->writeback, __entry->bypass)
);
K
Kent Overstreet 已提交
177

K
Kent Overstreet 已提交
178
DEFINE_EVENT(bcache_bio, bcache_read_retry,
K
Kent Overstreet 已提交
179 180 181 182
	TP_PROTO(struct bio *bio),
	TP_ARGS(bio)
);

K
Kent Overstreet 已提交
183 184 185 186
DEFINE_EVENT(bkey, bcache_cache_insert,
	TP_PROTO(struct bkey *k),
	TP_ARGS(k)
);
K
Kent Overstreet 已提交
187

K
Kent Overstreet 已提交
188
/* Journal */
K
Kent Overstreet 已提交
189

K
Kent Overstreet 已提交
190 191 192
DECLARE_EVENT_CLASS(cache_set,
	TP_PROTO(struct cache_set *c),
	TP_ARGS(c),
K
Kent Overstreet 已提交
193

K
Kent Overstreet 已提交
194 195 196
	TP_STRUCT__entry(
		__array(char,		uuid,	16 )
	),
K
Kent Overstreet 已提交
197

K
Kent Overstreet 已提交
198 199 200
	TP_fast_assign(
		memcpy(__entry->uuid, c->sb.set_uuid, 16);
	),
K
Kent Overstreet 已提交
201

K
Kent Overstreet 已提交
202
	TP_printk("%pU", __entry->uuid)
K
Kent Overstreet 已提交
203 204
);

K
Kent Overstreet 已提交
205 206 207 208
DEFINE_EVENT(bkey, bcache_journal_replay_key,
	TP_PROTO(struct bkey *k),
	TP_ARGS(k)
);
K
Kent Overstreet 已提交
209

K
Kent Overstreet 已提交
210 211 212
DEFINE_EVENT(cache_set, bcache_journal_full,
	TP_PROTO(struct cache_set *c),
	TP_ARGS(c)
K
Kent Overstreet 已提交
213 214
);

K
Kent Overstreet 已提交
215 216 217 218
DEFINE_EVENT(cache_set, bcache_journal_entry_full,
	TP_PROTO(struct cache_set *c),
	TP_ARGS(c)
);
K
Kent Overstreet 已提交
219

K
Kent Overstreet 已提交
220
DEFINE_EVENT(bcache_bio, bcache_journal_write,
K
Kent Overstreet 已提交
221 222 223 224
	TP_PROTO(struct bio *bio),
	TP_ARGS(bio)
);

K
Kent Overstreet 已提交
225
/* Btree */
K
Kent Overstreet 已提交
226

K
Kent Overstreet 已提交
227 228 229 230
DEFINE_EVENT(cache_set, bcache_btree_cache_cannibalize,
	TP_PROTO(struct cache_set *c),
	TP_ARGS(c)
);
K
Kent Overstreet 已提交
231

K
Kent Overstreet 已提交
232 233 234
DEFINE_EVENT(btree_node, bcache_btree_read,
	TP_PROTO(struct btree *b),
	TP_ARGS(b)
K
Kent Overstreet 已提交
235 236
);

K
Kent Overstreet 已提交
237 238 239
TRACE_EVENT(bcache_btree_write,
	TP_PROTO(struct btree *b),
	TP_ARGS(b),
K
Kent Overstreet 已提交
240

K
Kent Overstreet 已提交
241 242 243 244 245
	TP_STRUCT__entry(
		__field(size_t,		bucket			)
		__field(unsigned,	block			)
		__field(unsigned,	keys			)
	),
K
Kent Overstreet 已提交
246

K
Kent Overstreet 已提交
247 248 249 250 251 252 253
	TP_fast_assign(
		__entry->bucket	= PTR_BUCKET_NR(b->c, &b->key, 0);
		__entry->block	= b->written;
		__entry->keys	= b->sets[b->nsets].data->keys;
	),

	TP_printk("bucket %zu", __entry->bucket)
K
Kent Overstreet 已提交
254 255
);

K
Kent Overstreet 已提交
256 257 258 259
DEFINE_EVENT(btree_node, bcache_btree_node_alloc,
	TP_PROTO(struct btree *b),
	TP_ARGS(b)
);
K
Kent Overstreet 已提交
260

K
Kent Overstreet 已提交
261 262 263 264
DEFINE_EVENT(btree_node, bcache_btree_node_alloc_fail,
	TP_PROTO(struct btree *b),
	TP_ARGS(b)
);
K
Kent Overstreet 已提交
265

K
Kent Overstreet 已提交
266 267 268
DEFINE_EVENT(btree_node, bcache_btree_node_free,
	TP_PROTO(struct btree *b),
	TP_ARGS(b)
K
Kent Overstreet 已提交
269 270
);

K
Kent Overstreet 已提交
271 272 273
TRACE_EVENT(bcache_btree_gc_coalesce,
	TP_PROTO(unsigned nodes),
	TP_ARGS(nodes),
K
Kent Overstreet 已提交
274

K
Kent Overstreet 已提交
275 276 277
	TP_STRUCT__entry(
		__field(unsigned,	nodes			)
	),
K
Kent Overstreet 已提交
278

K
Kent Overstreet 已提交
279 280 281
	TP_fast_assign(
		__entry->nodes	= nodes;
	),
K
Kent Overstreet 已提交
282

K
Kent Overstreet 已提交
283 284
	TP_printk("coalesced %u nodes", __entry->nodes)
);
K
Kent Overstreet 已提交
285

K
Kent Overstreet 已提交
286 287 288 289
DEFINE_EVENT(cache_set, bcache_gc_start,
	TP_PROTO(struct cache_set *c),
	TP_ARGS(c)
);
K
Kent Overstreet 已提交
290

K
Kent Overstreet 已提交
291 292 293
DEFINE_EVENT(cache_set, bcache_gc_end,
	TP_PROTO(struct cache_set *c),
	TP_ARGS(c)
K
Kent Overstreet 已提交
294 295
);

K
Kent Overstreet 已提交
296 297 298 299
DEFINE_EVENT(bkey, bcache_gc_copy,
	TP_PROTO(struct bkey *k),
	TP_ARGS(k)
);
K
Kent Overstreet 已提交
300

K
Kent Overstreet 已提交
301 302 303 304
DEFINE_EVENT(bkey, bcache_gc_copy_collision,
	TP_PROTO(struct bkey *k),
	TP_ARGS(k)
);
K
Kent Overstreet 已提交
305

306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338
TRACE_EVENT(bcache_btree_insert_key,
	TP_PROTO(struct btree *b, struct bkey *k, unsigned op, unsigned status),
	TP_ARGS(b, k, op, status),

	TP_STRUCT__entry(
		__field(u64,	btree_node			)
		__field(u32,	btree_level			)
		__field(u32,	inode				)
		__field(u64,	offset				)
		__field(u32,	size				)
		__field(u8,	dirty				)
		__field(u8,	op				)
		__field(u8,	status				)
	),

	TP_fast_assign(
		__entry->btree_node = PTR_BUCKET_NR(b->c, &b->key, 0);
		__entry->btree_level = b->level;
		__entry->inode	= KEY_INODE(k);
		__entry->offset	= KEY_OFFSET(k);
		__entry->size	= KEY_SIZE(k);
		__entry->dirty	= KEY_DIRTY(k);
		__entry->op = op;
		__entry->status = status;
	),

	TP_printk("%u for %u at %llu(%u): %u:%llu len %u dirty %u",
		  __entry->status, __entry->op,
		  __entry->btree_node, __entry->btree_level,
		  __entry->inode, __entry->offset,
		  __entry->size, __entry->dirty)
);

K
Kent Overstreet 已提交
339 340 341
DECLARE_EVENT_CLASS(btree_split,
	TP_PROTO(struct btree *b, unsigned keys),
	TP_ARGS(b, keys),
K
Kent Overstreet 已提交
342 343

	TP_STRUCT__entry(
K
Kent Overstreet 已提交
344 345
		__field(size_t,		bucket			)
		__field(unsigned,	keys			)
K
Kent Overstreet 已提交
346 347 348
	),

	TP_fast_assign(
K
Kent Overstreet 已提交
349 350
		__entry->bucket	= PTR_BUCKET_NR(b->c, &b->key, 0);
		__entry->keys	= keys;
K
Kent Overstreet 已提交
351 352
	),

K
Kent Overstreet 已提交
353
	TP_printk("bucket %zu keys %u", __entry->bucket, __entry->keys)
K
Kent Overstreet 已提交
354 355
);

K
Kent Overstreet 已提交
356 357 358 359
DEFINE_EVENT(btree_split, bcache_btree_node_split,
	TP_PROTO(struct btree *b, unsigned keys),
	TP_ARGS(b, keys)
);
K
Kent Overstreet 已提交
360

K
Kent Overstreet 已提交
361 362 363
DEFINE_EVENT(btree_split, bcache_btree_node_compact,
	TP_PROTO(struct btree *b, unsigned keys),
	TP_ARGS(b, keys)
K
Kent Overstreet 已提交
364 365
);

K
Kent Overstreet 已提交
366 367 368 369
DEFINE_EVENT(btree_node, bcache_btree_set_root,
	TP_PROTO(struct btree *b),
	TP_ARGS(b)
);
K
Kent Overstreet 已提交
370

371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399
TRACE_EVENT(bcache_keyscan,
	TP_PROTO(unsigned nr_found,
		 unsigned start_inode, uint64_t start_offset,
		 unsigned end_inode, uint64_t end_offset),
	TP_ARGS(nr_found,
		start_inode, start_offset,
		end_inode, end_offset),

	TP_STRUCT__entry(
		__field(__u32,	nr_found			)
		__field(__u32,	start_inode			)
		__field(__u64,	start_offset			)
		__field(__u32,	end_inode			)
		__field(__u64,	end_offset			)
	),

	TP_fast_assign(
		__entry->nr_found	= nr_found;
		__entry->start_inode	= start_inode;
		__entry->start_offset	= start_offset;
		__entry->end_inode	= end_inode;
		__entry->end_offset	= end_offset;
	),

	TP_printk("found %u keys from %u:%llu to %u:%llu", __entry->nr_found,
		  __entry->start_inode, __entry->start_offset,
		  __entry->end_inode, __entry->end_offset)
);

K
Kent Overstreet 已提交
400
/* Allocator */
K
Kent Overstreet 已提交
401

K
Kent Overstreet 已提交
402 403 404
TRACE_EVENT(bcache_alloc_invalidate,
	TP_PROTO(struct cache *ca),
	TP_ARGS(ca),
K
Kent Overstreet 已提交
405 406

	TP_STRUCT__entry(
K
Kent Overstreet 已提交
407 408 409 410
		__field(unsigned,	free			)
		__field(unsigned,	free_inc		)
		__field(unsigned,	free_inc_size		)
		__field(unsigned,	unused			)
K
Kent Overstreet 已提交
411 412 413
	),

	TP_fast_assign(
414
		__entry->free		= fifo_used(&ca->free[RESERVE_NONE]);
K
Kent Overstreet 已提交
415 416 417
		__entry->free_inc	= fifo_used(&ca->free_inc);
		__entry->free_inc_size	= ca->free_inc.size;
		__entry->unused		= fifo_used(&ca->unused);
K
Kent Overstreet 已提交
418 419
	),

K
Kent Overstreet 已提交
420 421
	TP_printk("free %u free_inc %u/%u unused %u", __entry->free,
		  __entry->free_inc, __entry->free_inc_size, __entry->unused)
K
Kent Overstreet 已提交
422 423
);

K
Kent Overstreet 已提交
424
TRACE_EVENT(bcache_alloc_fail,
425 426
	TP_PROTO(struct cache *ca, unsigned reserve),
	TP_ARGS(ca, reserve),
K
Kent Overstreet 已提交
427

K
Kent Overstreet 已提交
428 429 430 431 432 433
	TP_STRUCT__entry(
		__field(unsigned,	free			)
		__field(unsigned,	free_inc		)
		__field(unsigned,	unused			)
		__field(unsigned,	blocked			)
	),
K
Kent Overstreet 已提交
434

K
Kent Overstreet 已提交
435
	TP_fast_assign(
436
		__entry->free		= fifo_used(&ca->free[reserve]);
K
Kent Overstreet 已提交
437 438 439 440
		__entry->free_inc	= fifo_used(&ca->free_inc);
		__entry->unused		= fifo_used(&ca->unused);
		__entry->blocked	= atomic_read(&ca->set->prio_blocked);
	),
K
Kent Overstreet 已提交
441

K
Kent Overstreet 已提交
442 443
	TP_printk("free %u free_inc %u unused %u blocked %u", __entry->free,
		  __entry->free_inc, __entry->unused, __entry->blocked)
K
Kent Overstreet 已提交
444 445
);

K
Kent Overstreet 已提交
446
/* Background writeback */
K
Kent Overstreet 已提交
447

K
Kent Overstreet 已提交
448 449 450 451
DEFINE_EVENT(bkey, bcache_writeback,
	TP_PROTO(struct bkey *k),
	TP_ARGS(k)
);
K
Kent Overstreet 已提交
452

K
Kent Overstreet 已提交
453 454 455
DEFINE_EVENT(bkey, bcache_writeback_collision,
	TP_PROTO(struct bkey *k),
	TP_ARGS(k)
K
Kent Overstreet 已提交
456 457 458 459 460 461
);

#endif /* _TRACE_BCACHE_H */

/* This part must be outside protection */
#include <trace/define_trace.h>