Add kernel argument to turn on/off time sharing

Add "-T 0" to mcreboot.sh if you want to turn off time sharing.  When
it's turned off, McKernel doesn't activate interval timer when the
length of per-CPU run-queue is larger than one.

Change-Id: I2cedc1b30a9cd9a0f4608a32ecec0a0d58c6225e
This commit is contained in:
Masamichi Takagi
2018-10-31 20:57:12 +09:00
committed by Dominique Martinet
parent 7a3f4d7501
commit 38e68f358a
4 changed files with 23 additions and 2 deletions

View File

@@ -49,8 +49,9 @@ safe_kernel_map=""
umask_old=`umask`
idle_halt=""
allow_oversubscribe=""
time_sharing="time_sharing"
while getopts stk:c:m:o:f:r:q:i:d:e:hO OPT
while getopts stk:c:m:o:f:r:q:i:d:e:hOT: OPT
do
case ${OPT} in
f) facility=${OPTARG}
@@ -81,6 +82,14 @@ do
;;
O) allow_oversubscribe="allow_oversubscribe"
;;
T)
case ${OPTARG} in
1) time_sharing="time_sharing"
;;
0) time_sharing=""
;;
esac
;;
\?) exit 1
;;
esac
@@ -449,7 +458,7 @@ if ! ${SBINDIR}/ihkosctl 0 load ${KERNDIR}/mckernel.img; then
fi
# Set kernel arguments
if ! ${SBINDIR}/ihkosctl 0 kargs "hidos $turbo $safe_kernel_map $idle_halt dump_level=${DUMP_LEVEL} $extra_kopts $allow_oversubscribe"; then
if ! ${SBINDIR}/ihkosctl 0 kargs "hidos $turbo $safe_kernel_map $idle_halt dump_level=${DUMP_LEVEL} $extra_kopts $allow_oversubscribe $time_sharing"; then
echo "error: setting kernel arguments" >&2
error_exit "os_created"
fi

View File

@@ -280,6 +280,7 @@ extern struct list_head resource_set_list;
extern mcs_rwlock_lock_t resource_set_lock;
extern int idle_halt;
extern int allow_oversubscribe;
extern int time_sharing;
extern ihk_spinlock_t runq_reservation_lock; /* mutex for cpuid reservation (clv->runq_reserved) */
struct process_hash {

View File

@@ -168,6 +168,12 @@ static void parse_kargs(void)
if (ptr) {
allow_oversubscribe = 1;
}
/* time_sharing option */
ptr = find_command_line("time_sharing");
if (ptr) {
time_sharing = 1;
}
}
extern void ihk_mc_get_boot_time(unsigned long *tv_sec, unsigned long *tv_nsec);

View File

@@ -91,6 +91,7 @@ ihk_spinlock_t runq_reservation_lock;
int idle_halt = 0;
int allow_oversubscribe = 0;
int time_sharing = 0;
void
init_process(struct process *proc, struct process *parent)
@@ -3100,6 +3101,10 @@ void set_timer(int runq_locked)
int num_running = 0;
unsigned long irqstate;
if (!time_sharing) {
return;
}
if (!runq_locked) {
irqstate = ihk_mc_spinlock_lock(&(v->runq_lock));
}