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 <memory>
12#include <unordered_map>
13#include <vector>
14#include <dirent.h>
15#include <fstream>
16#include <sstream>
17#include <algorithm>
18#include <cstring>
19#include <cstdlib>
20#include <sys/stat.h>
21#include <regex>
22#include <memory>
23
24#include "Logger.h"
25#include "ErrCodes.h"
26#include "UrmSettings.h"
27#include "AuxRoutines.h"
28#include "RestuneDBus.h"
29
30#define POLICY_DIR_PATH "/sys/devices/system/cpu/cpufreq/"
31#define ONLINE_CPU_FILE_PATH "/sys/devices/system/cpu/online"
32#define CPU_CAPACITY_FILE_PATH "/sys/devices/system/cpu/cpu%d/cpu_capacity"
33
38typedef struct {
39 std::string mCgroupName;
40 int32_t mCgroupID;
42 int8_t mIsThreaded;
44
49typedef struct {
50 int32_t mPhysicalID;
51 int32_t mCapacity;
52 int32_t mStartCpu;
53 int32_t mNumCpus;
55
60typedef struct {
62 std::string mMpamGroupName;
63 int32_t mPriority;
65
70typedef struct {
71 std::string mCacheType;
74} CacheInfo;
75
82private:
83 static std::shared_ptr<TargetRegistry> targetRegistryInstance;
84
85 std::unordered_map<int32_t, int32_t> mLogicalToPhysicalClusterMapping;
86 std::unordered_map<int32_t, ClusterInfo*> mPhysicalClusters;
87 std::unordered_map<int32_t, CGroupConfigInfo*> mCGroupMapping;
88 std::unordered_map<int32_t, MpamGroupConfigInfo*> mMpamGroupMapping;
89 std::unordered_map<std::string, CacheInfo*> mCacheInfoMapping;
90
92
93 void generatePolicyBasedMapping(std::vector<std::string>& policyDirs);
94 void getClusterIdBasedMapping();
95
96public:
98
99 // Methods for adding Target Info via TargetConfig.yaml
100 void addClusterSpreadInfo(const std::string& physicalID, const std::string& coreCount);
101 void addClusterMapping(const std::string& logicalID, const std::string& physicalID);
102
103 // Method for adding CGroup configs from InitConfig.yaml
104 void addCGroupMapping(CGroupConfigInfo* cGroupConfigInfo);
105
106 // Method for adding Mpam Group configs from InitConfig.yaml
107 void addMpamGroupMapping(MpamGroupConfigInfo* mpamGroupConfigInfo);
108
109 void addCacheInfoMapping(CacheInfo* cacheInfo);
110
111 void getClusterIDs(std::vector<int32_t>& clusterIDs);
112
124 int32_t getPhysicalCoreId(int32_t logicalClusterId, int32_t logicalCoreId);
125
135 int32_t getPhysicalClusterId(int32_t logicalClusterId);
136
137 ClusterInfo* getClusterInfo(int32_t physicalClusterID);
138
156
157 CGroupConfigInfo* getCGroupConfig(int32_t cGroupID);
158 void getCGroupNames(std::vector<std::string>& cGroupNames);
159 void getCGroupConfigs(std::vector<CGroupConfigInfo*>& cGroupConfigs);
160 int32_t getCreatedCGroupsCount();
161
162 MpamGroupConfigInfo* getMpamGroupConfig(int32_t mpamGroupID);
163 void getMpamGroupNames(std::vector<std::string>& cGroupNames);
164 int32_t getCreatedMpamGroupsCount();
165
166 void displayTargetInfo();
167
168 ErrCode addIrqAffine(std::vector<std::string>& values,
169 int8_t areClusterValues = false);
170 ErrCode addLogLimit(std::vector<std::string>& values);
171
172 static std::shared_ptr<TargetRegistry> getInstance() {
173 if(targetRegistryInstance == nullptr) {
174 targetRegistryInstance = std::shared_ptr<TargetRegistry>(new TargetRegistry());
175 }
176 return targetRegistryInstance;
177 }
178};
179
180class CGroupConfigInfoBuilder {
181private:
182 CGroupConfigInfo* mCGroupConfigInfo;
183
184public:
185 CGroupConfigInfoBuilder();
186
187 ErrCode setCGroupName(const std::string& cGroupName);
188 ErrCode setCGroupID(const std::string& cGroupIdentifier);
189 ErrCode setCreationNeeded(const std::string& creationNeeded);
190 ErrCode setThreaded(const std::string& isThreaded);
191
192 CGroupConfigInfo* build();
193};
194
195class MpamGroupConfigInfoBuilder {
196private:
197 MpamGroupConfigInfo* mMpamGroupInfo;
198
199public:
200 MpamGroupConfigInfoBuilder();
201
202 ErrCode setName(const std::string& name);
203 ErrCode setLgcID(const std::string& logicalID);
204 ErrCode setPriority(const std::string& priority);
205
206 MpamGroupConfigInfo* build();
207};
208
209class CacheInfoBuilder {
210private:
211 CacheInfo* mCacheInfo;
212
213public:
214 CacheInfoBuilder();
215
216 ErrCode setType(const std::string& type);
217 ErrCode setNumBlocks(const std::string& numBlocks);
218 ErrCode setPriorityAware(const std::string& isPriorityAware);
219
220 CacheInfo* build();
221};
222
223#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.