• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef EBPF_STDTYPE_H
17 #define EBPF_STDTYPE_H
18 #include "base_stdtype.h"
19 
20 namespace SysTuning {
21 namespace TraceStdtype {
22 class FileSystemSample : public CacheBase {
23 public:
24     size_t AppendNewData(uint32_t callChainId,
25                          uint16_t type,
26                          uint32_t ipid,
27                          uint32_t itid,
28                          uint64_t startTs,
29                          uint64_t endTs,
30                          uint64_t dur,
31                          DataIndex returnValue,
32                          DataIndex errorCode,
33                          size_t size,
34                          int32_t fd,
35                          DataIndex fileId,
36                          DataIndex firstArgument,
37                          DataIndex secondArgument,
38                          DataIndex thirdArgument,
39                          DataIndex fourthArgument);
40     const std::deque<uint32_t>& CallChainIds() const;
41     const std::deque<uint16_t>& Types() const;
42     const std::deque<uint32_t>& Ipids() const;
43     const std::deque<uint32_t>& Itids() const;
44     const std::deque<uint64_t>& StartTs() const;
45     const std::deque<uint64_t>& EndTs() const;
46     const std::deque<uint64_t>& Durs() const;
47     const std::deque<DataIndex>& ReturnValues() const;
48     const std::deque<DataIndex>& ErrorCodes() const;
49     const std::deque<int32_t>& Fds() const;
50     const std::deque<DataIndex>& FileIds() const;
51     const std::deque<size_t>& Sizes() const;
52     const std::deque<DataIndex>& FirstArguments() const;
53     const std::deque<DataIndex>& SecondArguments() const;
54     const std::deque<DataIndex>& ThirdArguments() const;
55     const std::deque<DataIndex>& FourthArguments() const;
Clear()56     void Clear() override
57     {
58         CacheBase::Clear();
59         callChainIds_.clear();
60         types_.clear();
61         ipids_.clear();
62         itids_.clear();
63         startTs_.clear();
64         endTs_.clear();
65         durs_.clear();
66         returnValues_.clear();
67         errorCodes_.clear();
68         fds_.clear();
69         Sizes_.clear();
70         firstArguments_.clear();
71         secondArguments_.clear();
72         thirdArguments_.clear();
73         fourthArguments_.clear();
74     }
75 
76 private:
77     std::deque<uint32_t> callChainIds_ = {};
78     std::deque<uint16_t> types_ = {};
79     std::deque<uint32_t> ipids_ = {};
80     std::deque<uint32_t> itids_ = {};
81     std::deque<uint64_t> startTs_ = {};
82     std::deque<uint64_t> endTs_ = {};
83     std::deque<uint64_t> durs_ = {};
84     std::deque<DataIndex> returnValues_ = {};
85     std::deque<DataIndex> errorCodes_ = {};
86     std::deque<int32_t> fds_ = {};
87     std::deque<DataIndex> fileIds_ = {};
88     std::deque<size_t> Sizes_ = {};
89     std::deque<DataIndex> firstArguments_ = {};
90     std::deque<DataIndex> secondArguments_ = {};
91     std::deque<DataIndex> thirdArguments_ = {};
92     std::deque<DataIndex> fourthArguments_ = {};
93 };
94 
95 class PagedMemorySampleData : public CacheBase {
96 public:
97     size_t AppendNewData(uint32_t callChainId,
98                          uint16_t type,
99                          uint32_t ipid,
100                          uint64_t startTs,
101                          uint64_t endTs,
102                          uint64_t dur,
103                          size_t size,
104                          DataIndex addr,
105                          uint32_t itid);
106     const std::deque<uint32_t>& CallChainIds() const;
107     const std::deque<uint16_t>& Types() const;
108     const std::deque<uint32_t>& Ipids() const;
109     const std::deque<uint64_t>& StartTs() const;
110     const std::deque<uint64_t>& EndTs() const;
111     const std::deque<uint64_t>& Durs() const;
112     const std::deque<size_t>& Sizes() const;
113     const std::deque<DataIndex>& Addr() const;
114     const std::deque<uint32_t>& Itids() const;
Clear()115     void Clear() override
116     {
117         CacheBase::Clear();
118         callChainIds_.clear();
119         types_.clear();
120         ipids_.clear();
121         startTs_.clear();
122         endTs_.clear();
123         durs_.clear();
124         Sizes_.clear();
125         addrs_.clear();
126         itids_.clear();
127     }
128 
129 private:
130     std::deque<uint32_t> callChainIds_ = {};
131     std::deque<uint16_t> types_ = {};
132     std::deque<uint32_t> ipids_ = {};
133     std::deque<uint64_t> startTs_ = {};
134     std::deque<uint64_t> endTs_ = {};
135     std::deque<uint64_t> durs_ = {};
136     std::deque<size_t> Sizes_ = {};
137     std::deque<DataIndex> addrs_ = {};
138     std::deque<uint32_t> itids_ = {};
139 };
140 class BioLatencySampleData : public CacheBase {
141 public:
142     void AppendNewData(uint32_t callChainId,
143                        uint64_t type,
144                        uint32_t ipid,
145                        uint32_t itid,
146                        uint64_t startTs,
147                        uint64_t endTs,
148                        uint64_t latencyDur,
149                        uint32_t tier,
150                        uint64_t size,
151                        uint64_t blockNumber,
152                        uint64_t filePathId,
153                        uint64_t durPer4k);
154     const std::deque<uint32_t>& CallChainIds() const;
155     const std::deque<uint64_t>& Types() const;
156     const std::deque<uint32_t>& Ipids() const;
157     const std::deque<uint32_t>& Itids() const;
158     const std::deque<uint64_t>& StartTs() const;
159     const std::deque<uint64_t>& EndTs() const;
160     const std::deque<uint64_t>& LatencyDurs() const;
161     const std::deque<uint32_t>& Tiers() const;
162     const std::deque<uint64_t>& Sizes() const;
163     const std::deque<uint64_t>& BlockNumbers() const;
164     const std::deque<uint64_t>& FilePathIds() const;
165     const std::deque<uint64_t>& DurPer4k() const;
Clear()166     void Clear() override
167     {
168         CacheBase::Clear();
169         callChainIds_.clear();
170         types_.clear();
171         ipids_.clear();
172         itids_.clear();
173         startTs_.clear();
174         endTs_.clear();
175         latencyDurs_.clear();
176         tiers_.clear();
177         sizes_.clear();
178         blockNumbers_.clear();
179         filePathIds_.clear();
180         durPer4ks_.clear();
181     }
182 
183 private:
184     std::deque<uint32_t> callChainIds_ = {};
185     std::deque<uint64_t> types_ = {};
186     std::deque<uint32_t> ipids_ = {};
187     std::deque<uint32_t> itids_ = {};
188     std::deque<uint64_t> startTs_ = {};
189     std::deque<uint64_t> endTs_ = {};
190     std::deque<uint64_t> latencyDurs_ = {};
191     std::deque<uint32_t> tiers_ = {};
192     std::deque<uint64_t> sizes_ = {};
193     std::deque<uint64_t> blockNumbers_ = {};
194     std::deque<uint64_t> filePathIds_ = {};
195     std::deque<uint64_t> durPer4ks_ = {};
196     uint32_t rowCount_ = 0;
197 };
198 class EbpfCallStackData : public CacheBase {
199 public:
200     size_t AppendNewData(uint32_t callChainId,
201                          uint32_t depth,
202                          DataIndex ip,
203                          DataIndex symbolId,
204                          DataIndex filePathId,
205                          uint64_t vaddr);
206     void UpdateEbpfSymbolInfo(size_t row, DataIndex symbolId);
207     const std::deque<uint32_t>& CallChainIds() const;
208     const std::deque<uint32_t>& Depths() const;
209     const std::deque<DataIndex>& Ips() const;
210     const std::deque<DataIndex>& SymbolIds() const;
211     const std::deque<DataIndex>& FilePathIds() const;
212     const std::deque<uint64_t>& Vaddrs() const;
Clear()213     void Clear() override
214     {
215         CacheBase::Clear();
216         callChainIds_.clear();
217         depths_.clear();
218         symbolIds_.clear();
219         filePathIds_.clear();
220         vaddrs_.clear();
221     }
222 
223 private:
224     std::deque<uint32_t> callChainIds_ = {};
225     std::deque<uint32_t> depths_ = {};
226     std::deque<DataIndex> ips_ = {};
227     std::deque<DataIndex> symbolIds_ = {};
228     std::deque<DataIndex> filePathIds_ = {};
229     std::deque<uint64_t> vaddrs_ = {};
230 };
231 } // namespace TraceStdtype
232 } // namespace SysTuning
233 #endif // EBPF_STDTYPE_H
234