1ce1da5dc864873b4a8b834e2f63e5ba87680fa95Cyril Hrubis#!/bin/sh
24061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang##############################################################################
34061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang#                                                                            #
44061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang# Copyright (c) International Business Machines  Corp., 2007                 #
54061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang#               Sivakumar Chinnaiah, Sivakumar.C@in.ibm.com                  #
64061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang# Copyright (c) Linux Test Project, 2016                                     #
74061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang#                                                                            #
84061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang# This program is free software: you can redistribute it and/or modify       #
94061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang# it under the terms of the GNU General Public License as published by       #
104061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang# the Free Software Foundation, either version 3 of the License, or          #
114061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang# (at your option) any later version.                                        #
124061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang#                                                                            #
134061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang# This program is distributed in the hope that it will be useful,            #
144061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang# but WITHOUT ANY WARRANTY; without even the implied warranty of             #
154061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              #
164061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang# GNU General Public License for more details.                               #
174061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang#                                                                            #
184061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang# You should have received a copy of the GNU General Public License          #
194061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang# along with this program. If not, see <http://www.gnu.org/licenses/>.       #
204061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang#                                                                            #
214061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang##############################################################################
224061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang#                                                                            #
234061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang# Description:  Test Basic functionality of numactl command.                 #
244061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang#               Test #1: Verifies cpunodebind and membind                    #
254061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang#               Test #2: Verifies preferred node bind for memory allocation  #
26172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis#               Test #3: Verifies share memory allocation on preferred node  #
27172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis#               Test #4: Verifies memory interleave on all nodes             #
28172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis#               Test #5: Verifies share memory interleave on all nodes       #
29172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis#               Test #6: Verifies physcpubind                                #
30172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis#               Test #7: Verifies localalloc                                 #
314061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang#               Test #8: Verifies memhog                                     #
324061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang#               Test #9: Verifies numa_node_size api                         #
334061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang#               Test #10:Verifies Migratepages                               #
34d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang#               Test #11:Verifies hugepage alloacted on specified node       #
3566638ed5f462076db483972c14e55b88b9cc8d10Li Wang#               Test #12:Verifies THP memory allocated on preferred node     #
364061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang#                                                                            #
374061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang##############################################################################
384061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
3966638ed5f462076db483972c14e55b88b9cc8d10Li WangTST_CNT=12
404061a1cdf145f861d8b0c692cc16d2602064ca84Li WangTST_SETUP=setup
414061a1cdf145f861d8b0c692cc16d2602064ca84Li WangTST_TESTFUNC=test
424061a1cdf145f861d8b0c692cc16d2602064ca84Li WangTST_NEEDS_TMPDIR=1
434061a1cdf145f861d8b0c692cc16d2602064ca84Li WangTST_NEEDS_ROOT=1
444061a1cdf145f861d8b0c692cc16d2602064ca84Li WangTST_NEEDS_CMDS="numactl numastat awk"
454061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
464061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang. tst_test.sh
479b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak
489b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak#
4967da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis# Extracts the value of given numa node from the `numastat -p` output.
509b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak#
5167da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis# $1 - Pid number.
5267da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis# $2 - Node number.
539b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak#
54172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubisextract_numastat_p()
559b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak{
56547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis	local pid=$1
57547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis	local node=$(($2 + 2))
589b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak
59bf802b7f08a9d29dad202fbdfb316cdcdb7d19ecLi Wang	echo $(numastat -p $pid |awk '/^Total/ {print $'$node'}')
609b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak}
619b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak
62547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubiswait_for_support_numa()
63547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis{
64547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis	local pid=$1
65547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis	local retries=20
66547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis
67547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis	while [ $retries -gt 0 ]; do
68547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		local state=$(awk '{print $3}' /proc/$pid/stat)
69547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis
70547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		if [ $state = 'T' ]; then
71547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis			break
72547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		fi
73547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis
74547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		retries=$((retries-1))
75547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		tst_sleep 50ms
76547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis	done
77547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis
78547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis	if [ $retries -le 0 ]; then
79547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		tst_brk TBROK "Timeouted while waiting for support_numa ($pid)"
80547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis	fi
81547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis}
82547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis
834061a1cdf145f861d8b0c692cc16d2602064ca84Li Wangsetup()
849b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak{
854061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	export MB=$((1024*1024))
864061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	export PAGE_SIZE=$(getconf PAGE_SIZE)
87d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang	export HPAGE_SIZE=$(awk '/Hugepagesize:/ {print $2}' /proc/meminfo)
884061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
8967da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis	total_nodes=0
9067da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis
914061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	nodes_list=$(numactl --show | grep nodebind | cut -d ':' -f 2)
924061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	for node in $nodes_list; do
934061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		total_nodes=$((total_nodes+1))
944061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	done
95172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
964061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	tst_res TINFO "The system contains $total_nodes nodes: $nodes_list"
974061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	if [ $total_nodes -le 1 ]; then
98172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		tst_brk TCONF "your machine does not support numa policy
994061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		or your machine is not a NUMA machine"
1004061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	fi
1019b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak}
1029b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak
10367da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis# Verification of memory allocated on a node
1044061a1cdf145f861d8b0c692cc16d2602064ca84Li Wangtest1()
1059b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak{
106172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	Mem_curr=0
1074061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
1084061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	for node in $nodes_list; do
1090160dd72400f48040033cbc397217b1cf973521bLi Wang		numactl --cpunodebind=$node --membind=$node support_numa alloc_1MB &
110172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		pid=$!
111172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
112547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		wait_for_support_numa $pid
1134061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
114172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		Mem_curr=$(echo "$(extract_numastat_p $pid $node) * $MB" |bc)
115172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		if [ $(echo "$Mem_curr < $MB" | bc) -eq 1 ]; then
1164061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			tst_res TFAIL \
117172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis				"NUMA memory allocated in node$node is less than expected"
118bf802b7f08a9d29dad202fbdfb316cdcdb7d19ecLi Wang			kill -CONT $pid >/dev/null 2>&1
1194061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			return
1204061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		fi
121172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
122547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		kill -CONT $pid >/dev/null 2>&1
1234061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	done
1244061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
12567da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis	tst_res TPASS "NUMA local node and memory affinity"
1269b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak}
1279b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak
12867da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis# Verification of memory allocated on preferred node
1294061a1cdf145f861d8b0c692cc16d2602064ca84Li Wangtest2()
1309b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak{
131172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	Mem_curr=0
1324061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
1334061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	COUNTER=1
1344061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	for node in $nodes_list; do
1354061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
136172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		if [ $COUNTER -eq $total_nodes ]; then   #wrap up for last node
1374061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			Preferred_node=$(echo $nodes_list | cut -d ' ' -f 1)
1384061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		else
1394061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			# always next node is preferred node
1404061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			Preferred_node=$(echo $nodes_list | cut -d ' ' -f $((COUNTER+1)))
1414061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		fi
1424061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
1430160dd72400f48040033cbc397217b1cf973521bLi Wang		numactl --cpunodebind=$node --preferred=$Preferred_node support_numa alloc_1MB &
144172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		pid=$!
145547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis
146547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		wait_for_support_numa $pid
1474061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
148172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		Mem_curr=$(echo "$(extract_numastat_p $pid $Preferred_node) * $MB" |bc)
149172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		if [ $(echo "$Mem_curr < $MB" |bc ) -eq 1 ]; then
1504061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			tst_res TFAIL \
151172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis				"NUMA memory allocated in node$Preferred_node is less than expected"
152bf802b7f08a9d29dad202fbdfb316cdcdb7d19ecLi Wang			kill -CONT $pid >/dev/null 2>&1
1534061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			return
1544061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		fi
155172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
1564061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		COUNTER=$((COUNTER+1))
157547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		kill -CONT $pid >/dev/null 2>&1
1584061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	done
1594061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
16067da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis	tst_res TPASS "NUMA preferred node policy"
1619b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak}
1629b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak
16367da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis# Verification of share memory allocated on preferred node
1644061a1cdf145f861d8b0c692cc16d2602064ca84Li Wangtest3()
1659b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak{
166172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	Mem_curr=0
1674061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	COUNTER=1
168172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
1694061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	for node in $nodes_list; do
170172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
171172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		if [ $COUNTER -eq $total_nodes ]   #wrap up for last node
172172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		then
173172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis			Preferred_node=$(echo $nodes_list | cut -d ' ' -f 1)
174172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		else
175172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis			# always next node is preferred node
176172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis			Preferred_node=$(echo $nodes_list | cut -d ' ' -f $((COUNTER+1)))
177172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		fi
178172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
1790160dd72400f48040033cbc397217b1cf973521bLi Wang		numactl --cpunodebind=$node --preferred=$Preferred_node support_numa alloc_1MB_shared &
180172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		pid=$!
181547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis
182547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		wait_for_support_numa $pid
183172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
184172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		Mem_curr=$(echo "$(extract_numastat_p $pid $Preferred_node) * $MB" |bc)
185172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		if [ $(echo "$Mem_curr < $MB" |bc ) -eq 1 ]; then
186172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis			tst_res TFAIL \
187172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis				"NUMA share memory allocated in node$Preferred_node is less than expected"
188bf802b7f08a9d29dad202fbdfb316cdcdb7d19ecLi Wang			kill -CONT $pid >/dev/null 2>&1
189172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis			return
190172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		fi
191172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
1924061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		COUNTER=$((COUNTER+1))
193547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		kill -CONT $pid >/dev/null 2>&1
1944061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	done
1954061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
19667da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis	tst_res TPASS "NUMA share memory allocated in preferred node"
197172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis}
198172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
19967da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis# Verification of memory interleaved on all nodes
200172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubistest4()
201172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis{
202172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	Mem_curr=0
203172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	# Memory will be allocated using round robin on nodes.
204172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	Exp_incr=$(echo "$MB / $total_nodes" |bc)
205172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
2060160dd72400f48040033cbc397217b1cf973521bLi Wang	numactl --interleave=all support_numa alloc_1MB &
207172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	pid=$!
208547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis
209547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis	wait_for_support_numa $pid
2104061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
2114061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	for node in $nodes_list; do
212172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		Mem_curr=$(echo "$(extract_numastat_p $pid $node) * $MB" |bc)
213172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
214172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		if [ $(echo "$Mem_curr < $Exp_incr" |bc ) -eq 1 ]; then
2154061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			tst_res TFAIL \
216172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis				"NUMA interleave memory allocated in node$node is less than expected"
217bf802b7f08a9d29dad202fbdfb316cdcdb7d19ecLi Wang			kill -CONT $pid >/dev/null 2>&1
2184061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			return
2194061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		fi
2204061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	done
221172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
222547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis	kill -CONT $pid >/dev/null 2>&1
22367da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis	tst_res TPASS "NUMA interleave policy"
2249b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak}
2259b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak
22667da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis# Verification of shared memory interleaved on all nodes
227172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubistest5()
228172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis{
229172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	Mem_curr=0
230172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	# Memory will be allocated using round robin on nodes.
231172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	Exp_incr=$(echo "$MB / $total_nodes" |bc)
232172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
2330160dd72400f48040033cbc397217b1cf973521bLi Wang	numactl --interleave=all support_numa alloc_1MB_shared &
234172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	pid=$!
235547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis
236547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis	wait_for_support_numa $pid
237172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
238172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	for node in $nodes_list; do
239172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		Mem_curr=$(echo "$(extract_numastat_p $pid $node) * $MB" |bc)
240172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
241172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		if [ $(echo "$Mem_curr < $Exp_incr" |bc ) -eq 1 ]; then
242172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis			tst_res TFAIL \
243172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis				"NUMA interleave share memory allocated in node$node is less than expected"
244bf802b7f08a9d29dad202fbdfb316cdcdb7d19ecLi Wang			kill -CONT $pid >/dev/null 2>&1
245172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis			return
246172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		fi
247172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	done
248172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
249547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis	kill -CONT $pid >/dev/null 2>&1
250172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
25167da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis	tst_res TPASS "NUMA interleave policy on shared memory"
252172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis}
253172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
25467da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis# Verification of physical cpu bind
255172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubistest6()
2569b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak{
2574061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	no_of_cpus=0	#no. of cpu's exist
2584061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	run_on_cpu=0
2594061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	running_on_cpu=0
2604061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
2614061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	no_of_cpus=$(tst_ncpus)
2624061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	# not sure whether cpu's can't be in odd number
2634061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	run_on_cpu=$(($((no_of_cpus+1))/2))
2640160dd72400f48040033cbc397217b1cf973521bLi Wang	numactl --physcpubind=$run_on_cpu support_numa pause & #just waits for sigint
2654061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	pid=$!
2664061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	var=`awk '{ print $2 }' /proc/$pid/stat`
2674061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	while [ $var = '(numactl)' ]; do
2684061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		var=`awk '{ print $2 }' /proc/$pid/stat`
2694061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		tst_sleep 100ms
2704061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	done
2714061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	# Warning !! 39 represents cpu number, on which process pid is currently running and
2724061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	# this may change if Some more fields are added in the middle, may be in future
2734061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	running_on_cpu=$(awk '{ print $39; }' /proc/$pid/stat)
2744061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	if [ $running_on_cpu -ne $run_on_cpu ]; then
2754061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		tst_res TFAIL \
2764061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			"Process running on cpu$running_on_cpu but expected to run on cpu$run_on_cpu"
277547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		ROD kill -INT $pid
2784061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		return
2794061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	fi
280547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis
281547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis	ROD kill -INT $pid
2829b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak
28367da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis	tst_res TPASS "NUMA phycpubind policy"
2849b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak}
2859b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak
28667da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis# Verification of local node allocation
287172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubistest7()
2889b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak{
289172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	Mem_curr=0
2904061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
2914061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	for node in $nodes_list; do
2920160dd72400f48040033cbc397217b1cf973521bLi Wang		numactl --cpunodebind=$node --localalloc support_numa alloc_1MB &
293172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		pid=$!
294547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis
295547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		wait_for_support_numa $pid
2964061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
297172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		Mem_curr=$(echo "$(extract_numastat_p $pid $node) * $MB" |bc)
298172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		if [ $(echo "$Mem_curr < $MB" |bc ) -eq 1 ]; then
2994061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			tst_res TFAIL \
300172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis				"NUMA localnode memory allocated in node$node is less than expected"
301bf802b7f08a9d29dad202fbdfb316cdcdb7d19ecLi Wang			kill -CONT $pid >/dev/null 2>&1
3024061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			return
3034061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		fi
3049b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak
305547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		kill -CONT $pid >/dev/null 2>&1
3064061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	done
3074061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
30867da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis	tst_res TPASS "NUMA local node allocation"
309adc21b6b3c26d1021d1a3a3742fbb03110524e04subrata_modak}
310adc21b6b3c26d1021d1a3a3742fbb03110524e04subrata_modak
31167da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis# Verification of memhog with interleave policy
3124061a1cdf145f861d8b0c692cc16d2602064ca84Li Wangtest8()
313adc21b6b3c26d1021d1a3a3742fbb03110524e04subrata_modak{
314172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	Mem_curr=0
315172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	# Memory will be allocated using round robin on nodes.
316172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	Exp_incr=$(echo "$MB / $total_nodes" |bc)
317172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
318cbbe48a8eabb00772035f8fb151f532596b990abLi Wang	numactl --interleave=all memhog -r1000000 1MB 2>&1 >ltp_numa_test8.log &
319172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	pid=$!
3204061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
321cbbe48a8eabb00772035f8fb151f532596b990abLi Wang	local retries=20
322cbbe48a8eabb00772035f8fb151f532596b990abLi Wang	while [ $retries -gt 0 ]; do
323cbbe48a8eabb00772035f8fb151f532596b990abLi Wang
324cbbe48a8eabb00772035f8fb151f532596b990abLi Wang		if grep -m1 -q '.' ltp_numa_test8.log; then
325cbbe48a8eabb00772035f8fb151f532596b990abLi Wang			break
326cbbe48a8eabb00772035f8fb151f532596b990abLi Wang		fi
327cbbe48a8eabb00772035f8fb151f532596b990abLi Wang
328cbbe48a8eabb00772035f8fb151f532596b990abLi Wang		retries=$((retries-1))
329cbbe48a8eabb00772035f8fb151f532596b990abLi Wang		tst_sleep 50ms
330cbbe48a8eabb00772035f8fb151f532596b990abLi Wang	done
331cbbe48a8eabb00772035f8fb151f532596b990abLi Wang
3324061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	for node in $nodes_list; do
333172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		Mem_curr=$(echo "$(extract_numastat_p $pid $node) * $MB" |bc)
334172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
335172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		if [ $(echo "$Mem_curr < $Exp_incr" |bc ) -eq 1 ]; then
3364061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			tst_res TFAIL \
337172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis				"NUMA interleave memhog in node$node is less than expected"
338bf802b7f08a9d29dad202fbdfb316cdcdb7d19ecLi Wang			kill -KILL $pid >/dev/null 2>&1
3394061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			return
3404061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		fi
3414061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	done
342172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
343bf802b7f08a9d29dad202fbdfb316cdcdb7d19ecLi Wang	kill -KILL $pid >/dev/null 2>&1
34467da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis	tst_res TPASS "NUMA MEMHOG policy"
345adc21b6b3c26d1021d1a3a3742fbb03110524e04subrata_modak}
346adc21b6b3c26d1021d1a3a3742fbb03110524e04subrata_modak
347883f834503349beb377acb09d013260bfffe249esubrata_modak# Function:     hardware cheking with numa_node_size api
348883f834503349beb377acb09d013260bfffe249esubrata_modak#
349883f834503349beb377acb09d013260bfffe249esubrata_modak# Description:  - Returns the size of available nodes if success.
350883f834503349beb377acb09d013260bfffe249esubrata_modak#
351883f834503349beb377acb09d013260bfffe249esubrata_modak# Input:        - o/p of numactl --hardware command which is expected in the format
352883f834503349beb377acb09d013260bfffe249esubrata_modak#                 shown below
353883f834503349beb377acb09d013260bfffe249esubrata_modak#               available: 2 nodes (0-1)
354883f834503349beb377acb09d013260bfffe249esubrata_modak#               node 0 size: 7808 MB
355883f834503349beb377acb09d013260bfffe249esubrata_modak#               node 0 free: 7457 MB
356883f834503349beb377acb09d013260bfffe249esubrata_modak#               node 1 size: 5807 MB
357883f834503349beb377acb09d013260bfffe249esubrata_modak#               node 1 free: 5731 MB
358883f834503349beb377acb09d013260bfffe249esubrata_modak#               node distances:
359883f834503349beb377acb09d013260bfffe249esubrata_modak#               node   0   1
360883f834503349beb377acb09d013260bfffe249esubrata_modak#                 0:  10  20
361883f834503349beb377acb09d013260bfffe249esubrata_modak#                 1:  20  10
362883f834503349beb377acb09d013260bfffe249esubrata_modak#
3634061a1cdf145f861d8b0c692cc16d2602064ca84Li Wangtest9()
364883f834503349beb377acb09d013260bfffe249esubrata_modak{
36567da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis	RC=0
3664061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
3674061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	numactl --hardware > gavail_nodes
3684061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	RC=$(awk '{ if ( NR == 1 ) {print $1;} }' gavail_nodes)
3694061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	if [ $RC = "available:" ]; then
3704061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		RC=$(awk '{ if ( NR == 1 ) {print $3;} }' gavail_nodes)
3714061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		if [ $RC = "nodes" ]; then
3724061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			RC=$(awk '{ if ( NR == 1 ) {print $2;} }' gavail_nodes)
37367da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis			tst_res TPASS "NUMA policy on lib NUMA_NODE_SIZE API"
3744061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		else
3754061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			tst_res TFAIL "Failed with numa policy"
3764061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		fi
3774061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	else
3784061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		tst_res TFAIL "Failed with numa policy"
3794061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	fi
380883f834503349beb377acb09d013260bfffe249esubrata_modak}
3814061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
38267da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis# Verification of migratepages
3834061a1cdf145f861d8b0c692cc16d2602064ca84Li Wangtest10()
384883f834503349beb377acb09d013260bfffe249esubrata_modak{
385172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis	Mem_curr=0
3864061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	COUNTER=1
387172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
3884061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	for node in $nodes_list; do
3894061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
3904061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		if [ $COUNTER -eq $total_nodes ]; then
391172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis			Preferred_node=$(echo $nodes_list | cut -d ' ' -f 1)
3924061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		else
393172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis			Preferred_node=$(echo $nodes_list | cut -d ' ' -f $((COUNTER+1)))
3944061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		fi
3954061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
3960160dd72400f48040033cbc397217b1cf973521bLi Wang		numactl --preferred=$node support_numa alloc_1MB &
3974061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		pid=$!
398547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis
399547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		wait_for_support_numa $pid
400172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
4014061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		migratepages $pid $node $Preferred_node
402172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
403172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		Mem_curr=$(echo "$(extract_numastat_p $pid $Preferred_node) * $MB" |bc)
404172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis		if [ $(echo "$Mem_curr < $MB" |bc ) -eq 1 ]; then
4054061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			tst_res TFAIL \
4064061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang				"NUMA migratepages is not working fine"
407bf802b7f08a9d29dad202fbdfb316cdcdb7d19ecLi Wang			kill -CONT $pid >/dev/null 2>&1
4084061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang			return
4094061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		fi
410172b02ba8ab6a26407938b0049f23168600aa7fcCyril Hrubis
4114061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang		COUNTER=$((COUNTER+1))
412547380acdfdd4a5d2759c4c774c47f28ce973a85Cyril Hrubis		kill -CONT $pid >/dev/null 2>&1
4134061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang	done
4144061a1cdf145f861d8b0c692cc16d2602064ca84Li Wang
41567da06e74b772ee19ecfdf7bbd43548ebd3364eeCyril Hrubis	tst_res TPASS "NUMA MIGRATEPAGES policy"
416883f834503349beb377acb09d013260bfffe249esubrata_modak}
4179b555d1362786ebf436a3df18d4eafa1ea54ec06subrata_modak
418d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang# Verification of hugepage memory allocated on a node
419d075776c6cbe51e3654144f1451ccea894b8d86fLi Wangtest11()
420d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang{
421d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang	Mem_huge=0
422d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang	Sys_node=/sys/devices/system/node
423d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang
424d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang	if [ ! -d "/sys/kernel/mm/hugepages/" ]; then
425d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		tst_res TCONF "hugepage is not supported"
426d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		return
427d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang	fi
428d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang
429d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang	for node in $nodes_list; do
430d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		Ori_hpgs=$(cat ${Sys_node}/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages)
431d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		New_hpgs=$((Ori_hpgs + 1))
432d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		echo $New_hpgs >${Sys_node}/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages
433d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang
434d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		Chk_hpgs=$(cat ${Sys_node}/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages)
435d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		if [ "$Chk_hpgs" -ne "$New_hpgs" ]; then
436d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang			tst_res TCONF "hugepage is not enough to test"
437d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang			return
438d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		fi
439d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang
4400160dd72400f48040033cbc397217b1cf973521bLi Wang		numactl --cpunodebind=$node --membind=$node support_numa alloc_1huge_page &
441d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		pid=$!
442d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		wait_for_support_numa $pid
443d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang
444bf802b7f08a9d29dad202fbdfb316cdcdb7d19ecLi Wang		Mem_huge=$(echo $(numastat -p $pid |awk '/^Huge/ {print $'$((node+2))'}'))
445d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		Mem_huge=$((${Mem_huge%.*} * 1024))
446d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang
447d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		if [ "$Mem_huge" -lt "$HPAGE_SIZE" ]; then
448d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang			tst_res TFAIL \
449d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang				"NUMA memory allocated in node$node is less than expected"
450d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang			kill -CONT $pid >/dev/null 2>&1
451d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang			echo $Ori_hpgs >${Sys_node}/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages
452d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang			return
453d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		fi
454d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang
455d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		kill -CONT $pid >/dev/null 2>&1
456d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang		echo $Ori_hpgs >${Sys_node}/node${node}/hugepages/hugepages-${HPAGE_SIZE}kB/nr_hugepages
457d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang	done
458d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang
459d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang	tst_res TPASS "NUMA local node hugepage memory allocated"
460d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang}
461d075776c6cbe51e3654144f1451ccea894b8d86fLi Wang
46266638ed5f462076db483972c14e55b88b9cc8d10Li Wang# Verification of THP memory allocated on preferred node
46366638ed5f462076db483972c14e55b88b9cc8d10Li Wangtest12()
46466638ed5f462076db483972c14e55b88b9cc8d10Li Wang{
46566638ed5f462076db483972c14e55b88b9cc8d10Li Wang	Mem_curr=0
46666638ed5f462076db483972c14e55b88b9cc8d10Li Wang
46766638ed5f462076db483972c14e55b88b9cc8d10Li Wang	if ! grep -q '\[always\]' /sys/kernel/mm/transparent_hugepage/enabled; then
46866638ed5f462076db483972c14e55b88b9cc8d10Li Wang		tst_res TCONF "THP is not supported/enabled"
46966638ed5f462076db483972c14e55b88b9cc8d10Li Wang		return
47066638ed5f462076db483972c14e55b88b9cc8d10Li Wang	fi
47166638ed5f462076db483972c14e55b88b9cc8d10Li Wang
47266638ed5f462076db483972c14e55b88b9cc8d10Li Wang	COUNTER=1
47366638ed5f462076db483972c14e55b88b9cc8d10Li Wang	for node in $nodes_list; do
47466638ed5f462076db483972c14e55b88b9cc8d10Li Wang
47566638ed5f462076db483972c14e55b88b9cc8d10Li Wang		if [ $COUNTER -eq $total_nodes ]; then   #wrap up for last node
47666638ed5f462076db483972c14e55b88b9cc8d10Li Wang			Preferred_node=$(echo $nodes_list | cut -d ' ' -f 1)
47766638ed5f462076db483972c14e55b88b9cc8d10Li Wang		else
47866638ed5f462076db483972c14e55b88b9cc8d10Li Wang			# always next node is preferred node
47966638ed5f462076db483972c14e55b88b9cc8d10Li Wang			Preferred_node=$(echo $nodes_list | cut -d ' ' -f $((COUNTER+1)))
48066638ed5f462076db483972c14e55b88b9cc8d10Li Wang		fi
48166638ed5f462076db483972c14e55b88b9cc8d10Li Wang
48266638ed5f462076db483972c14e55b88b9cc8d10Li Wang		numactl --cpunodebind=$node --preferred=$Preferred_node support_numa alloc_2HPSZ_THP &
48366638ed5f462076db483972c14e55b88b9cc8d10Li Wang		pid=$!
48466638ed5f462076db483972c14e55b88b9cc8d10Li Wang
48566638ed5f462076db483972c14e55b88b9cc8d10Li Wang		wait_for_support_numa $pid
48666638ed5f462076db483972c14e55b88b9cc8d10Li Wang
48766638ed5f462076db483972c14e55b88b9cc8d10Li Wang		Mem_curr=$(echo "$(extract_numastat_p $pid $Preferred_node) * 1024" |bc)
48866638ed5f462076db483972c14e55b88b9cc8d10Li Wang		if [ $(echo "$Mem_curr < $HPAGE_SIZE * 2" |bc ) -eq 1 ]; then
48966638ed5f462076db483972c14e55b88b9cc8d10Li Wang			tst_res TFAIL \
49066638ed5f462076db483972c14e55b88b9cc8d10Li Wang				"NUMA memory allocated in node$Preferred_node is less than expected"
49166638ed5f462076db483972c14e55b88b9cc8d10Li Wang			kill -CONT $pid >/dev/null 2>&1
49266638ed5f462076db483972c14e55b88b9cc8d10Li Wang			return
49366638ed5f462076db483972c14e55b88b9cc8d10Li Wang		fi
49466638ed5f462076db483972c14e55b88b9cc8d10Li Wang
49566638ed5f462076db483972c14e55b88b9cc8d10Li Wang		COUNTER=$((COUNTER+1))
49666638ed5f462076db483972c14e55b88b9cc8d10Li Wang		kill -CONT $pid >/dev/null 2>&1
49766638ed5f462076db483972c14e55b88b9cc8d10Li Wang	done
49866638ed5f462076db483972c14e55b88b9cc8d10Li Wang
49966638ed5f462076db483972c14e55b88b9cc8d10Li Wang	tst_res TPASS "NUMA preferred node policy verified with THP enabled"
50066638ed5f462076db483972c14e55b88b9cc8d10Li Wang}
50166638ed5f462076db483972c14e55b88b9cc8d10Li Wang
5024061a1cdf145f861d8b0c692cc16d2602064ca84Li Wangtst_run
503