1#!/bin/sh
2
3################################################################################
4#                                                                              #
5# Copyright (c) 2009 FUJITSU LIMITED                                           #
6#                                                                              #
7# This program is free software;  you can redistribute it and#or modify        #
8# it under the terms of the GNU General Public License as published by         #
9# the Free Software Foundation; either version 2 of the License, or            #
10# (at your option) any later version.                                          #
11#                                                                              #
12# This program is distributed in the hope that it will be useful, but          #
13# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY   #
14# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License     #
15# for more details.                                                            #
16#                                                                              #
17# You should have received a copy of the GNU General Public License            #
18# along with this program;  if not, write to the Free Software                 #
19# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA      #
20#                                                                              #
21# Author: Miao Xie <[email protected]>                                      #
22#                                                                              #
23################################################################################
24
25export TCID="cpuset_memory_pressure"
26export TST_TOTAL=6
27export TST_COUNT=1
28
29. cpuset_funcs.sh
30
31check
32
33exit_status=0
34
35# usable physical memory
36py_mem=$(awk '/MemAvailable/ {print $2}' /proc/meminfo)
37py_mem=$(( $py_mem / 1024 ))
38
39# free swap space
40sw_mem=$(awk '/SwapFree/ {print $2}' /proc/meminfo)
41sw_mem=$(( $sw_mem / 1024 ))
42
43# the memory which is going to be used
44usemem=$((py_mem - 20))
45
46test1()
47{
48	echo 0 > "$CPUSET/cpuset.memory_pressure_enabled" 2> $CPUSET_TMP/stderr
49	if [ $? -ne 0 ]; then
50		cpuset_log_error $CPUSET_TMP/stderr
51		tst_resm TFAIL "Closing memory_pressure_enabled failed."
52		return 1
53	fi
54
55	local i
56	for i in $(seq 0 9)
57	do
58		if [ $(cat "$CPUSET/cpuset.memory_pressure") -ne 0 ]; then
59			tst_resm TFAIL "Memory_pressure had memory pressure rate."
60			return 1
61		fi
62	done
63}
64
65test2()
66{
67	echo 0 > "$CPUSET/cpuset.memory_pressure_enabled" 2> $CPUSET_TMP/stderr
68	if [ $? -ne 0 ]; then
69		cpuset_log_error $CPUSET_TMP/stderr
70		tst_resm TFAIL "Closing memory_pressure_enabled failed."
71		return 1
72	fi
73
74	cpuset_memory_pressure $usemem
75
76	local i
77	for i in $(seq 0 9)
78	do
79		if [ $(cat "$CPUSET/cpuset.memory_pressure") -ne 0 ]; then
80			tst_resm TFAIL "Memory_pressure had memory pressure rate."
81			return 1
82		fi
83	done
84}
85
86test3()
87{
88	echo 1 > "$CPUSET/cpuset.memory_pressure_enabled" 2> $CPUSET_TMP/stderr
89	if [ $? -ne 0 ]; then
90		cpuset_log_error $CPUSET_TMP/stderr
91		tst_resm TFAIL "Opening memory_pressure_enabled failed."
92		return 1
93	fi
94
95	cpuset_set "$CPUSET/sub_cpuset" "0" "0" "0" 2> $CPUSET_TMP/stderr
96	if [ $? -ne 0 ]; then
97		cpuset_log_error $CPUSET_TMP/stderr
98		tst_resm TFAIL "set general group parameter failed."
99		return 1
100	fi
101
102	local i
103	for i in $(seq 0 9)
104	do
105		if [ $(cat "$CPUSET/cpuset.memory_pressure") -ne 0 ]; then
106			tst_resm TFAIL "root group's memory_pressure had memory pressure rate."
107			return 1
108		fi
109		if [ $(cat "$CPUSET/sub_cpuset/cpuset.memory_pressure") -ne 0 ]; then
110			tst_resm TFAIL "sub group's memory_pressure had memory pressure rate."
111			return 1
112		fi
113	done
114	return 0
115}
116
117test4()
118{
119	echo 1 > "$CPUSET/cpuset.memory_pressure_enabled" 2> $CPUSET_TMP/stderr
120	if [ $? -ne 0 ]; then
121		cpuset_log_error $CPUSET_TMP/stderr
122		tst_resm TFAIL "Opening memory_pressure_enabled failed."
123		return 1
124	fi
125
126	cpuset_set "$CPUSET/sub_cpuset" "0" "0" "0" 2> $CPUSET_TMP/stderr
127	if [ $? -ne 0 ]; then
128		cpuset_log_error $CPUSET_TMP/stderr
129		tst_resm TFAIL "set general group parameter failed."
130		return 1
131	fi
132
133	echo $$ > "$CPUSET/sub_cpuset/tasks" 2> $CPUSET_TMP/stderr
134	if [ $? -ne 0 ]; then
135		cpuset_log_error $CPUSET_TMP/stderr
136		tst_resm TFAIL "attaching self to sub group failed"
137		return 1
138	fi
139
140	cpuset_memory_pressure $usemem
141
142	echo $$ > "$CPUSET/tasks" 2> $CPUSET_TMP/stderr
143	if [ $? -ne 0 ]; then
144		cpuset_log_error $CPUSET_TMP/stderr
145		tst_resm TFAIL "moving self to root group failed"
146		return 1
147	fi
148
149	local i
150	for i in $(seq 0 9)
151	do
152		if [ $(cat "$CPUSET/cpuset.memory_pressure") -ne 0 ]; then
153			tst_resm TFAIL "root group's memory_pressure had memory pressure rate."
154			return 1
155		fi
156		if [ $(cat "$CPUSET/sub_cpuset/cpuset.memory_pressure") -eq 0 ]; then
157			tst_resm TFAIL "sub group's memory_pressure didn't have memory pressure rate."
158			return 1
159		fi
160	done
161}
162
163test5()
164{
165	echo 1 > "$CPUSET/cpuset.memory_pressure_enabled" 2> $CPUSET_TMP/stderr
166	if [ $? -ne 0 ]; then
167		cpuset_log_error $CPUSET_TMP/stderr
168		tst_resm TFAIL "Opening memory_pressure_enabled failed."
169		return 1
170	fi
171
172	cpuset_set "$CPUSET/sub_cpuset" "0" "0" "0" 2> $CPUSET_TMP/stderr
173	if [ $? -ne 0 ]; then
174		cpuset_log_error $CPUSET_TMP/stderr
175		tst_resm TFAIL "set general group parameter failed."
176		return 1
177	fi
178
179	cpuset_memory_pressure $usemem
180	local i
181	for i in $(seq 0 9)
182	do
183		if [ $(cat "$CPUSET/cpuset.memory_pressure") -eq 0 ]; then
184			tst_resm TFAIL "root group's memory_pressure didn't have memory pressure rate."
185			return 1
186		fi
187		if [ $(cat "$CPUSET/sub_cpuset/cpuset.memory_pressure") -ne 0 ]; then
188			tst_resm TFAIL "sub group's memory_pressure had memory pressure rate."
189			return 1
190		fi
191	done
192}
193
194test6()
195{
196	echo 1 > "$CPUSET/cpuset.memory_pressure_enabled" 2> $CPUSET_TMP/stderr
197	if [ $? -ne 0 ]; then
198		cpuset_log_error $CPUSET_TMP/stderr
199		tst_resm TFAIL "Opening memory_pressure_enabled failed."
200		return 1
201	fi
202
203	cpuset_set "$CPUSET/sub_cpuset" "0" "0" "0" 2> $CPUSET_TMP/stderr
204	if [ $? -ne 0 ]; then
205		cpuset_log_error $CPUSET_TMP/stderr
206		tst_resm TFAIL "set general group parameter failed."
207		return 1
208	fi
209
210	echo $$ > "$CPUSET/sub_cpuset/tasks" 2> $CPUSET_TMP/stderr
211	if [ $? -ne 0 ]; then
212		cpuset_log_error $CPUSET_TMP/stderr
213		tst_resm TFAIL "attaching self to sub group failed"
214		return 1
215	fi
216	cpuset_memory_pressure $usemem
217
218	echo $$ > "$CPUSET/tasks" 2> $CPUSET_TMP/stderr
219	if [ $? -ne 0 ]; then
220		cpuset_log_error $CPUSET_TMP/stderr
221		tst_resm TFAIL "attaching self to root group failed"
222		return 1
223	fi
224
225	cpuset_memory_pressure $usemem
226	local i
227	for i in $(seq 0 9)
228	do
229		if [ $(cat "$CPUSET/cpuset.memory_pressure") -eq 0 ]; then
230			tst_resm TFAIL "root group's memory_pressure didn't have memory pressure rate."
231			return 1
232		fi
233		if [ $(cat "$CPUSET/sub_cpuset/cpuset.memory_pressure") -eq 0 ]; then
234			tst_resm TFAIL "sub group's memory_pressure didn't have memory pressure rate."
235			return 1
236		fi
237	done
238}
239
240for c in $(seq 1 $TST_TOTAL)
241do
242	setup
243	if [ $? -ne 0 ]; then
244		exit_status=1
245	else
246		test$c
247		if [ $? -ne 0 ]; then
248			exit_status=1
249			cleanup
250		else
251			cleanup
252			if [ $? -ne 0 ]; then
253				exit_status=1
254			else
255				tst_resm TPASS "Cpuset memory pressure test succeeded."
256			fi
257		fi
258	fi
259	TST_COUNT=$(($TST_COUNT + 1))
260done
261
262exit $exit_status
263