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