init_process_stack: Support "ulimit -s unlimited"
Refs: #1109 Change-Id: I395f012fd747cb6a2f93be71e34c7f6f3666ed67
This commit is contained in:
committed by
Masamichi Takagi
parent
0c7384f980
commit
eae5c40f60
@ -2138,6 +2138,7 @@ int init_process_stack(struct thread *thread, struct program_load_desc *pn,
|
|||||||
char *stack;
|
char *stack;
|
||||||
int error;
|
int error;
|
||||||
unsigned long *p;
|
unsigned long *p;
|
||||||
|
unsigned long maxsz;
|
||||||
unsigned long minsz;
|
unsigned long minsz;
|
||||||
unsigned long at_rand;
|
unsigned long at_rand;
|
||||||
struct process *proc = thread->proc;
|
struct process *proc = thread->proc;
|
||||||
@ -2154,19 +2155,20 @@ int init_process_stack(struct thread *thread, struct program_load_desc *pn,
|
|||||||
minsz = (pn->stack_premap
|
minsz = (pn->stack_premap
|
||||||
+ LARGE_PAGE_SIZE - 1) & LARGE_PAGE_MASK;
|
+ LARGE_PAGE_SIZE - 1) & LARGE_PAGE_MASK;
|
||||||
#endif /* POSTK_DEBUG_ARCH_DEP_80 */
|
#endif /* POSTK_DEBUG_ARCH_DEP_80 */
|
||||||
size = (proc->rlimit[MCK_RLIMIT_STACK].rlim_cur
|
maxsz = (end - thread->vm->region.map_start) / 2;
|
||||||
+ LARGE_PAGE_SIZE - 1) & LARGE_PAGE_MASK;
|
size = proc->rlimit[MCK_RLIMIT_STACK].rlim_cur;
|
||||||
|
if (size > maxsz) {
|
||||||
|
size = maxsz;
|
||||||
|
}
|
||||||
|
else if (size < minsz) {
|
||||||
|
size = minsz;
|
||||||
|
}
|
||||||
|
size = (size + LARGE_PAGE_SIZE - 1) & LARGE_PAGE_MASK;
|
||||||
dkprintf("%s: stack_premap: %lu, rlim_cur: %lu, minsz: %lu, size: %lu\n",
|
dkprintf("%s: stack_premap: %lu, rlim_cur: %lu, minsz: %lu, size: %lu\n",
|
||||||
__FUNCTION__,
|
__FUNCTION__,
|
||||||
pn->stack_premap,
|
pn->stack_premap,
|
||||||
proc->rlimit[MCK_RLIMIT_STACK].rlim_cur,
|
proc->rlimit[MCK_RLIMIT_STACK].rlim_cur,
|
||||||
minsz, size);
|
minsz, size);
|
||||||
if (size > (USER_END / 2)) {
|
|
||||||
size = USER_END / 2;
|
|
||||||
}
|
|
||||||
else if (size < minsz) {
|
|
||||||
size = minsz;
|
|
||||||
}
|
|
||||||
start = (end - size) & LARGE_PAGE_MASK;
|
start = (end - size) & LARGE_PAGE_MASK;
|
||||||
|
|
||||||
/* Apply user allocation policy to stacks */
|
/* Apply user allocation policy to stacks */
|
||||||
|
|||||||
76
test/issues/1109/C1109.sh
Normal file
76
test/issues/1109/C1109.sh
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
BIN=
|
||||||
|
SBIN=
|
||||||
|
OSTEST=
|
||||||
|
BOOTPARAM="-c 1-7 -m 10G@0"
|
||||||
|
|
||||||
|
if [ -f ../../../config.h ]; then
|
||||||
|
str=`grep "^#define BINDIR " ../../../config.h | head -1 | sed 's/^#define BINDIR /BINDIR=/'`
|
||||||
|
eval $str
|
||||||
|
fi
|
||||||
|
if [ "x$BINDIR" = x ];then
|
||||||
|
BINDIR="$BIN"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f ../../../Makefile ]; then
|
||||||
|
str=`grep ^SBINDIR ../../../Makefile | head -1 | sed 's/ //g'`
|
||||||
|
eval $str
|
||||||
|
fi
|
||||||
|
if [ "x$SBINDIR" = x ];then
|
||||||
|
SBINDIR="$SBIN"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f $HOME/ostest/bin/test_mck ]; then
|
||||||
|
OSTESTDIR="$HOME/ostest"
|
||||||
|
fi
|
||||||
|
if [ "x$OSTESTDIR" = x ]; then
|
||||||
|
OSTESTDIR="$OSTEST"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! lsmod | grep mcctrl > /dev/null 2>&1; then
|
||||||
|
if [ ! -x $SBINDIR/mcreboot.sh ]; then
|
||||||
|
echo no mcreboot found >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
sudo $SBINDIR/mcreboot.sh $BOOTPARAM
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -x $SBINDIR/ihkosctl ]; then
|
||||||
|
echo no ihkosctl found >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
maxmem=`$SBINDIR/ihkosctl 0 query mem | cut -d '@' -f 1`
|
||||||
|
mem95p=`expr $maxmem \* 95 / 100`
|
||||||
|
mem110p=`expr $maxmem \* 110 / 100`
|
||||||
|
|
||||||
|
if [ ! -x $BINDIR/mcexec ]; then
|
||||||
|
echo no mcexec found >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for i in 10240:9961472:01 2097152:2040109466:02 unlimited:$mem95p:03; do
|
||||||
|
ul=`echo $i|sed 's/:.*//'`
|
||||||
|
st=`echo $i|sed -e 's/^[^:]*://' -e 's/:[^:]*$//'`
|
||||||
|
id=`echo $i|sed 's/.*://'`
|
||||||
|
|
||||||
|
sudo sh -c "ulimit -s $ul; $BINDIR/mcexec $OSTESTDIR/bin/test_mck -s mem_stack_limits -n 0 -- -s $st" 2>&1 | tee C1109T$id.txt
|
||||||
|
if grep "RESULT: ok" C1109T$id.txt > /dev/null 2>&1; then
|
||||||
|
echo "*** C1109T$id: OK"
|
||||||
|
else
|
||||||
|
echo "*** C1109T$id: NG"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
for i in 10M:9961472:04 2G:2040109466:05 100000G:$mem95p:06; do
|
||||||
|
ul=`echo $i|sed 's/:.*//'`
|
||||||
|
st=`echo $i|sed -e 's/^[^:]*://' -e 's/:[^:]*$//'`
|
||||||
|
id=`echo $i|sed 's/.*://'`
|
||||||
|
|
||||||
|
$BINDIR/mcexec -s 2M,$ul $OSTESTDIR/bin/test_mck -s mem_stack_limits -n 0 -- -s $st 2>&1 | tee C1109T$id.txt
|
||||||
|
if grep "RESULT: ok" C1109T$id.txt > /dev/null 2>&1; then
|
||||||
|
echo "*** C1109T$id: OK"
|
||||||
|
else
|
||||||
|
echo "*** C1109T$id: NG"
|
||||||
|
fi
|
||||||
|
done
|
||||||
49
test/issues/1109/C1109.txt
Normal file
49
test/issues/1109/C1109.txt
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
Script started on Thu Jun 28 09:14:18 2018
|
||||||
|
bash-4.2$ make test
|
||||||
|
sh ./C1109.sh
|
||||||
|
TEST_SUITE: mem_stack_limits
|
||||||
|
TEST_NUMBER: 0
|
||||||
|
ARGS: -s 9961472
|
||||||
|
call: 0 GiB + 9 MiB + 512 KiB
|
||||||
|
used_stack size: 9986480 (0 GiB + 9 MiB + 536 KiB)
|
||||||
|
RESULT: ok
|
||||||
|
*** C1109T01: OK
|
||||||
|
TEST_SUITE: mem_stack_limits
|
||||||
|
TEST_NUMBER: 0
|
||||||
|
ARGS: -s 2040109466
|
||||||
|
call: 1 GiB + 921 MiB + 614 KiB
|
||||||
|
used_stack size: 2040182784 (1 GiB + 921 MiB + 686 KiB)
|
||||||
|
RESULT: ok
|
||||||
|
*** C1109T02: OK
|
||||||
|
TEST_SUITE: mem_stack_limits
|
||||||
|
TEST_NUMBER: 0
|
||||||
|
ARGS: -s 10200547328
|
||||||
|
call: 9 GiB + 512 MiB + 0 KiB
|
||||||
|
used_stack size: 10200572336 (9 GiB + 512 MiB + 24 KiB)
|
||||||
|
RESULT: ok
|
||||||
|
*** C1109T03: OK
|
||||||
|
TEST_SUITE: mem_stack_limits
|
||||||
|
TEST_NUMBER: 0
|
||||||
|
ARGS: -s 9961472
|
||||||
|
call: 0 GiB + 9 MiB + 512 KiB
|
||||||
|
used_stack size: 9986480 (0 GiB + 9 MiB + 536 KiB)
|
||||||
|
RESULT: ok
|
||||||
|
*** C1109T04: OK
|
||||||
|
TEST_SUITE: mem_stack_limits
|
||||||
|
TEST_NUMBER: 0
|
||||||
|
ARGS: -s 2040109466
|
||||||
|
call: 1 GiB + 921 MiB + 614 KiB
|
||||||
|
used_stack size: 2040182784 (1 GiB + 921 MiB + 686 KiB)
|
||||||
|
RESULT: ok
|
||||||
|
*** C1109T05: OK
|
||||||
|
TEST_SUITE: mem_stack_limits
|
||||||
|
TEST_NUMBER: 0
|
||||||
|
ARGS: -s 10200547328
|
||||||
|
call: 9 GiB + 512 MiB + 0 KiB
|
||||||
|
used_stack size: 10200572336 (9 GiB + 512 MiB + 24 KiB)
|
||||||
|
RESULT: ok
|
||||||
|
*** C1109T06: OK
|
||||||
|
bash-4.2$ exit
|
||||||
|
exit
|
||||||
|
|
||||||
|
Script done on Thu Jun 28 09:14:32 2018
|
||||||
6
test/issues/1109/C1109T01.txt
Normal file
6
test/issues/1109/C1109T01.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
TEST_SUITE: mem_stack_limits
|
||||||
|
TEST_NUMBER: 0
|
||||||
|
ARGS: -s 9961472
|
||||||
|
call: 0 GiB + 9 MiB + 512 KiB
|
||||||
|
used_stack size: 9986480 (0 GiB + 9 MiB + 536 KiB)
|
||||||
|
RESULT: ok
|
||||||
6
test/issues/1109/C1109T02.txt
Normal file
6
test/issues/1109/C1109T02.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
TEST_SUITE: mem_stack_limits
|
||||||
|
TEST_NUMBER: 0
|
||||||
|
ARGS: -s 2040109466
|
||||||
|
call: 1 GiB + 921 MiB + 614 KiB
|
||||||
|
used_stack size: 2040182784 (1 GiB + 921 MiB + 686 KiB)
|
||||||
|
RESULT: ok
|
||||||
6
test/issues/1109/C1109T03.txt
Normal file
6
test/issues/1109/C1109T03.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
TEST_SUITE: mem_stack_limits
|
||||||
|
TEST_NUMBER: 0
|
||||||
|
ARGS: -s 10200547328
|
||||||
|
call: 9 GiB + 512 MiB + 0 KiB
|
||||||
|
used_stack size: 10200572336 (9 GiB + 512 MiB + 24 KiB)
|
||||||
|
RESULT: ok
|
||||||
6
test/issues/1109/C1109T04.txt
Normal file
6
test/issues/1109/C1109T04.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
TEST_SUITE: mem_stack_limits
|
||||||
|
TEST_NUMBER: 0
|
||||||
|
ARGS: -s 9961472
|
||||||
|
call: 0 GiB + 9 MiB + 512 KiB
|
||||||
|
used_stack size: 9986480 (0 GiB + 9 MiB + 536 KiB)
|
||||||
|
RESULT: ok
|
||||||
6
test/issues/1109/C1109T05.txt
Normal file
6
test/issues/1109/C1109T05.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
TEST_SUITE: mem_stack_limits
|
||||||
|
TEST_NUMBER: 0
|
||||||
|
ARGS: -s 2040109466
|
||||||
|
call: 1 GiB + 921 MiB + 614 KiB
|
||||||
|
used_stack size: 2040182784 (1 GiB + 921 MiB + 686 KiB)
|
||||||
|
RESULT: ok
|
||||||
6
test/issues/1109/C1109T06.txt
Normal file
6
test/issues/1109/C1109T06.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
TEST_SUITE: mem_stack_limits
|
||||||
|
TEST_NUMBER: 0
|
||||||
|
ARGS: -s 10200547328
|
||||||
|
call: 9 GiB + 512 MiB + 0 KiB
|
||||||
|
used_stack size: 10200572336 (9 GiB + 512 MiB + 24 KiB)
|
||||||
|
RESULT: ok
|
||||||
6
test/issues/1109/Makefile
Normal file
6
test/issues/1109/Makefile
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
all::
|
||||||
|
|
||||||
|
test::
|
||||||
|
sh ./C1109.sh
|
||||||
|
|
||||||
|
clean::
|
||||||
25
test/issues/1109/README
Normal file
25
test/issues/1109/README
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
【Issue#1109 動作確認】
|
||||||
|
□ テスト内容
|
||||||
|
1. スタックサイズ制限を ulimit -s によって指定した場合の実行確認
|
||||||
|
C1109T01 ulimit -s 10MB 指定し、9.5MBスタックを使用できることを確認
|
||||||
|
C1109T02 ulimit -s 2GB 指定し、1.9GBスタックを使用できることを確認
|
||||||
|
C1109T03 ulimit -s unlimited 指定し、全メモリの95%をスタックで使用できる
|
||||||
|
ことを確認
|
||||||
|
|
||||||
|
2. スタックサイズをmcexec -s オプションで指定した場合の実行確認
|
||||||
|
C1109T04 mcexec -s 2M,10M 指定し、9.5MBスタックを使用できることを確認
|
||||||
|
C1109T05 mcexec -s 2M,2G 指定し、1.9GBスタックを使用できることを確認
|
||||||
|
C1109T06 mcexec -s 2M,100000G 指定し、全メモリの95%をスタックで使用できる
|
||||||
|
ことを確認
|
||||||
|
|
||||||
|
□ 実行手順
|
||||||
|
$ make test
|
||||||
|
|
||||||
|
実行できない場合は、C1109.shの以下の行を適切に書き換えた後に実行。
|
||||||
|
BIN= mcexec が存在するパス
|
||||||
|
SBIN= mcreboot.sh が存在するパス
|
||||||
|
OSTEST= OSTEST が存在するパス
|
||||||
|
|
||||||
|
□ 実行結果
|
||||||
|
C1109.txt 参照。
|
||||||
|
全ての項目が OK となっていることを確認。
|
||||||
Reference in New Issue
Block a user