xref: /spdk/lib/ftl/ftl_trace.h (revision 63b3b8fd8f7e6cb6a348c2fcdd189aa62baf44f6)
1 /*-
2  *   BSD LICENSE
3  *
4  *   Copyright (c) Intel Corporation.
5  *   All rights reserved.
6  *
7  *   Redistribution and use in source and binary forms, with or without
8  *   modification, are permitted provided that the following conditions
9  *   are met:
10  *
11  *     * Redistributions of source code must retain the above copyright
12  *       notice, this list of conditions and the following disclaimer.
13  *     * Redistributions in binary form must reproduce the above copyright
14  *       notice, this list of conditions and the following disclaimer in
15  *       the documentation and/or other materials provided with the
16  *       distribution.
17  *     * Neither the name of Intel Corporation nor the names of its
18  *       contributors may be used to endorse or promote products derived
19  *       from this software without specific prior written permission.
20  *
21  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 #ifndef FTL_TRACE_H
35 #define FTL_TRACE_H
36 
37 #include "ftl_ppa.h"
38 
39 #define FTL_TRACE_INVALID_ID ((uint64_t) -1)
40 
41 enum ftl_trace_source {
42 	FTL_TRACE_SOURCE_INTERNAL = 0x20,
43 	FTL_TRACE_SOURCE_USER,
44 };
45 
46 enum ftl_trace_type {
47 	FTL_TRACE_TYPE_READ,
48 	FTL_TRACE_TYPE_MD_READ,
49 	FTL_TRACE_TYPE_WRITE,
50 	FTL_TRACE_TYPE_MD_WRITE,
51 	FTL_TRACE_TYPE_ERASE,
52 	FTL_TRACE_TYPE_OTHER,
53 };
54 
55 enum ftl_trace_point {
56 	FTL_TRACE_POINT_SCHEDULED,
57 	FTL_TRACE_POINT_RWB_FILL,
58 	FTL_TRACE_POINT_SUBMISSION,
59 	FTL_TRACE_POINT_OTHER,
60 };
61 
62 enum ftl_trace_completion {
63 	FTL_TRACE_COMPLETION_INVALID = FTL_TRACE_POINT_OTHER + 1,
64 	FTL_TRACE_COMPLETION_CACHE,
65 	FTL_TRACE_COMPLETION_DISK,
66 };
67 
68 struct ftl_event {
69 	/* Id used for grouping multiple events of the same request */
70 	uint64_t		id;
71 } __attribute__((packed));
72 
73 struct ftl_trace {
74 	/* Monotonically incrementing event id */
75 	uint64_t		id;
76 };
77 
78 struct spdk_ftl_dev;
79 struct ftl_trace;
80 struct ftl_io;
81 struct ftl_rwb_entry;
82 struct ftl_band;
83 
84 uint64_t ftl_trace_alloc_id(struct spdk_ftl_dev *dev);
85 void ftl_trace_defrag_band(struct spdk_ftl_dev *dev, const struct ftl_band *band);
86 void ftl_trace_write_band(struct spdk_ftl_dev *dev, const struct ftl_band *band);
87 void ftl_trace_lba_io_init(struct spdk_ftl_dev *dev, const struct ftl_io *io);
88 void ftl_trace_rwb_fill(struct spdk_ftl_dev *dev, const struct ftl_io *io);
89 void ftl_trace_rwb_pop(struct spdk_ftl_dev *dev, const struct ftl_rwb_entry *entry);
90 void ftl_trace_submission(struct spdk_ftl_dev *dev,
91 			  const struct ftl_io *io,
92 			  struct ftl_ppa ppa, size_t ppa_cnt);
93 void ftl_trace_completion(struct spdk_ftl_dev *dev,
94 			  const struct ftl_io *io,
95 			  enum ftl_trace_completion type);
96 void ftl_trace_limits(struct spdk_ftl_dev *dev, const size_t *limits, size_t num_free);
97 
98 #endif /* FTL_TRACE_H */
99