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
16 #include "qos_policy.h"
17 #include <unistd.h>
18 #include "concurrent_task_log.h"
19
20 static struct QosPolicyDatas g_defaultQosPolicy = {
21 .policyType = QOS_POLICY_DEFAULT,
22 .policyFlag = QOS_FLAG_ALL,
23 .policys = {
24 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
25 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
26 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
27 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
28 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
29 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
30 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
31 }
32 };
33
34 static struct QosPolicyDatas g_foregroundQosPolicy = {
35 .policyType = QOS_POLICY_FRONT,
36 .policyFlag = QOS_FLAG_ALL,
37 .policys = {
38 {10, 10, 0, 200, 0, SCHED_POLICY_OTHER},
39 {5, 5, 0, 250, 0, SCHED_POLICY_OTHER},
40 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
41 #ifdef QOS_EXT_ENABLE
42 {-10, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
43 {-10, -10, 0, 1024, 0, SCHED_POLICY_OTHER},
44 {-10, -10, 0, 1024, 0, SCHED_POLICY_OTHER},
45 #else
46 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
47 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
48 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
49 #endif
50 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
51 }
52 };
53
54 static struct QosPolicyDatas g_backgroundQosPolicy = {
55 .policyType = QOS_POLICY_BACK,
56 .policyFlag = QOS_FLAG_ALL & ~QOS_FLAG_RT,
57 .policys = {
58 {15, 15, 0, 150, 0, SCHED_POLICY_OTHER},
59 {10, 10, 0, 200, 0, SCHED_POLICY_OTHER},
60 {5, 5, 0, 250, 0, SCHED_POLICY_OTHER},
61 {0, 0, 0, 300, 0, SCHED_POLICY_OTHER},
62 #ifdef QOS_EXT_ENABLE
63 {-5, -5, 0, 350, 0, SCHED_POLICY_OTHER},
64 {-5, -5, 0, 350, 0, SCHED_POLICY_OTHER},
65 #else
66 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
67 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
68 #endif
69 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
70 }
71 };
72
73 static struct QosPolicyDatas g_systemServerQosPolicy = {
74 .policyType = QOS_POLICY_SYSTEM_SERVER,
75 .policyFlag = QOS_FLAG_ALL,
76 .policys = {
77 {10, 10, 0, 200, 0, SCHED_POLICY_OTHER},
78 {5, 5, 0, 250, 0, SCHED_POLICY_OTHER},
79 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
80 #ifdef QOS_EXT_ENABLE
81 {-10, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
82 {-10, -10, 0, 1024, 0, SCHED_POLICY_OTHER},
83 {-10, -10, 0, 1024, 1, SCHED_POLICY_FIFO | SCHED_RESET_ON_FORK},
84 #else
85 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
86 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
87 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
88 #endif
89 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
90 }
91 };
92
93 static struct QosPolicyDatas g_focusQosPolicy = {
94 .policyType = QOS_POLICY_FOCUS,
95 .policyFlag = QOS_FLAG_ALL,
96 .policys = {
97 {10, 10, 0, 200, 0, SCHED_POLICY_OTHER},
98 {5, 5, 0, 250, 0, SCHED_POLICY_OTHER},
99 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
100 #ifdef QOS_EXT_ENABLE
101 {-10, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
102 {-10, -10, 0, 1024, 0, SCHED_POLICY_OTHER},
103 {-10, -10, 0, 1024, 1, SCHED_POLICY_RT_EX | SCHED_RESET_ON_FORK},
104 #else
105 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
106 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
107 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
108 #endif
109 {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
110 }
111 };
112
113 namespace OHOS {
114 namespace ConcurrentTask {
SetQosPolicy(struct QosPolicyDatas * policyDatas)115 int QosPolicy::SetQosPolicy(struct QosPolicyDatas *policyDatas)
116 {
117 return QosPolicySet(policyDatas);
118 }
119
Init()120 void QosPolicy::Init()
121 {
122 int ret;
123
124 ret = SetQosPolicy(&g_defaultQosPolicy);
125 if (ret) {
126 CONCUR_LOGE("%{public}d set g_defaultQosPolicy failed", getuid());
127 }
128
129 ret = SetQosPolicy(&g_foregroundQosPolicy);
130 if (ret) {
131 CONCUR_LOGE("%{public}d set g_foregroundQosPolicy failed", getuid());
132 }
133
134 ret = SetQosPolicy(&g_backgroundQosPolicy);
135 if (ret) {
136 CONCUR_LOGE("%{public}d set g_backgroundQosPolicy failed", getuid());
137 }
138
139 ret = SetQosPolicy(&g_systemServerQosPolicy);
140 if (ret) {
141 CONCUR_LOGE("%{public}d set g_systemServerQosPolicy failed", getuid());
142 }
143
144 ret = SetQosPolicy(&g_focusQosPolicy);
145 if (ret) {
146 CONCUR_LOGE("%{public}d set g_focusQosPolicy failed", getuid());
147 }
148
149 CONCUR_LOGI("set qos policy finish");
150 }
151 }
152 }
153