• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 #include "memmgr_log.h"
16 #include "xml_helper.h"
17 #include "reclaim_config.h"
18 
19 #define MAX_UNINTPARAM 100
20 #define MAX_INTPARAM 1000
21 
22 namespace OHOS {
23 namespace Memory {
24 namespace {
25     const std::string TAG = "ReclaimConfig";
26 }
27 
ReclaimConfig()28 ReclaimConfig::ReclaimConfig()
29 {
30 }
31 
SetDefaultConfig(int minScore,int maxScore,unsigned int mem2zramRatio,unsigned int zram2ufsRatio,unsigned int refaultThreshold)32 void ReclaimConfig::SetDefaultConfig(int minScore, int maxScore, unsigned int mem2zramRatio,
33                                      unsigned int zram2ufsRatio, unsigned int refaultThreshold)
34 {
35     DECLARE_SHARED_POINTER(ZswapdParam, zswapdParam);
36 
37     MAKE_POINTER(zswapdParam, shared, ZswapdParam, "make default ZswapdParam failed", return,
38         minScore, maxScore, mem2zramRatio, zram2ufsRatio, refaultThreshold);
39     AddReclaimConfigToSet(zswapdParam);
40 }
41 
ParseConfig(const xmlNodePtr & rootNodePtr)42 void ReclaimConfig::ParseConfig(const xmlNodePtr &rootNodePtr)
43 {
44     if (!XmlHelper::CheckNode(rootNodePtr) || !XmlHelper::HasChild(rootNodePtr)) {
45         HILOGD("Node exsist:%{public}d,has child node:%{public}d",
46                XmlHelper::CheckNode(rootNodePtr), XmlHelper::HasChild(rootNodePtr));
47         return;
48     }
49 
50     std::map<std::string, std::string> param;
51     for (xmlNodePtr currNode = rootNodePtr->xmlChildrenNode; currNode != nullptr; currNode = currNode->next) {
52         if (!XmlHelper::GetModuleParam(currNode, param)) {
53             HILOGW("Get moudle param failed.");
54             return;
55         }
56         SetZswapdParamConfig(param);
57     }
58 }
59 
SetZswapdParamConfig(std::map<std::string,std::string> & param)60 void ReclaimConfig::SetZswapdParamConfig(std::map<std::string, std::string> &param)
61 {
62     int minScore, maxScore;
63     unsigned int mem2zramRatio, zram2ufsRatio, refaultThreshold;
64 
65     XmlHelper::SetIntParam(param, "minScore", minScore, 0);
66     XmlHelper::SetIntParam(param, "maxScore", maxScore, RECLAIM_PRIORITY_MAX);
67     XmlHelper::SetUnsignedIntParam(param, "mem2zramRatio", mem2zramRatio, MEMCG_MEM_2_ZRAM_RATIO);
68     XmlHelper::SetUnsignedIntParam(param, "zram2ufsRatio", zram2ufsRatio, MEMCG_ZRAM_2_UFS_RATIO);
69     XmlHelper::SetUnsignedIntParam(param, "refaultThreshold", refaultThreshold, MEMCG_REFAULT_THRESHOLD);
70 
71     DECLARE_SHARED_POINTER(ZswapdParam, zswapdParam);
72     MAKE_POINTER(zswapdParam, shared, ZswapdParam, "make ZswapdParam failed", return,
73         minScore, maxScore, mem2zramRatio, zram2ufsRatio, refaultThreshold);
74     CheckZswapdParam(zswapdParam);
75 
76     AddReclaimConfigToSet(zswapdParam);
77 }
78 
CheckZswapdParam(std::shared_ptr<ZswapdParam> zswapdParam)79 void ReclaimConfig::CheckZswapdParam(std::shared_ptr<ZswapdParam> zswapdParam)
80 {
81     int minScore = 0;
82     int maxScore = 0;
83     unsigned int mem2zramRatio = 0;
84     unsigned int zram2ufsRatio = 0;
85     unsigned int refaultThreshold = 0;
86 
87     if (zswapdParam->GetMinScore() < 0 || zswapdParam->GetMinScore() > MAX_INTPARAM) {
88         minScore = 0;
89     } else {
90         minScore = zswapdParam->GetMinScore();
91     }
92     zswapdParam->SetMinScore(minScore);
93 
94     if (zswapdParam->GetMaxScore() < 0 || zswapdParam->GetMaxScore() > MAX_INTPARAM) {
95         maxScore = RECLAIM_PRIORITY_MAX;
96     } else {
97         maxScore = zswapdParam->GetMaxScore();
98     }
99     zswapdParam->SetMaxScore(maxScore);
100 
101     if (zswapdParam->GetMem2zramRatio() < 0 || zswapdParam->GetMem2zramRatio() > MAX_UNINTPARAM) {
102         mem2zramRatio = MEMCG_MEM_2_ZRAM_RATIO;
103     } else {
104         mem2zramRatio = zswapdParam->GetMem2zramRatio();
105     }
106     zswapdParam->SetMem2zramRatio(mem2zramRatio);
107 
108     if (zswapdParam->GetZram2ufsRatio() < 0 || zswapdParam->GetZram2ufsRatio() > MAX_UNINTPARAM) {
109         zram2ufsRatio = MEMCG_ZRAM_2_UFS_RATIO;
110     } else {
111         zram2ufsRatio = zswapdParam->GetZram2ufsRatio();
112     }
113     zswapdParam->SetZram2ufsRatio(zram2ufsRatio);
114 
115     if (zswapdParam->GetRefaultThreshold() < 0 || zswapdParam->GetRefaultThreshold() > MAX_UNINTPARAM) {
116         refaultThreshold = MEMCG_REFAULT_THRESHOLD;
117     } else {
118         refaultThreshold = zswapdParam->GetRefaultThreshold();
119     }
120     zswapdParam->SetRefaultThreshold(refaultThreshold);
121 }
122 
AddReclaimConfigToSet(std::shared_ptr<ZswapdParam> zswapdParam)123 void ReclaimConfig::AddReclaimConfigToSet(std::shared_ptr<ZswapdParam> zswapdParam)
124 {
125     reclaimConfigSet_.insert(zswapdParam);
126 }
127 
ClearReclaimConfigSet()128 void ReclaimConfig::ClearReclaimConfigSet()
129 {
130     reclaimConfigSet_.clear();
131 }
132 
GetReclaimConfigSet()133 const ReclaimConfig::ReclaimConfigSet& ReclaimConfig::GetReclaimConfigSet()
134 {
135     return reclaimConfigSet_;
136 }
137 
ZswapdParam()138 ZswapdParam::ZswapdParam()
139 {
140 }
141 
ZswapdParam(int minScore,int maxScore,unsigned int mem2zramRatio,unsigned int zram2ufsRatio,unsigned int refaultThreshold)142 ZswapdParam::ZswapdParam(int minScore, int maxScore, unsigned int mem2zramRatio,
143                          unsigned int zram2ufsRatio, unsigned int refaultThreshold)
144     : minScore_(minScore),
145       maxScore_(maxScore),
146       mem2zramRatio_(mem2zramRatio),
147       zram2ufsRatio_(zram2ufsRatio),
148       refaultThreshold_(refaultThreshold)
149 {
150 }
151 
GetMinScore()152 int ZswapdParam::GetMinScore()
153 {
154     return minScore_;
155 }
156 
SetMinScore(int minScore)157 void ZswapdParam::SetMinScore(int minScore)
158 {
159     minScore_ = minScore;
160 }
161 
GetMaxScore()162 int ZswapdParam::GetMaxScore()
163 {
164     return maxScore_;
165 }
166 
SetMaxScore(int maxScore)167 void ZswapdParam::SetMaxScore(int maxScore)
168 {
169     maxScore_ = maxScore;
170 }
171 
GetMem2zramRatio()172 unsigned int ZswapdParam::GetMem2zramRatio()
173 {
174     return mem2zramRatio_;
175 }
176 
SetMem2zramRatio(unsigned int mem2zramRatio)177 void ZswapdParam::SetMem2zramRatio(unsigned int mem2zramRatio)
178 {
179     mem2zramRatio_ = mem2zramRatio;
180 }
181 
GetZram2ufsRatio()182 unsigned int ZswapdParam::GetZram2ufsRatio()
183 {
184     return zram2ufsRatio_;
185 }
186 
SetZram2ufsRatio(unsigned int zram2ufsRatio)187 void ZswapdParam::SetZram2ufsRatio(unsigned int zram2ufsRatio)
188 {
189     zram2ufsRatio_ = zram2ufsRatio;
190 }
191 
GetRefaultThreshold()192 unsigned int ZswapdParam::GetRefaultThreshold()
193 {
194     return refaultThreshold_;
195 }
196 
SetRefaultThreshold(unsigned int refaultThreshold)197 void ZswapdParam::SetRefaultThreshold(unsigned int refaultThreshold)
198 {
199     refaultThreshold_ = refaultThreshold;
200 }
201 
Dump(int fd)202 void ReclaimConfig::Dump(int fd)
203 {
204     int index = 0;
205     for (auto it = reclaimConfigSet_.begin(); it != reclaimConfigSet_.end(); it++) {
206         index++;
207         dprintf(fd, "ReclaimConfig %d:   \n", index);
208         dprintf(fd, "                      minScore: %d\n", (*it)->GetMinScore());
209         dprintf(fd, "                      maxScore: %d\n", (*it)->GetMaxScore());
210         dprintf(fd, "                 mem2zramRatio: %u\n", (*it)->GetMem2zramRatio());
211         dprintf(fd, "                 zram2ufsRatio: %u\n", (*it)->GetZram2ufsRatio());
212         dprintf(fd, "              refaultThreshold: %u\n", (*it)->GetRefaultThreshold());
213     }
214 }
215 } // namespace Memory
216 } // namespace OHOS
217