Userspace Resource Manager
Loading...
Searching...
No Matches
TargetRegistry.h
Go to the documentation of this file.
1// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2// SPDX-License-Identifier: BSD-3-Clause-Clear
3
4#ifndef TARGET_REGISTRY_H
5#define TARGET_REGISTRY_H
6
11#include <regex>
12#include <memory>
13#include <vector>
14#include <cstring>
15#include <sstream>
16#include <fstream>
17#include <cstdlib>
18#include <dirent.h>
19#include <algorithm>
20#include <sys/stat.h>
21#include <unordered_map>
22
23#include "Logger.h"
24#include "ErrCodes.h"
25#include "AuxRoutines.h"
26
27#define POLICY_DIR_PATH "/sys/devices/system/cpu/cpufreq/"
28#define ONLINE_CPU_FILE_PATH "/sys/devices/system/cpu/online"
29#define CPU_CAPACITY_FILE_PATH "/sys/devices/system/cpu/cpu%d/cpu_capacity"
30
31enum TargetQueries {
32 GET_MASK = 801,
33 GET_CLUSTER_COUNT,
34 GET_CORE_COUNT,
35 GET_PHYSICAL_CLUSTER_ID,
36 GET_PHYSICAL_CORE_ID,
37 GET_MAX_CLUSTER,
38};
39
44typedef struct {
45 std::string mCgroupName;
46 int32_t mCgroupID;
48 int8_t mIsThreaded;
50
55typedef struct {
56 int32_t mPhysicalID;
57 int32_t mCapacity;
58 int32_t mStartCpu;
59 int32_t mNumCpus;
61
66typedef struct {
68 std::string mMpamGroupName;
69 int32_t mPriority;
71
76typedef struct {
77 std::string mCacheType;
80} CacheInfo;
81
88private:
89 static std::shared_ptr<TargetRegistry> targetRegistryInstance;
90
91 std::unordered_map<int32_t, int32_t> mLogicalToPhysicalClusterMapping;
92 std::unordered_map<int32_t, ClusterInfo*> mPhysicalClusters;
93 std::unordered_map<int32_t, CGroupConfigInfo*> mCGroupMapping;
94 std::unordered_map<int32_t, MpamGroupConfigInfo*> mMpamGroupMapping;
95 std::unordered_map<std::string, CacheInfo*> mCacheInfoMapping;
96
98
99 void generatePolicyBasedMapping(std::vector<std::string>& policyDirs);
100 void getClusterIdBasedMapping();
101
102public:
104
105 // Methods for adding Target Info via TargetConfig.yaml
106 void addClusterSpreadInfo(const std::string& physicalID, const std::string& coreCount);
107 void addClusterMapping(const std::string& logicalID, const std::string& physicalID);
108
109 // Method for adding CGroup configs from InitConfig.yaml
110 void addCGroupMapping(CGroupConfigInfo* cGroupConfigInfo);
111
112 // Method for adding Mpam Group configs from InitConfig.yaml
113 void addMpamGroupMapping(MpamGroupConfigInfo* mpamGroupConfigInfo);
114
115 void addCacheInfoMapping(CacheInfo* cacheInfo);
116
117 void getClusterIDs(std::vector<int32_t>& clusterIDs);
118
130 int32_t getPhysicalCoreId(int32_t logicalClusterId, int32_t logicalCoreId);
131
141 int32_t getPhysicalClusterId(int32_t logicalClusterId);
142
143 ClusterInfo* getClusterInfo(int32_t physicalClusterID);
144
162
163 CGroupConfigInfo* getCGroupConfig(int32_t cGroupID);
164 void getCGroupNames(std::vector<std::string>& cGroupNames);
165 void getCGroupConfigs(std::vector<CGroupConfigInfo*>& cGroupConfigs);
166 int32_t getCreatedCGroupsCount();
167
168 MpamGroupConfigInfo* getMpamGroupConfig(int32_t mpamGroupID);
169 void getMpamGroupNames(std::vector<std::string>& cGroupNames);
170 int32_t getCreatedMpamGroupsCount();
171
172 void displayTargetInfo();
173
174 ErrCode addIrqAffine(std::vector<std::string>& values,
175 int8_t areClusterValues = false);
176 ErrCode addLogLimit(std::vector<std::string>& values);
177
178 static std::shared_ptr<TargetRegistry> getInstance() {
179 if(targetRegistryInstance == nullptr) {
180 targetRegistryInstance = std::shared_ptr<TargetRegistry>(new TargetRegistry());
181 }
182 return targetRegistryInstance;
183 }
184};
185
186class CGroupConfigInfoBuilder {
187private:
188 CGroupConfigInfo* mCGroupConfigInfo;
189
190public:
191 CGroupConfigInfoBuilder();
192
193 ErrCode setCGroupName(const std::string& cGroupName);
194 ErrCode setCGroupID(const std::string& cGroupIdentifier);
195 ErrCode setCreationNeeded(const std::string& creationNeeded);
196 ErrCode setThreaded(const std::string& isThreaded);
197
198 CGroupConfigInfo* build();
199};
200
201class MpamGroupConfigInfoBuilder {
202private:
203 MpamGroupConfigInfo* mMpamGroupInfo;
204
205public:
206 MpamGroupConfigInfoBuilder();
207
208 ErrCode setName(const std::string& name);
209 ErrCode setLgcID(const std::string& logicalID);
210 ErrCode setPriority(const std::string& priority);
211
212 MpamGroupConfigInfo* build();
213};
214
215class CacheInfoBuilder {
216private:
217 CacheInfo* mCacheInfo;
218
219public:
220 CacheInfoBuilder();
221
222 ErrCode setType(const std::string& type);
223 ErrCode setNumBlocks(const std::string& numBlocks);
224 ErrCode setPriorityAware(const std::string& isPriorityAware);
225
226 CacheInfo* build();
227};
228
229// Utility to fetch target-specific information
230uint64_t GET_TARGET_INFO(int32_t option,
231 int32_t numArgs,
232 int32_t* args);
233
234#endif
ErrCode
Custom Error Codes used by Resource Tuner APIs and Internal Functions.
Definition ErrCodes.h:19
TargetRegistry.
int32_t getPhysicalCoreId(int32_t logicalClusterId, int32_t logicalCoreId)
Called by the Verifier to get the physical core ID corresponding to the Logical Core ID value.
void readTargetInfo()
Called during Server Init, to read and Parse the Logical To Physical Core / Cluster Mappings.
int32_t getPhysicalClusterId(int32_t logicalClusterId)
Called by the Verifier to get the physical Cluster ID corresponding to the Logical Cluster ID value.
Representation of a single CGroup Configuration Info.
int32_t mCgroupID
32-bit identifier for the Cgroup (to be used as part of tuneResources API)
int8_t mIsThreaded
Flag indicating if the Cgroup is threaded.
int8_t mCreationNeeded
Flag indicating if Cgroup needs to be created by Resource Tuner, or if it already exists.
std::string mCgroupName
Cgroup Name.
Representation for a single Cluster Type Info.
int8_t mPriorityAware
Flag indicating if the Cache type is priority aware.
int32_t mNumCacheBlocks
Number of cache blocks for this type.
std::string mCacheType
Cache Type, for example: L2 or L3.
Representation for various Clusters detected on the device.
int32_t mCapacity
Cluster Capacity.
int32_t mNumCpus
Number of CPUs part of the Cluster.
int32_t mPhysicalID
Physical Cluster ID corresponding to the logical ID.
int32_t mStartCpu
Starting CPU index in this cluster.
Representation of a single Mpam Group Configuration Info.
int32_t mPriority
Mpam group Priority.
int32_t mMpamGroupInfoID
32-bit identifier for the Mpam Group (to be used as part of tuneResources API)
std::string mMpamGroupName
Mpam group Name.