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