Skip to content

Commit

Permalink
fixing issue in kronos to handle tracer results involving PIDs in dif…
Browse files Browse the repository at this point in the history
…ferent namespace. TODO: fix the issue in tracer code itself
  • Loading branch information
Vignesh2208 committed Sep 5, 2019
1 parent 5e25882 commit 36750c5
Show file tree
Hide file tree
Showing 10 changed files with 64 additions and 59 deletions.
44 changes: 39 additions & 5 deletions src/core/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ void add_to_tracer_schedule_queue(tracer * tracer_entry,
new_elem =
(lxc_schedule_elem *)kmalloc(sizeof(lxc_schedule_elem), GFP_KERNEL);
if (new_elem == NULL) {
PDEBUG_E("Add to tracer schedule queue: "
PDEBUG_I("Add to tracer schedule queue: "
"Tracer %d, tracee %d. Failed to alot Memory\n",
tracer_entry->tracer_id, tracee->pid);
return;
Expand Down Expand Up @@ -304,7 +304,7 @@ void add_to_tracer_schedule_queue(tracer * tracer_entry,
sp.sched_priority = 99;
sched_setscheduler(tracee, SCHED_RR, &sp);
hmap_put_abs(&tracer_entry->valid_children, new_elem->pid, new_elem);
PDEBUG_I("Add to tracer schedule queue: "
PDEBUG_E("Add to tracer schedule queue: "
"Tracer %d, tracee %d. Succeeded.\n", tracer_entry->tracer_id,
tracee->pid);
}
Expand Down Expand Up @@ -400,7 +400,7 @@ int register_tracer_process(char * write_buffer) {
return FAIL;
}

spinner_task = find_task_by_pid(spinner_pid);
spinner_task = get_task_ns(spinner_pid, current);

if (!spinner_task) {
PDEBUG_E("Spinner pid task not found. "
Expand Down Expand Up @@ -813,6 +813,36 @@ void update_all_tracers_virtual_time(int cpuID) {
}


struct task_struct* get_task_ns(pid_t pid, struct task_struct * parent) {
if (!parent)
return NULL;
int num_children = 0;
struct list_head *list;
struct task_struct *me;
struct task_struct *t;
me = parent;
t = me;

do {
if (task_pid_nr_ns(t, task_active_pid_ns(t)) == pid)
return t;
} while_each_thread(me, t);




list_for_each(list, &parent->children) {
struct task_struct * taskRecurse = list_entry(list, struct task_struct, sibling);
if (task_pid_nr_ns(taskRecurse, task_active_pid_ns(taskRecurse)) == pid)
return taskRecurse;
t = get_task_ns(pid, taskRecurse);
if (t != NULL)
return t;
}
return NULL;
}


/**
* write_buffer: result which indicates overflow number of instructions.
It specifies the total number of instructions by which the tracer overshot
Expand Down Expand Up @@ -857,10 +887,14 @@ int handle_tracer_results(char * buffer) {

if (result) {
//result is a pid to be ignored
PDEBUG_V("Handle tracer results: Pid: %d, Tracer ID: %d, "
PDEBUG_I("Handle tracer results: Pid: %d, Tracer ID: %d, "
"Ignoring Process: %d\n", current->pid,
curr_tracer->tracer_id, result);
hmap_put_abs(&curr_tracer->ignored_children, result, current);
struct task_struct * mappedTask = get_task_ns(result, current);
if (mappedTask != NULL) {
PDEBUG_I("MAPPED TASK PID = %d, Ignoring it.\n", mappedTask->pid);
hmap_put_abs(&curr_tracer->ignored_children, mappedTask->pid, current);
}
}
}
put_tracer_struct_write(curr_tracer);
Expand Down
41 changes: 5 additions & 36 deletions src/core/sync_experiment.c
Original file line number Diff line number Diff line change
Expand Up @@ -1025,15 +1025,15 @@ void clean_up_all_irrelevant_processes(tracer * curr_tracer) {
curr_elem->pid) != NULL) {

if (task == NULL) { // task is dead
PDEBUG_V("Clean up irrelevant processes: "
PDEBUG_I("Clean up irrelevant processes: "
"Curr elem: %d. Task is dead\n", curr_elem->pid);
put_tracer_struct_read(curr_tracer);
get_tracer_struct_write(curr_tracer);
pop_schedule_list(curr_tracer);
put_tracer_struct_write(curr_tracer);
get_tracer_struct_read(curr_tracer);
} else { // task is ignored
PDEBUG_V("Clean up irrelevant processes: "
PDEBUG_I("Clean up irrelevant processes: "
"Curr elem: %d. Task is ignored\n", curr_elem->pid);

put_tracer_struct_read(curr_tracer);
Expand Down Expand Up @@ -1238,28 +1238,6 @@ lxc_schedule_elem * get_next_runnable_task(tracer * curr_tracer) {
llist_elem* head = schedule_queue->head;


/*
n_scheduled_processes = schedule_list_size(curr_tracer);
while (n_checked_processes < n_scheduled_processes) {
curr_elem =
(lxc_schedule_elem *)llist_get(&curr_tracer->schedule_queue, 0);
if (!curr_elem)
return NULL;
put_tracer_struct_read(curr_tracer);
get_tracer_struct_write(curr_tracer);
requeue_schedule_list(curr_tracer);
put_tracer_struct_write(curr_tracer);
get_tracer_struct_read(curr_tracer);
n_checked_processes ++;
if (curr_elem->n_insns_curr_round)
return curr_elem;
}
*/

head = schedule_queue->head;
while (head != NULL) {
curr_elem = (lxc_schedule_elem *)head->item;
Expand Down Expand Up @@ -1318,6 +1296,7 @@ void wait_for_tracer_completion(tracer * curr_tracer) {

}


#ifndef __TK_MULTI_CORE_MODE
int unfreeze_proc_exp_single_core_mode(tracer * curr_tracer) {

Expand All @@ -1339,7 +1318,7 @@ int unfreeze_proc_exp_single_core_mode(tracer * curr_tracer) {
if (curr_tracer->quantum_n_insns == 0)
return SUCCESS;



/* for adding any new tasks that might have been spawned */
put_tracer_struct_read(curr_tracer);
Expand All @@ -1364,9 +1343,6 @@ int unfreeze_proc_exp_single_core_mode(tracer * curr_tracer) {
put_tracer_struct_read(curr_tracer);
get_tracer_struct_write(curr_tracer);
add_task_to_tracer_run_queue(curr_tracer, curr_elem);
//if (rem_n_insns > 0)
// update_task_virtual_time(curr_tracer, curr_elem->curr_task,
// rem_n_insns);
rem_n_insns += curr_elem->n_insns_curr_round;
curr_elem->n_insns_curr_round = 0; // reset to zero
put_tracer_struct_write(curr_tracer);
Expand All @@ -1380,14 +1356,7 @@ int unfreeze_proc_exp_single_core_mode(tracer * curr_tracer) {
signal_tracer_resume(curr_tracer);
wait_for_tracer_completion(curr_tracer);
get_tracer_struct_read(curr_tracer);
}


//curr_tracer->tracer_task->freeze_time =
// curr_tracer->tracer_task->freeze_time + curr_tracer->freeze_quantum;



}
return SUCCESS;
}

Expand Down
2 changes: 1 addition & 1 deletion src/tracer/includes.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ void printLog(const char *fmt, ...);
#if defined DEBUG
#define LOG(...) printLog(__VA_ARGS__)
#else
#define LOG(...)
#define LOG(...) //printLog(__VA_ARGS__)
#endif


Expand Down
2 changes: 1 addition & 1 deletion src/tracer/libperf/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/bin/ld -m elf_x86_64
LD = /usr/bin/x86_64-linux-gnu-ld -m elf_x86_64
LDFLAGS =
LIBOBJS =
LIBPERF_API_VERSION = 1.0
Expand Down
6 changes: 3 additions & 3 deletions src/tracer/libperf/config.status
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,7 @@ Xsed='/bin/sed -e 1s/^X//'
GREP='/bin/grep'
EGREP='/bin/grep -E'
FGREP='/bin/grep -F'
LD='/usr/bin/ld -m elf_x86_64'
LD='/usr/bin/x86_64-linux-gnu-ld -m elf_x86_64'
NM='/usr/bin/nm -B'
LN_S='ln -s'
max_cmd_len='1572864'
Expand Down Expand Up @@ -679,7 +679,7 @@ postuninstall_cmds=''
finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
finish_eval=''
hardcode_into_libs='yes'
sys_lib_search_path_spec='/usr/lib/gcc/x86_64-linux-gnu/5 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib '
sys_lib_search_path_spec='/usr/lib/gcc/x86_64-linux-gnu/6 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib '
configure_time_dlsearch_path='/lib /usr/lib /usr/lib/x86_64-linux-gnu/libfakeroot /usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/mesa-egl /usr/lib/x86_64-linux-gnu/mesa '
configure_time_lt_sys_library_path=''
hardcode_action='immediate'
Expand Down Expand Up @@ -839,7 +839,7 @@ S["LN_S"]="ln -s"
S["NM"]="/usr/bin/nm -B"
S["ac_ct_DUMPBIN"]=""
S["DUMPBIN"]=""
S["LD"]="/usr/bin/ld -m elf_x86_64"
S["LD"]="/usr/bin/x86_64-linux-gnu-ld -m elf_x86_64"
S["FGREP"]="/bin/grep -F"
S["EGREP"]="/bin/grep -E"
S["GREP"]="/bin/grep"
Expand Down
4 changes: 2 additions & 2 deletions src/tracer/libperf/libtool
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ finish_eval=""
hardcode_into_libs=yes

# Compile-time system search path for libraries.
sys_lib_search_path_spec="/usr/lib/gcc/x86_64-linux-gnu/5 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib "
sys_lib_search_path_spec="/usr/lib/gcc/x86_64-linux-gnu/6 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib "

# Detected run-time system search path for libraries.
sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/x86_64-linux-gnu/libfakeroot /usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/mesa-egl /usr/lib/x86_64-linux-gnu/mesa "
Expand All @@ -305,7 +305,7 @@ striplib="strip --strip-unneeded"


# The linker used to build libraries.
LD="/usr/bin/ld -m elf_x86_64"
LD="/usr/bin/x86_64-linux-gnu-ld -m elf_x86_64"

# How to create reloadable object files.
reload_flag=" -r"
Expand Down
12 changes: 6 additions & 6 deletions src/tracer/libperf/src/.deps/libperf.Plo
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ libperf.lo: libperf.c /usr/include/stdc-predef.h /usr/include/assert.h \
/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/stat.h \
/usr/include/x86_64-linux-gnu/bits/fcntl2.h /usr/include/inttypes.h \
/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
/usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h /usr/include/stdint.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h /usr/include/math.h \
/usr/include/x86_64-linux-gnu/bits/math-vector.h \
/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \
Expand All @@ -21,9 +21,9 @@ libperf.lo: libperf.c /usr/include/stdc-predef.h /usr/include/assert.h \
/usr/include/x86_64-linux-gnu/bits/mathdef.h \
/usr/include/x86_64-linux-gnu/bits/mathcalls.h \
/usr/include/x86_64-linux-gnu/bits/mathinline.h /usr/include/stdio.h \
/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h /usr/include/libio.h \
/usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h /usr/include/libio.h \
/usr/include/_G_config.h /usr/include/wchar.h \
/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
/usr/lib/gcc/x86_64-linux-gnu/6/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
Expand Down Expand Up @@ -109,7 +109,7 @@ libperf.lo: libperf.c /usr/include/stdc-predef.h /usr/include/assert.h \

/usr/include/inttypes.h:

/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
/usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h:

/usr/include/stdint.h:

Expand Down Expand Up @@ -139,15 +139,15 @@ libperf.lo: libperf.c /usr/include/stdc-predef.h /usr/include/assert.h \

/usr/include/stdio.h:

/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
/usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h:

/usr/include/libio.h:

/usr/include/_G_config.h:

/usr/include/wchar.h:

/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
/usr/lib/gcc/x86_64-linux-gnu/6/include/stdarg.h:

/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:

Expand Down
2 changes: 1 addition & 1 deletion src/tracer/libperf/src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/bin/ld -m elf_x86_64
LD = /usr/bin/x86_64-linux-gnu-ld -m elf_x86_64
LDFLAGS =
LIBOBJS =
LIBPERF_API_VERSION = 1.0
Expand Down
2 changes: 1 addition & 1 deletion src/tracer/tests/repeatability-test/test.s
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,5 @@ main:
addl $1, -32(%rbp)
jmp .L4
.size main, .-main
.ident "GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609"
.ident "GCC: (Ubuntu 6.5.0-2ubuntu1~16.04) 6.5.0 20181026"
.section .note.GNU-stack,"",@progbits
8 changes: 5 additions & 3 deletions src/tracer/tracer.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#define PTRACE_SET_DELTA_BUFFER_WINDOW 0x42f4
#define TRACER_RESULTS 'J'

#define BUFFER_WINDOW_SIZE 50
#define BUFFER_WINDOW_SIZE 100


#ifdef TEST
Expand Down Expand Up @@ -575,17 +575,18 @@ int run_commanded_process(hashmap * tracees, llist * tracee_list,
hmap_remove_abs(tracees, pid);
print_tracee_list(tracee_list);
// Exit is still not fully complete. need to do this to complete it.


errno = 0;
ret = ptrace(PTRACE_DETACH, pid, 0, SIGCHLD);

LOG("Ptrace Detach: ret: %d, errno: %d\n", ret, errno);
LOG("Process: %d, EXITED\n", pid);
if (curr_tracee->pd != NULL)
libperf_finalize(curr_tracee->pd, 0);


free(curr_tracee);
return TID_EXITED;
return TID_IGNORE_PROCESS;

default: return SUCCESS;

Expand Down Expand Up @@ -1281,6 +1282,7 @@ int main(int argc, char * argv[]) {
if (!hmap_get_abs(&tracees,
processes_pids[i])) {
ignored_pids[j] = processes_pids[i];
printf("Ignoring PID: %d\n", ignored_pids[j]);
j++;
}
}
Expand Down

0 comments on commit 36750c5

Please sign in to comment.