Test "Add mcstat tool" on arm64
Change-Id: I4bf1260e999c16fe7b9c339af3833ea007277889
This commit is contained in:
committed by
Masamichi Takagi
parent
1422838dd1
commit
05c315857c
20
test/mcstat/arm64/Makefile
Normal file
20
test/mcstat/arm64/Makefile
Normal file
@ -0,0 +1,20 @@
|
||||
# Makefile COPYRIGHT FUJITSU LIMITED 2018
|
||||
CC = gcc
|
||||
TARGET = get_rusage
|
||||
LDFLAGS = -Wall
|
||||
|
||||
include $(HOME)/.mck_test_config
|
||||
|
||||
INCLUDE_DIR = $(BIN)/../include
|
||||
LIBDIR = $(BIN)/../lib
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
get_rusage: get_rusage.c
|
||||
$(CC) -o $@ $^ $(LDFLAGS) -I$(INCLUDE_DIR) -Wl,-rpath=$(LIBDIR) -L$(LIBDIR) -lihk
|
||||
|
||||
test: all
|
||||
./run.sh
|
||||
|
||||
clean:
|
||||
rm -f $(TARGET)
|
||||
50
test/mcstat/arm64/README
Normal file
50
test/mcstat/arm64/README
Normal file
@ -0,0 +1,50 @@
|
||||
/* README COPYRIGHT FUJITSU LIMITED 2018 */
|
||||
|
||||
mcstatテストセットREADME
|
||||
|
||||
(1) テストの実行方法
|
||||
以下の手順でテストを実行する
|
||||
1. $HOME/.mck_test_configを用意する
|
||||
当該ファイルは、McKernelをビルドした際に生成されるmck_test_config.sample ファイルを
|
||||
$HOMEにコピーし、適宜編集する
|
||||
2. make testを実行する
|
||||
|
||||
(2) テスト項目詳細
|
||||
TEST001 メモリ総容量の表示が期待通りであるか確認する
|
||||
TEST002 現在の使用量の表示が期待通りであるか確認する
|
||||
TEST003 メモリ最大使用量の表示が期待通りであるか確認する
|
||||
TEST004 システム時間の表示が期待通りであるか確認する
|
||||
TEST005 ユーザ時間の表示が期待通りであるか確認する
|
||||
TEST006 現在動作中のスレッド数が期待通りであるか確認する
|
||||
TEST007 表示されている最大スレッド数が期待通りであるか確認する
|
||||
TEST008 -nオプションを付与した場合、ヘッダが1つだけ表示されることを確認する
|
||||
TEST009 -nオプションを付与しなかった場合、ヘッダが10行ごとに出力されることを確認する
|
||||
TEST010 -sオプションでMcKernelのステータスのみ表示することを確認する
|
||||
TEST011 -hオプションでusageが表示されることを確認する
|
||||
TEST012 -hオプションを他オプションと同時に指定してもusage表示が優先されることを確認する
|
||||
TEST013 delayを指定した秒間単位で行を出力することを確認する
|
||||
TEST014 delayのみを指定した場合、間隔単位で継続出力を行うことを確認する
|
||||
TEST015 不正なオプションを指定した場合に期待通りの動作になることを確認する
|
||||
|
||||
(3) 実行結果ログ
|
||||
result.logファイル内に実行時のログを記載する。
|
||||
実行に利用したIHK/McKernelは、IA版における下記の版数相当に加えて、
|
||||
https://postpeta.pccluster.org/redmine/issues/1237
|
||||
https://postpeta.pccluster.org/redmine/issues/1223
|
||||
の関連修正を加えたarm64版移植IHK/McKernelである。
|
||||
|
||||
IHK
|
||||
commit d6fcbee8cb91f9ec4b49f97c918e696ac0335aaf
|
||||
Author: Shiratori, Takehiro <fj0300es@aa.jp.fujitsu.com>
|
||||
Date: Tue Oct 16 16:25:33 2018 +0900
|
||||
|
||||
McKernel
|
||||
commit 6f9fef2b13447c74c36d15cf5ebd186f8395ccca
|
||||
Author: Ken Sato <ken.sato.ty@hitachi-solutions.com>
|
||||
Date: Tue Sep 25 10:05:41 2018 +0900
|
||||
|
||||
(4) 備考
|
||||
特になし。
|
||||
|
||||
|
||||
以上。
|
||||
73
test/mcstat/arm64/get_rusage.c
Normal file
73
test/mcstat/arm64/get_rusage.c
Normal file
@ -0,0 +1,73 @@
|
||||
/* get_rusage.c COPYRIGHT FUJITSU LIMITED 2018 */
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ihklib.h>
|
||||
#include <mckernel/ihklib_rusage.h>
|
||||
|
||||
static void usage(char *cmd)
|
||||
{
|
||||
printf("Usage:\n");
|
||||
printf(" %s <os_number>\n", cmd);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int os_num = 0;
|
||||
int ret = -1;
|
||||
int i = 0;
|
||||
struct mckernel_rusage mck_rusage;
|
||||
|
||||
if (argc != 2) {
|
||||
usage(argv[0]);
|
||||
goto out;
|
||||
}
|
||||
|
||||
os_num = atoi(argv[1]);
|
||||
if (os_num < 0 || 63 < os_num) {
|
||||
printf("Invalid argument 1 os_num.\n");
|
||||
usage(argv[0]);
|
||||
goto out;
|
||||
}
|
||||
|
||||
memset(&mck_rusage, 0, sizeof(mck_rusage));
|
||||
ret = ihk_os_getrusage(os_num, &mck_rusage, sizeof(mck_rusage));
|
||||
if (ret) {
|
||||
perror("ihk_os_getrusage()");
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (i = 0; i < IHK_MAX_NUM_PGSIZES; i++) {
|
||||
printf("memory_stat_rss[%d] : 0x%lx\n", i,
|
||||
mck_rusage.memory_stat_rss[i]);
|
||||
}
|
||||
|
||||
for (i = 0; i < IHK_MAX_NUM_PGSIZES; i++) {
|
||||
printf("memory_stat_mapped_file[%d] : 0x%lx\n", i,
|
||||
mck_rusage.memory_stat_mapped_file[i]);
|
||||
}
|
||||
|
||||
printf("memory_max_usage : 0x%lx\n", mck_rusage.memory_max_usage);
|
||||
printf("memory_kmem_usage : 0x%lx\n", mck_rusage.memory_kmem_usage);
|
||||
printf("memory_kmem_max_usage : 0x%lx\n", mck_rusage.memory_kmem_max_usage);
|
||||
|
||||
for (i = 0; i < IHK_MAX_NUM_NUMA_NODES; i++) {
|
||||
printf("memory_numa_stat[%d] : 0x%lx\n", i,
|
||||
mck_rusage.memory_numa_stat[i]);
|
||||
}
|
||||
|
||||
printf("cpuacct_stat_system : 0x%lx\n", mck_rusage.cpuacct_stat_system);
|
||||
printf("cpuacct_stat_user : 0x%lx\n", mck_rusage.cpuacct_stat_user);
|
||||
printf("cpuacct_usage : 0x%lx\n", mck_rusage.cpuacct_usage);
|
||||
|
||||
for (i = 0; i < IHK_MAX_NUM_CPUS; i++) {
|
||||
printf("cpuacct_usage_percpu[%d] : 0x%lx\n", i,
|
||||
mck_rusage.cpuacct_usage_percpu[i]);
|
||||
}
|
||||
|
||||
printf("num_threads : 0x%x\n", mck_rusage.num_threads);
|
||||
printf("max_num_threads : 0x%x\n", mck_rusage.max_num_threads);
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
20
test/mcstat/arm64/result.log
Normal file
20
test/mcstat/arm64/result.log
Normal file
@ -0,0 +1,20 @@
|
||||
gcc -o get_rusage get_rusage.c -Wall -I/opt/ppos/bin/../include -Wl,-rpath=/opt/ppos/bin/../lib -L/opt/ppos/bin/../lib -lihk
|
||||
./run.sh
|
||||
mcstop+release.sh ... done
|
||||
mcreboot.sh -c 4-7 -m 512M@0 ... done
|
||||
TEST001: OK
|
||||
TEST002: OK
|
||||
TEST003: OK
|
||||
TEST004: OK
|
||||
TEST005: OK
|
||||
TEST006: OK
|
||||
TEST007: OK
|
||||
TEST008: OK
|
||||
TEST009: OK
|
||||
TEST010: OK
|
||||
TEST011: OK
|
||||
TEST012: OK
|
||||
TEST013: OK
|
||||
./run.sh: 172 行: 6701 Terminated stdbuf -i0 -o0 -e0 ${MCSTAT} 1 > ./tmp.log 2>&1
|
||||
TEST014: OK
|
||||
TEST015: OK
|
||||
196
test/mcstat/arm64/run.sh
Executable file
196
test/mcstat/arm64/run.sh
Executable file
@ -0,0 +1,196 @@
|
||||
#!/bin/sh
|
||||
## run.sh COPYRIGHT FUJITSU LIMITED 2018 ##
|
||||
|
||||
USELTP=0
|
||||
USEOSTEST=1
|
||||
MCREBOOT=0
|
||||
|
||||
. ../../common.sh
|
||||
|
||||
MCSTAT="${BIN}/mcstat"
|
||||
BOOTPARAM="-c 4-7 -m 512M@0"
|
||||
|
||||
mcreboot
|
||||
|
||||
sleep 1
|
||||
|
||||
${MCEXEC} ${TESTMCK} -s mem_limits -n 0 -- -s $((64*1024*1024)) -c 1 -f mmap > /dev/null 2>&1
|
||||
|
||||
sleep 1
|
||||
|
||||
result=0
|
||||
|
||||
#################
|
||||
## mcstat test ##
|
||||
#################
|
||||
|
||||
output=`${MCSTAT} | sed -n -e 3p`
|
||||
mck_mem_total=$(awk '{print $1}' <<< ${output})
|
||||
mem_current=$(awk '{print $2}' <<< ${output})
|
||||
mem_max=$(awk '{print $3}' <<< ${output})
|
||||
tsc_system=$(awk '{print $4}' <<< ${output})
|
||||
tsc_user=$(awk '{print $5}' <<< ${output})
|
||||
thread_current=$(awk '{print $6}' <<< ${output})
|
||||
thread_max=$(awk '{print $7}' <<< ${output})
|
||||
|
||||
output=`./get_rusage 0`
|
||||
exp_kmem_current=`echo "${output}" | grep "memory_kmem_usage" | cut -c 21-`
|
||||
exp_umem_current=`echo "${output}" | grep "memory_numa_stat\[0\]" | cut -c 23-`
|
||||
exp_mem_current=$((${exp_kmem_current}+${exp_umem_current}))
|
||||
|
||||
exp_kmem_max=`echo "${output}" | grep "memory_kmem_max_usage" | cut -c 25-`
|
||||
exp_umem_max=`echo "${output}" | grep "memory_max_usage" | cut -c 20-`
|
||||
exp_mem_max=$((${exp_kmem_max}+${exp_umem_max}))
|
||||
|
||||
exp_tsc_system=`echo "${output}" | grep "cpuacct_stat_system" | cut -c 23-`
|
||||
exp_tsc_user=`echo "${output}" | grep "cpuacct_stat_user" | cut -c 21-`
|
||||
exp_thread_current=`echo "${output}" | grep "num_threads" | head -1 | cut -c 15-`
|
||||
exp_thread_max=`echo "${output}" | grep "max_num_threads" | cut -c 19-`
|
||||
|
||||
mck_mem_total=`echo "scale=3; ${mck_mem_total} - ${mem_current}" | bc`
|
||||
mck_mem_total=${mck_mem_total%.*}
|
||||
if [ 502 -le ${mck_mem_total} -a ${mck_mem_total} -lt 512 ]; then
|
||||
echo "TEST001: OK"
|
||||
else
|
||||
echo "TEST001: NG, memory total value (exp:near512MiB val:${mck_mem_total}MiB)."
|
||||
result=-1
|
||||
fi
|
||||
|
||||
exp_mem_current=$((${exp_mem_current} / 1024 / 1024))
|
||||
mem_current=${mem_current%.*}
|
||||
if [ ${mem_current} == ${exp_mem_current} ]; then
|
||||
echo "TEST002: OK"
|
||||
else
|
||||
echo "TEST002: NG, memory current value (exp:${exp_mem_current}MiB val:${mem_current}MiB)"
|
||||
result=-1
|
||||
fi
|
||||
|
||||
exp_mem_max=$((${exp_mem_max} / 1024 / 1024))
|
||||
mem_max=${mem_max%.*}
|
||||
if [ ${mem_max} == ${exp_mem_max} ]; then
|
||||
echo "TEST003: OK"
|
||||
else
|
||||
echo "TEST003: NG, memory max value (exp:${exp_mem_max}MiB val:${mem_current}MiB)"
|
||||
result=-1
|
||||
fi
|
||||
|
||||
exp_tsc_system=$((${exp_tsc_system}))
|
||||
if [ ${tsc_system} == ${exp_tsc_system} ]; then
|
||||
echo "TEST004: OK"
|
||||
else
|
||||
echo "TEST004: NG, tsc system value (exp:${exp_tsc_system} val:${tsc_system})"
|
||||
result=-1
|
||||
fi
|
||||
|
||||
exp_tsc_user=$((${exp_tsc_user}))
|
||||
if [ ${tsc_user} == ${exp_tsc_user} ]; then
|
||||
echo "TEST005: OK"
|
||||
else
|
||||
echo "TEST005: NG, tsc user value (exp:${exp_tsc_system} val:${tsc_system})"
|
||||
result=-1
|
||||
fi
|
||||
|
||||
exp_thread_current=$((${exp_thread_current}))
|
||||
if [ ${thread_current} == ${exp_thread_current} ]; then
|
||||
echo "TEST006: OK"
|
||||
else
|
||||
echo "TEST006: NG, current thread value (exp:${exp_thread_current} val:${thread_current})"
|
||||
result=-1
|
||||
fi
|
||||
|
||||
exp_thread_max=$((${exp_thread_max}))
|
||||
if [ ${thread_max} == ${exp_thread_max} ]; then
|
||||
echo "TEST007: OK"
|
||||
else
|
||||
echo "TEST007: NG, max thread value (exp:${exp_thread_max} val:${thread_max})"
|
||||
result=-1
|
||||
fi
|
||||
|
||||
output=`${MCSTAT} -n 1 20 | grep -c "\-\-\-\-\-\-\- memory"`
|
||||
if [ ${output} == 1 ]; then
|
||||
echo "TEST008: OK"
|
||||
else
|
||||
echo "TEST008: NG, header output frequency -n option setting."
|
||||
result=-1
|
||||
fi
|
||||
|
||||
output=`${MCSTAT} 1 20 | grep -c "\-\-\-\-\-\-\- memory"`
|
||||
if [ ${output} == 2 ]; then
|
||||
echo "TEST009: OK"
|
||||
else
|
||||
echo "TEST009: NG, header output frequency -n option not setting."
|
||||
result=-1
|
||||
fi
|
||||
|
||||
output=`${MCSTAT} -s | awk '{print toupper($0)}'`
|
||||
output=`echo ${output} | cut -c 18-`
|
||||
exp_status=`${IHKOSCTL} 0 get status`
|
||||
if [ ${output} == ${exp_status} ]; then
|
||||
echo "TEST010: OK"
|
||||
else
|
||||
echo "TEST010: NG, -s option get status.(exp:${exp_status} status:${output})"
|
||||
result=-1
|
||||
fi
|
||||
|
||||
${MCSTAT} -h 2>&1 | grep -q "Usage"
|
||||
if [ $? == 0 ]; then
|
||||
echo "TEST011: OK"
|
||||
else
|
||||
echo "TEST011: NG, -h option setting."
|
||||
result=-1
|
||||
fi
|
||||
|
||||
${MCSTAT} -s -h 2>&1 | grep -q "Usage"
|
||||
if [ $? == 0 ]; then
|
||||
echo "TEST012: OK"
|
||||
else
|
||||
echo "TEST012: NG, -h and other option setting."
|
||||
result=-1
|
||||
fi
|
||||
|
||||
(time ${MCSTAT} 5 2) > ./tmp.log 2>&1
|
||||
output=`cat ./tmp.log | tac | sed -n -e 3p | cut -c 8-12`
|
||||
output=${output%.*}
|
||||
if [ ${output} == 5 ]; then
|
||||
output=`cat ./tmp.log | sort | uniq -c | sort -nr | head -1 | cut -c 7-8`
|
||||
|
||||
if [ ${output} == 2 ]; then
|
||||
echo "TEST013: OK"
|
||||
else
|
||||
echo "TEST013: NG, delay/count option setting. (lines mismatch)"
|
||||
result=-1
|
||||
fi
|
||||
else
|
||||
echo "TEST013: NG, delay/count option setting. (times mismatch)"
|
||||
result=-1
|
||||
fi
|
||||
|
||||
stdbuf -i0 -o0 -e0 ${MCSTAT} 1 > ./tmp.log 2>&1 &
|
||||
sleep 10
|
||||
kill `pidof mcstat`
|
||||
output=`cat ./tmp.log | sort | uniq -c | sort -nr | head -1 | cut -c 6-7`
|
||||
if [ ${output} == 11 ]; then
|
||||
echo "TEST014: OK"
|
||||
else
|
||||
echo "TEST014: NG, delay option only setting."
|
||||
result=-1
|
||||
fi
|
||||
|
||||
${MCSTAT} -k > ./tmp.log 2>&1
|
||||
if [ $? == 0 ]; then
|
||||
cat ./tmp.log | grep -q "invalid option"
|
||||
|
||||
if [ $? == 0 ]; then
|
||||
echo "TEST015: OK"
|
||||
else
|
||||
echo "TEST015: NG, invalid option setting. (log mismatch)"
|
||||
result=-1
|
||||
fi
|
||||
else
|
||||
echo "TEST015: NG, invalid option setting. (result mismatch)"
|
||||
result=-1
|
||||
fi
|
||||
|
||||
rm -f ./tmp.log
|
||||
|
||||
exit ${result}
|
||||
Reference in New Issue
Block a user