]>
Commit | Line | Data |
---|---|---|
52118743 DJ |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* | |
3 | * Copyright 2021 Google LLC | |
4 | * Author: Daeho Jeong <[email protected]> | |
5 | */ | |
6 | #ifndef __F2FS_IOSTAT_H__ | |
7 | #define __F2FS_IOSTAT_H__ | |
8 | ||
a4b68176 DJ |
9 | struct bio_post_read_ctx; |
10 | ||
d9bac032 YL |
11 | enum iostat_lat_type { |
12 | READ_IO = 0, | |
13 | WRITE_SYNC_IO, | |
14 | WRITE_ASYNC_IO, | |
15 | MAX_IO_TYPE, | |
16 | }; | |
17 | ||
52118743 DJ |
18 | #ifdef CONFIG_F2FS_IOSTAT |
19 | ||
d9bac032 | 20 | #define NUM_PREALLOC_IOSTAT_CTXS 128 |
52118743 DJ |
21 | #define DEFAULT_IOSTAT_PERIOD_MS 3000 |
22 | #define MIN_IOSTAT_PERIOD_MS 100 | |
23 | /* maximum period of iostat tracing is 1 day */ | |
24 | #define MAX_IOSTAT_PERIOD_MS 8640000 | |
25 | ||
a4b68176 DJ |
26 | struct iostat_lat_info { |
27 | unsigned long sum_lat[MAX_IO_TYPE][NR_PAGE_TYPE]; /* sum of io latencies */ | |
28 | unsigned long peak_lat[MAX_IO_TYPE][NR_PAGE_TYPE]; /* peak io latency */ | |
29 | unsigned int bio_cnt[MAX_IO_TYPE][NR_PAGE_TYPE]; /* bio count */ | |
30 | }; | |
31 | ||
52118743 DJ |
32 | extern int __maybe_unused iostat_info_seq_show(struct seq_file *seq, |
33 | void *offset); | |
34 | extern void f2fs_reset_iostat(struct f2fs_sb_info *sbi); | |
34a23525 | 35 | extern void f2fs_update_iostat(struct f2fs_sb_info *sbi, struct inode *inode, |
52118743 | 36 | enum iostat_type type, unsigned long long io_bytes); |
a4b68176 DJ |
37 | |
38 | struct bio_iostat_ctx { | |
39 | struct f2fs_sb_info *sbi; | |
40 | unsigned long submit_ts; | |
41 | enum page_type type; | |
42 | struct bio_post_read_ctx *post_read_ctx; | |
43 | }; | |
44 | ||
45 | static inline void iostat_update_submit_ctx(struct bio *bio, | |
46 | enum page_type type) | |
47 | { | |
48 | struct bio_iostat_ctx *iostat_ctx = bio->bi_private; | |
49 | ||
50 | iostat_ctx->submit_ts = jiffies; | |
51 | iostat_ctx->type = type; | |
52 | } | |
53 | ||
54 | static inline struct bio_post_read_ctx *get_post_read_ctx(struct bio *bio) | |
55 | { | |
56 | struct bio_iostat_ctx *iostat_ctx = bio->bi_private; | |
57 | ||
58 | return iostat_ctx->post_read_ctx; | |
59 | } | |
60 | ||
d9bac032 | 61 | extern void iostat_update_and_unbind_ctx(struct bio *bio); |
a4b68176 DJ |
62 | extern void iostat_alloc_and_bind_ctx(struct f2fs_sb_info *sbi, |
63 | struct bio *bio, struct bio_post_read_ctx *ctx); | |
64 | extern int f2fs_init_iostat_processing(void); | |
65 | extern void f2fs_destroy_iostat_processing(void); | |
52118743 | 66 | extern int f2fs_init_iostat(struct f2fs_sb_info *sbi); |
a4b68176 | 67 | extern void f2fs_destroy_iostat(struct f2fs_sb_info *sbi); |
52118743 | 68 | #else |
34a23525 | 69 | static inline void f2fs_update_iostat(struct f2fs_sb_info *sbi, struct inode *inode, |
52118743 | 70 | enum iostat_type type, unsigned long long io_bytes) {} |
d9bac032 | 71 | static inline void iostat_update_and_unbind_ctx(struct bio *bio) {} |
a4b68176 DJ |
72 | static inline void iostat_alloc_and_bind_ctx(struct f2fs_sb_info *sbi, |
73 | struct bio *bio, struct bio_post_read_ctx *ctx) {} | |
74 | static inline void iostat_update_submit_ctx(struct bio *bio, | |
75 | enum page_type type) {} | |
76 | static inline struct bio_post_read_ctx *get_post_read_ctx(struct bio *bio) | |
77 | { | |
78 | return bio->bi_private; | |
79 | } | |
80 | static inline int f2fs_init_iostat_processing(void) { return 0; } | |
81 | static inline void f2fs_destroy_iostat_processing(void) {} | |
52118743 | 82 | static inline int f2fs_init_iostat(struct f2fs_sb_info *sbi) { return 0; } |
a4b68176 | 83 | static inline void f2fs_destroy_iostat(struct f2fs_sb_info *sbi) {} |
52118743 DJ |
84 | #endif |
85 | #endif /* __F2FS_IOSTAT_H__ */ |