After Width: | Height: | Size: 105 KiB |
After Width: | Height: | Size: 304 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 5.0 KiB |
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 9c30d84d708d9713ac1990330f033189c3d88b39
|
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 3507d3d0001db45eedbb65072f5fe7cad8bcb59b
|
@ -0,0 +1,59 @@
|
|||||||
|
include Makefile.inc
|
||||||
|
|
||||||
|
#TESTS=fibonacci fibonacci2 fibonacci3 big_fibonacci C-Image-Manip empty work work1k work10k work100k work1m forever filesys sockserver sockclient empty
|
||||||
|
TESTS=fibonacci big_fibonacci C-Image-Manip empty work work1k work10k work100k work1m forever filesys sockserver sockclient empty
|
||||||
|
|
||||||
|
|
||||||
|
TESTSRT=$(TESTS:%=%_rt)
|
||||||
|
|
||||||
|
.PHONY: all clean rttests tinyekf cifar10 gocr sod
|
||||||
|
|
||||||
|
all: rttests tinyekf cifar10 gocr sod
|
||||||
|
@echo "Test Compilation done!"
|
||||||
|
|
||||||
|
rttests: $(TESTSRT)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@echo "Cleaning Test Applications"
|
||||||
|
@rm -rf ${TMP_DIR}
|
||||||
|
@rm -rf ${SLEDGE_BIN_DIR}/*_wasm.so
|
||||||
|
@make clean -C ./TinyEKF/extras/c/ -f wasm.mk
|
||||||
|
@make clean -C ./CMSIS_5_NN/ -f Makefile
|
||||||
|
@make clean -C ./gocr/src/ -f wasm.mk
|
||||||
|
@make clean -C ./sod/
|
||||||
|
|
||||||
|
tinyekf:
|
||||||
|
@echo "Making and Installing tinyekf"
|
||||||
|
@make gps_ekf_fn.so -C ./TinyEKF/extras/c/ -f wasm.mk
|
||||||
|
@cp ./TinyEKF/extras/c/gps_ekf_fn.so ${SLEDGE_BIN_DIR}/ekf_wasm.so
|
||||||
|
|
||||||
|
cifar10:
|
||||||
|
@echo "Making and Installing cifar10"
|
||||||
|
@make cifar10.so -C ./CMSIS_5_NN/ -f Makefile
|
||||||
|
@cp ./CMSIS_5_NN/cifar10.so ${SLEDGE_BIN_DIR}/cifar10_wasm.so
|
||||||
|
|
||||||
|
gocr:
|
||||||
|
@echo "Making and Installing gocr"
|
||||||
|
@make gocr.so -C ./gocr/src/ -f wasm.mk
|
||||||
|
@cp ./gocr/src/gocr.so ${SLEDGE_BIN_DIR}/gocr_wasm.so
|
||||||
|
|
||||||
|
sod:
|
||||||
|
@echo "Making and Installing license_plate_detection and image_resize"
|
||||||
|
@make dir samples.so -C ./sod/
|
||||||
|
@cp ./sod/bin/license_plate_detection.so ${SLEDGE_BIN_DIR}/lpd_wasm.so
|
||||||
|
@cp ./sod/bin/resize_image.so ${SLEDGE_BIN_DIR}/resize_wasm.so
|
||||||
|
|
||||||
|
C-Image-Manip:
|
||||||
|
@echo "Making and Installing pngPlay"
|
||||||
|
@make pngPlay.so -C ./C-Image-Manip -f Makefile
|
||||||
|
@cp ./C-Image-Manip/pngPlay.so ${SLEDGE_BIN_DIR}/pngPlay_wasm.so
|
||||||
|
|
||||||
|
%_rt:
|
||||||
|
@mkdir -p ${TMP_DIR}
|
||||||
|
@echo "Compiling $(@:%_rt=%)"
|
||||||
|
${WASMCC} ${$(@:%_rt=%)_CFLAGS} ${WASMCFLAGS} ${OPTFLAGS} $(@:%_rt=%)/*.c $(AWSM_DUMMY) -o ${TMP_DIR}/$(@:%_rt=%).wasm
|
||||||
|
${AWSM_NAME} --inline-constant-globals --runtime-globals ${TMP_DIR}/$(@:%_rt=%).wasm -o ${TMP_DIR}/$(@:%_rt=%).bc
|
||||||
|
${CC} --shared -fPIC ${OPTFLAGS} -I${SLEDGE_RT_INC} -D${USE_MEM} ${TMP_DIR}/$(@:%_rt=%).bc ${SLEDGE_MEMC} ${SLEDGE_WASMISA} -o ${TMP_DIR}/$(@:%_rt=%)_wasm.so
|
||||||
|
@cp ${TMP_DIR}/$(@:%_rt=%)_wasm.so ${SLEDGE_BIN_DIR}
|
||||||
|
# @rm -rf ${TMP_DIR}
|
||||||
|
|
@ -0,0 +1,43 @@
|
|||||||
|
ARCH := $(shell uname -m)
|
||||||
|
|
||||||
|
CC=clang # Source -> Native
|
||||||
|
WASMCC=wasm32-unknown-unknown-wasm-clang # Source -> WebAssembly
|
||||||
|
|
||||||
|
OPTFLAGS=-O3 -flto
|
||||||
|
# OPTFLAGS=-O0 -flto -g
|
||||||
|
MEMC_64=64bit_nix.c
|
||||||
|
# MEMC_NO=no_protection.c
|
||||||
|
# MEMC_GEN=generic.c
|
||||||
|
# MEMC_MPX=mpx.c
|
||||||
|
# MEMC_SEG=segmented.c
|
||||||
|
TMP_DIR=tmp/
|
||||||
|
|
||||||
|
# same stack-size for all
|
||||||
|
WASMLINKFLAGS=-Wl,-z,stack-size=524288,--allow-undefined,--no-threads,--stack-first,--no-entry,--export-all,--export=main,--export=dummy
|
||||||
|
WASMCFLAGS=${WASMLINKFLAGS} -nostartfiles
|
||||||
|
|
||||||
|
# aWsm Compiler Runtime (WebAssembly -> LLVM Bitcode)
|
||||||
|
AWSM_NAME=awsm
|
||||||
|
AWSM_BASE_DIR=../../${AWSM_NAME}
|
||||||
|
AWSM_RT_DIR=${AWSM_BASE_DIR}/runtime/
|
||||||
|
AWSM_RT_MEM=${AWSM_RT_DIR}/memory/
|
||||||
|
AWSM_RT_LIBC=${AWSM_RT_DIR}/libc/libc_backing.c
|
||||||
|
AWSM_RT_RT=${AWSM_RT_DIR}/runtime.c
|
||||||
|
AWSM_RT_ENV=${AWSM_RT_DIR}/libc/env.c
|
||||||
|
# Is seems like the arch specific code no longer exists
|
||||||
|
# AWSM_RT_ENV=${AWSM_RT_DIR}/libc/env.c ${AWSM_RT_DIR}/libc/env_${ARCH}.c
|
||||||
|
AWSM_MEMC=${AWSM_RT_MEM}/${MEMC_64}
|
||||||
|
AWSM_DUMMY=${AWSM_BASE_DIR}/code_benches/dummy.c
|
||||||
|
|
||||||
|
# for SLEdge
|
||||||
|
SLEDGE_BASE_DIR=../../
|
||||||
|
SLEDGE_RT_DIR=${SLEDGE_BASE_DIR}/runtime/
|
||||||
|
SLEDGE_RT_INC=${SLEDGE_RT_DIR}/include/
|
||||||
|
SLEDGE_BIN_DIR=${SLEDGE_RT_DIR}/bin/
|
||||||
|
SLEDGE_WASMISA=${SLEDGE_RT_DIR}/compiletime/instr.c
|
||||||
|
|
||||||
|
USE_MEM=USE_MEM_VM
|
||||||
|
|
||||||
|
ifeq ($(USE_MEM),USE_MEM_VM)
|
||||||
|
SLEDGE_MEMC=${SLEDGE_RT_DIR}/compiletime/memory/${MEMC_64}
|
||||||
|
endif
|
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 76daf1da0546dd04896f20ae630cdeea0280c095
|
@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Executes the runtime in GDB
|
||||||
|
# Substitutes the absolute path from the container with a path relatively derived from the location of this script
|
||||||
|
# This allows debugging outside of the Docker container
|
||||||
|
# Also disables pagination and stopping on SIGUSR1
|
||||||
|
|
||||||
|
# We are currently unclear why the image classifier isn't working properly
|
||||||
|
# Both bmp and png formats are added to the repo while debugging
|
||||||
|
# file_type=bmp
|
||||||
|
# file_type=png
|
||||||
|
file_type=jpg
|
||||||
|
batch_id=0
|
||||||
|
for class in airplane automobile bird cat deer dog frog horse ship truck; do
|
||||||
|
for instance in 1 2 3 4 5 6 7 8 9 10; do
|
||||||
|
echo "Classifying $class$instance.$file_type"
|
||||||
|
#curl -H 'Expect:' -H "Content-Type: Image/$file_type" --data-binary "@images/$file_type/$class$instance.$file_type" localhost:10000 2> /dev/null
|
||||||
|
hey -disable-compression -disable-keepalive -disable-redirects -c 1 -z 60s -cpus 1 -t 0 -m GET -D "images/$file_type/$class$instance.$file_type" "http://10.10.1.1:10000" > "client_$batch_id.txt" &
|
||||||
|
((batch_id++))
|
||||||
|
done
|
||||||
|
done
|
||||||
|
pids=$(pgrep hey | tr '\n' ' ')
|
||||||
|
[[ -n $pids ]] && wait -f $pids
|
||||||
|
printf "[OK]\n"
|
||||||
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Executes the runtime in GDB
|
||||||
|
# Substitutes the absolute path from the container with a path relatively derived from the location of this script
|
||||||
|
# This allows debugging outside of the Docker container
|
||||||
|
# Also disables pagination and stopping on SIGUSR1
|
||||||
|
|
||||||
|
# We are currently unclear why the image classifier isn't working properly
|
||||||
|
# Both bmp and png formats are added to the repo while debugging
|
||||||
|
# file_type=bmp
|
||||||
|
# file_type=png
|
||||||
|
file_type=jpg
|
||||||
|
batch_id=0
|
||||||
|
for image in airplane_0688.jpg car_0931.jpg car_0936.jpg cat_0865.jpg dog_0323.jpg dog_0658.jpg flower_0790.jpg motorbike_0334.jpg motorbike_0684.jpg motorbike_0706.jpg; do
|
||||||
|
for instance in 1 2 3; do
|
||||||
|
echo "Classifying $image"
|
||||||
|
#curl -H 'Expect:' -H "Content-Type: Image/$file_type" --data-binary "@images/$file_type/$class$instance.$file_type" localhost:10000 2> /dev/null
|
||||||
|
hey -disable-compression -disable-keepalive -disable-redirects -c 1 -z 120s -cpus 1 -t 0 -m GET -D "sample_images/$image" "http://10.10.1.1:10000" > "client_$batch_id.txt" &
|
||||||
|
((batch_id++))
|
||||||
|
done
|
||||||
|
done
|
||||||
|
pids=$(pgrep hey | tr '\n' ' ')
|
||||||
|
[[ -n $pids ]] && wait -f $pids
|
||||||
|
printf "[OK]\n"
|
||||||
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Executes the runtime in GDB
|
||||||
|
# Substitutes the absolute path from the container with a path relatively derived from the location of this script
|
||||||
|
# This allows debugging outside of the Docker container
|
||||||
|
# Also disables pagination and stopping on SIGUSR1
|
||||||
|
|
||||||
|
# We are currently unclear why the image classifier isn't working properly
|
||||||
|
# Both bmp and png formats are added to the repo while debugging
|
||||||
|
# file_type=bmp
|
||||||
|
# file_type=png
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "$0 [image_folder_path]"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# != 1 ] ; then
|
||||||
|
usage
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
batch_id=0
|
||||||
|
|
||||||
|
path=$1
|
||||||
|
files=$(ls $path)
|
||||||
|
|
||||||
|
for image in $files; do
|
||||||
|
for instance in 1; do
|
||||||
|
echo "Classifying $image"
|
||||||
|
#curl -H 'Expect:' -H "Content-Type: Image/$file_type" --data-binary "@images/$file_type/$class$instance.$file_type" localhost:10000 2> /dev/null
|
||||||
|
hey -disable-compression -disable-keepalive -disable-redirects -c 1 -z 120s -cpus 1 -t 0 -m GET -D "$path/$image" "http://10.10.1.1:10000" > "client_$batch_id.txt" &
|
||||||
|
((batch_id++))
|
||||||
|
done
|
||||||
|
done
|
||||||
|
pids=$(pgrep hey | tr '\n' ' ')
|
||||||
|
[[ -n $pids ]] && wait -f $pids
|
||||||
|
printf "[OK]\n"
|
||||||
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
#ifndef GET_TIME_H
|
||||||
|
#define GET_TIME_H
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifndef WASM
|
||||||
|
#ifndef CPU_FREQ
|
||||||
|
#define CPU_FREQ 1000
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static unsigned long long
|
||||||
|
get_time()
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
unsigned long long int ret = 0;
|
||||||
|
unsigned int cycles_lo;
|
||||||
|
unsigned int cycles_hi;
|
||||||
|
__asm__ volatile ("rdtsc" : "=a" (cycles_lo), "=d" (cycles_hi));
|
||||||
|
ret = (unsigned long long int)cycles_hi << 32 | cycles_lo;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
#else
|
||||||
|
struct timeval Tp;
|
||||||
|
int stat;
|
||||||
|
stat = gettimeofday(&Tp, NULL);
|
||||||
|
if (stat != 0) printf("Error return from gettimeofday: %d", stat);
|
||||||
|
return (Tp.tv_sec * 1000000 + Tp.tv_usec);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
print_time(unsigned long long s, unsigned long long e)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
printf("%llu cycs, %llu us\n", e - s, (e - s) / CPU_FREQ);
|
||||||
|
#else
|
||||||
|
fprintf(stdout, "%llu us\n", e - s);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* GET_TIME_H */
|
@ -0,0 +1,177 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
// #include "get_time.h"
|
||||||
|
volatile unsigned long g_v = 0;
|
||||||
|
unsigned long int
|
||||||
|
/*fib(unsigned long int n)
|
||||||
|
{
|
||||||
|
if (n <= 1) return n;
|
||||||
|
return fib(n + g_v - 1) + fib(n + g_v - 2);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
fib(unsigned long int n)
|
||||||
|
{
|
||||||
|
if (n <= 1) return n;
|
||||||
|
return fib(n - 1) + fib(n - 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
char * array = NULL;
|
||||||
|
unsigned long n = 0, r,r2,r3,r4,r5,r6,r7,r8,r9,r10;
|
||||||
|
scanf("%lu", &n);
|
||||||
|
// unsigned long long st = get_time(), en;
|
||||||
|
r = fib(n);
|
||||||
|
r2 = fib(n+1);
|
||||||
|
r3 = fib(n+2);
|
||||||
|
r4 = fib(n+3);
|
||||||
|
r5 = fib(n+4);
|
||||||
|
r6 = fib(n+5);
|
||||||
|
r7 = fib(n+6);
|
||||||
|
r8 = fib(n+7);
|
||||||
|
r9 = fib(n+8);
|
||||||
|
r10 = fib(n+9);
|
||||||
|
/*switch(n) {
|
||||||
|
case 0: {
|
||||||
|
array = malloc(4 * 1024);
|
||||||
|
memset(array, 'a', 4 * 1024 - 1);
|
||||||
|
array[4 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1: {
|
||||||
|
array = malloc(100 * 1024);
|
||||||
|
memset(array, 'b', 100 * 1024 - 1);
|
||||||
|
array[100 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2: {
|
||||||
|
array = malloc(200 * 1024);
|
||||||
|
memset(array, 'g', 200 * 1024 - 1);
|
||||||
|
array[200 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4: {
|
||||||
|
array = malloc(400 * 1024);
|
||||||
|
memset(array, 'c', 400 * 1024 - 1);
|
||||||
|
array[400 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 6: {
|
||||||
|
array = malloc(600 * 1024);
|
||||||
|
memset(array, 'd', 600 * 1024 - 1);
|
||||||
|
array[600 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 8: {
|
||||||
|
array = malloc(800 * 1024);
|
||||||
|
memset(array, 'e', 800 * 1024 - 1);
|
||||||
|
array[800 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 10:{
|
||||||
|
array = malloc(1000 * 1024);
|
||||||
|
memset(array, 'f', 1000 * 1024 - 1);
|
||||||
|
array[1000 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: printf("error input of n\n");
|
||||||
|
}*/
|
||||||
|
// en = get_time();
|
||||||
|
printf("%lu \n", n+10);
|
||||||
|
printf("%lu \n", r10);
|
||||||
|
printf("%lu \n", r9);
|
||||||
|
printf("%lu \n", r8);
|
||||||
|
printf("%lu \n", r7);
|
||||||
|
printf("%lu \n", r6);
|
||||||
|
printf("%lu \n", r5);
|
||||||
|
printf("%lu \n", r4);
|
||||||
|
printf("%lu \n", r3);
|
||||||
|
printf("%lu \n", r2);
|
||||||
|
printf("%lu \n", r);
|
||||||
|
// print_time(st, en);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
unsigned long n = 0, r = 0;
|
||||||
|
scanf("%lu", &n);
|
||||||
|
switch(n) {
|
||||||
|
case 0: {
|
||||||
|
char array[4 * 1024] = {0};
|
||||||
|
memset(array, 'a', 4 * 1024);
|
||||||
|
array[4 * 1024 - 1] = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1: {
|
||||||
|
char array[100 * 1024] = {'b'};
|
||||||
|
memset(array, 'b', 100 * 1024);
|
||||||
|
array[100 * 1024 - 1] = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2: {
|
||||||
|
char array[200 * 1024] = {'c'};
|
||||||
|
memset(array, 'c', 200 * 1024);
|
||||||
|
array[200 * 1024 - 1] = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4: {
|
||||||
|
char array[400 * 1024] = {'d'};
|
||||||
|
memset(array, 'd', 400 * 1024);
|
||||||
|
array[400 * 1024 - 1] = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 6: {
|
||||||
|
char array[600 * 1024] = {'e'};
|
||||||
|
memset(array, 'e', 600 * 1024);
|
||||||
|
array[600 * 1024 - 1] = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 8: {
|
||||||
|
char array[800 * 1024] = {'f'};
|
||||||
|
memset(array, 'f', 800 * 1024);
|
||||||
|
array[800 * 1024 - 1] = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 10:{
|
||||||
|
char array[1000 * 1024] = {'g'};
|
||||||
|
memset(array, 'g', 1000 * 1024);
|
||||||
|
array[1000 * 1024 - 1] = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: printf("error input of n\n");
|
||||||
|
}
|
||||||
|
// unsigned long long st = get_time(), en;
|
||||||
|
printf("%lu \n", r);
|
||||||
|
// print_time(st, en);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*/
|
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
ITERS=$3
|
||||||
|
|
||||||
|
# before running this benchmark,
|
||||||
|
# copy fibonacci to fibonacci_native.out
|
||||||
|
|
||||||
|
testeach() {
|
||||||
|
tmp_cnt=${ITERS}
|
||||||
|
exe_relpath=$1
|
||||||
|
|
||||||
|
echo "${exe_relpath} ($2) for ${tmp_cnt}"
|
||||||
|
|
||||||
|
while [ ${tmp_cnt} -gt 0 ]; do
|
||||||
|
bench=$(echo $2 | $exe_relpath 2> /dev/null)
|
||||||
|
tmp_cnt=$((tmp_cnt - 1))
|
||||||
|
echo "$bench"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Done!"
|
||||||
|
}
|
||||||
|
|
||||||
|
MAXNUM=$2
|
||||||
|
|
||||||
|
tmp1_cnt=${MAXNUM}
|
||||||
|
|
||||||
|
while [ ${tmp1_cnt} -gt 28 ]; do
|
||||||
|
testeach ./fibonacci_$1.out ${tmp1_cnt}
|
||||||
|
tmp1_cnt=$((tmp1_cnt - 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "All done!"
|
@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
function usage {
|
||||||
|
echo "$0 [prefix] [port] [times] "
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# != 3 ] ; then
|
||||||
|
usage
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
prefix=$1
|
||||||
|
port=$2
|
||||||
|
time=$3
|
||||||
|
|
||||||
|
path="/users/xiaosuGW/sledge-serverless-framework/runtime/tests"
|
||||||
|
chmod 400 $path/id_rsa
|
||||||
|
|
||||||
|
input=0
|
||||||
|
server_log="fibnacci_"$prefix".log"
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/start.sh $server_log >/dev/null 2>&1 &"
|
||||||
|
|
||||||
|
hey -c 1 -z 60s -disable-keepalive -m GET -d $input "http://10.10.1.1:$port" > $prefix"_"$time".txt"
|
||||||
|
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/kill_sledge.sh"
|
||||||
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
function usage {
|
||||||
|
echo "$0 [chain length] [repeat times]"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# != 2 ] ; then
|
||||||
|
usage
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
chain_len=$1
|
||||||
|
repeat_t=$2
|
||||||
|
|
||||||
|
server_log="noop_"$chain_len".log"
|
||||||
|
log="noop"$chain_len"-"$repeat_t".txt"
|
||||||
|
start_script="start-noop"$chain_len".sh"
|
||||||
|
echo $start_script
|
||||||
|
path="/users/xiaosuGW/sledge-serverless-framework/runtime/tests"
|
||||||
|
chmod 400 $path/id_rsa
|
||||||
|
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/$start_script $server_log >/dev/null 2>&1 &"
|
||||||
|
|
||||||
|
hey -c 1 -z 60s -disable-keepalive -m GET -d 29 "http://10.10.1.1:10000" > $log 2>&1 &
|
||||||
|
pid1=$!
|
||||||
|
wait -f $pid1
|
||||||
|
|
||||||
|
printf "[OK]\n"
|
||||||
|
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/kill_sledge.sh"
|
||||||
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
pushd loadtest
|
||||||
|
./one_shoot.sh
|
||||||
|
popd
|
||||||
|
|
||||||
|
pushd srsf_loadtest
|
||||||
|
./one_shoot.sh
|
||||||
|
popd
|
||||||
|
|
||||||
|
|
||||||
|
pushd loadtest_p80
|
||||||
|
./one_shoot.sh
|
||||||
|
popd
|
||||||
|
|
@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "$0 [loop count]"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# != 1 ] ; then
|
||||||
|
usage
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
loop_count=$1
|
||||||
|
|
||||||
|
for ((i=1; i <=$loop_count; i++))
|
||||||
|
do
|
||||||
|
for ((j=1; j <=5; j++))
|
||||||
|
do
|
||||||
|
./noop.sh $j $i
|
||||||
|
done
|
||||||
|
done
|
@ -0,0 +1,69 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
function usage {
|
||||||
|
echo "$0 [prefix] [port] [times] "
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# != 3 ] ; then
|
||||||
|
usage
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
prefix=$1
|
||||||
|
port=$2
|
||||||
|
time=$3
|
||||||
|
|
||||||
|
path="/users/xiaosuGW/sledge-serverless-framework/runtime/tests"
|
||||||
|
chmod 400 $path/id_rsa
|
||||||
|
|
||||||
|
input=0
|
||||||
|
server_log="mem_copy_"$input".log"
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/start.sh $server_log >/dev/null 2>&1 &"
|
||||||
|
|
||||||
|
hey -c 1 -z 60s -disable-keepalive -m GET -d $input "http://10.10.1.1:$port" > $prefix"_"$input"-"$time.txt
|
||||||
|
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/kill_sledge.sh"
|
||||||
|
|
||||||
|
input=1
|
||||||
|
server_log="mem_copy_"$input".log"
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/start.sh $server_log >/dev/null 2>&1 &"
|
||||||
|
hey -c 1 -z 60s -disable-keepalive -m GET -d $input "http://10.10.1.1:$port" > $prefix"_"$input"-"$time.txt
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/kill_sledge.sh"
|
||||||
|
|
||||||
|
input=2
|
||||||
|
server_log="mem_copy_"$input".log"
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/start.sh $server_log >/dev/null 2>&1 &"
|
||||||
|
hey -c 1 -z 60s -disable-keepalive -m GET -d $input "http://10.10.1.1:$port" > $prefix"_"$input"-"$time.txt
|
||||||
|
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/kill_sledge.sh"
|
||||||
|
|
||||||
|
input=4
|
||||||
|
server_log="mem_copy_"$input".log"
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/start.sh $server_log >/dev/null 2>&1 &"
|
||||||
|
hey -c 1 -z 60s -disable-keepalive -m GET -d $input "http://10.10.1.1:$port" > $prefix"_"$input"-"$time.txt
|
||||||
|
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/kill_sledge.sh"
|
||||||
|
|
||||||
|
input=6
|
||||||
|
server_log="mem_copy_"$input".log"
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/start.sh $server_log >/dev/null 2>&1 &"
|
||||||
|
hey -c 1 -z 60s -disable-keepalive -m GET -d $input "http://10.10.1.1:$port" > $prefix"_"$input"-"$time.txt
|
||||||
|
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/kill_sledge.sh"
|
||||||
|
|
||||||
|
input=8
|
||||||
|
server_log="mem_copy_"$input".log"
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/start.sh $server_log >/dev/null 2>&1 &"
|
||||||
|
hey -c 1 -z 60s -disable-keepalive -m GET -d $input "http://10.10.1.1:$port" > $prefix"_"$input"-"$time.txt
|
||||||
|
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/kill_sledge.sh"
|
||||||
|
|
||||||
|
input=10
|
||||||
|
server_log="mem_copy_"$input".log"
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/start.sh $server_log >/dev/null 2>&1 &"
|
||||||
|
hey -c 1 -z 60s -disable-keepalive -m GET -d $input "http://10.10.1.1:$port" > $prefix"_"$input"-"$time.txt
|
||||||
|
|
||||||
|
ssh -o stricthostkeychecking=no -i $path/id_rsa xiaosuGW@10.10.1.1 "$path/kill_sledge.sh"
|
||||||
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "$0 [loop count]"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# != 1 ] ; then
|
||||||
|
usage
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
loop_count=$1
|
||||||
|
|
||||||
|
for ((i=1; i <=$loop_count; i++))
|
||||||
|
do
|
||||||
|
./test_mem_copy.sh chain 10004 $i
|
||||||
|
#./test_mem_copy.sh single 10003 $i
|
||||||
|
#./cpu_insensive.sh chain 10009 $i
|
||||||
|
#./cpu_insensive.sh single 10003 $i
|
||||||
|
done
|
||||||
|
|
@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Executes the runtime in GDB
|
||||||
|
# Substitutes the absolute path from the container with a path relatively derived from the location of this script
|
||||||
|
# This allows debugging outside of the Docker container
|
||||||
|
# Also disables pagination and stopping on SIGUSR1
|
||||||
|
|
||||||
|
declare project_path="$(
|
||||||
|
cd "$(dirname "$1")/../.."
|
||||||
|
pwd
|
||||||
|
)"
|
||||||
|
path=`pwd`
|
||||||
|
echo $project_path
|
||||||
|
cd $project_path/runtime/bin
|
||||||
|
export SLEDGE_SCHEDULER=SRSF
|
||||||
|
#export SLEDGE_DISABLE_PREEMPTION=true
|
||||||
|
export SLEDGE_SANDBOX_PERF_LOG=$path/srsf.log
|
||||||
|
export LD_LIBRARY_PATH="$(pwd):$LD_LIBRARY_PATH"
|
||||||
|
gdb --eval-command="handle SIGUSR1 nostop" \
|
||||||
|
--eval-command="set pagination off" \
|
||||||
|
--eval-command="set substitute-path /sledge/runtime $project_path/runtime" \
|
||||||
|
--eval-command="run ../tests/test_multiple_image_processing2.json" \
|
||||||
|
./sledgert
|
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 7.2 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 9.9 KiB |
After Width: | Height: | Size: 73 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 108 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 304 KiB |
After Width: | Height: | Size: 209 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 9.6 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 108 KiB |
@ -0,0 +1,11 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
printf("S\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
#ifndef GET_TIME_H
|
||||||
|
#define GET_TIME_H
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifndef WASM
|
||||||
|
#ifndef CPU_FREQ
|
||||||
|
#define CPU_FREQ 1000
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static unsigned long long
|
||||||
|
get_time()
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
unsigned long long int ret = 0;
|
||||||
|
unsigned int cycles_lo;
|
||||||
|
unsigned int cycles_hi;
|
||||||
|
__asm__ volatile ("rdtsc" : "=a" (cycles_lo), "=d" (cycles_hi));
|
||||||
|
ret = (unsigned long long int)cycles_hi << 32 | cycles_lo;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
#else
|
||||||
|
struct timeval Tp;
|
||||||
|
int stat;
|
||||||
|
stat = gettimeofday(&Tp, NULL);
|
||||||
|
if (stat != 0) printf("Error return from gettimeofday: %d", stat);
|
||||||
|
return (Tp.tv_sec * 1000000 + Tp.tv_usec);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
print_time(unsigned long long s, unsigned long long e)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
printf("%llu cycs, %llu us\n", e - s, (e - s) / CPU_FREQ);
|
||||||
|
#else
|
||||||
|
fprintf(stdout, "%llu us\n", e - s);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* GET_TIME_H */
|
@ -0,0 +1,178 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
// #include "get_time.h"
|
||||||
|
volatile unsigned long g_v = 0;
|
||||||
|
unsigned long int
|
||||||
|
/*fib(unsigned long int n)
|
||||||
|
{
|
||||||
|
if (n <= 1) return n;
|
||||||
|
return fib(n + g_v - 1) + fib(n + g_v - 2);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
fib(unsigned long int n)
|
||||||
|
{
|
||||||
|
if (n <= 1) return n;
|
||||||
|
return fib(n - 1) + fib(n - 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
//int
|
||||||
|
//main(int argc, char **argv)
|
||||||
|
//{
|
||||||
|
// char * array = NULL;
|
||||||
|
// unsigned long n = 0, r;
|
||||||
|
// scanf("%lu", &n);
|
||||||
|
// unsigned long long st = get_time(), en;
|
||||||
|
// r = fib(n);
|
||||||
|
// en = get_time();
|
||||||
|
/*switch(n) {
|
||||||
|
case 0: {
|
||||||
|
array = malloc(4 * 1024);
|
||||||
|
memset(array, 'a', 4 * 1024 - 1);
|
||||||
|
array[4 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1: {
|
||||||
|
array = malloc(100 * 1024);
|
||||||
|
memset(array, 'b', 100 * 1024 - 1);
|
||||||
|
array[100 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2: {
|
||||||
|
array = malloc(200 * 1024);
|
||||||
|
memset(array, 'g', 200 * 1024 - 1);
|
||||||
|
array[200 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4: {
|
||||||
|
array = malloc(400 * 1024);
|
||||||
|
memset(array, 'c', 400 * 1024 - 1);
|
||||||
|
array[400 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 6: {
|
||||||
|
array = malloc(600 * 1024);
|
||||||
|
memset(array, 'd', 600 * 1024 - 1);
|
||||||
|
array[600 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 8: {
|
||||||
|
array = malloc(800 * 1024);
|
||||||
|
memset(array, 'e', 800 * 1024 - 1);
|
||||||
|
array[800 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 10:{
|
||||||
|
array = malloc(1000 * 1024);
|
||||||
|
memset(array, 'f', 1000 * 1024 - 1);
|
||||||
|
array[1000 * 1024 - 1] = 0;
|
||||||
|
printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: printf("error input of n\n");
|
||||||
|
}
|
||||||
|
free(array);*/
|
||||||
|
//printf("%lu\n", n);
|
||||||
|
// printf("%lu\n", n+1);
|
||||||
|
// printf("%lu\n", r);
|
||||||
|
|
||||||
|
//return 0;
|
||||||
|
//}
|
||||||
|
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
unsigned long n = 0, r;
|
||||||
|
scanf("%lu", &n);
|
||||||
|
FILE *f = stdout;
|
||||||
|
// unsigned long long st = get_time(), en;
|
||||||
|
//r = fib(29);
|
||||||
|
// en = get_time();
|
||||||
|
switch(n) {
|
||||||
|
case 0: {
|
||||||
|
char array[4 * 1024] = {0};
|
||||||
|
memset(array, 'a', 4 * 1024);
|
||||||
|
array[4 * 1024 - 1] = 0;
|
||||||
|
//printf("%s\n", array);
|
||||||
|
fwrite(array, 1, 4 * 1024 - 1, f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1: {
|
||||||
|
char array[100 * 1024] = {'b'};
|
||||||
|
memset(array, 'b', 100 * 1024);
|
||||||
|
array[100 * 1024 - 1] = 0;
|
||||||
|
//printf("%s\n", array);
|
||||||
|
fwrite(array, 1, 100 * 1024 - 1, f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2: {
|
||||||
|
char array[200 * 1024] = {'c'};
|
||||||
|
memset(array, 'c', 200 * 1024);
|
||||||
|
array[200 * 1024 - 1] = 0;
|
||||||
|
fwrite(array, 1, 200 * 1024 - 1, f);
|
||||||
|
//printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4: {
|
||||||
|
char array[400 * 1024] = {'d'};
|
||||||
|
memset(array, 'd', 400 * 1024);
|
||||||
|
array[400 * 1024 - 1] = 0;
|
||||||
|
fwrite(array, 1, 400 * 1024 - 1, f);
|
||||||
|
//printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 6: {
|
||||||
|
char array[600 * 1024] = {'e'};
|
||||||
|
memset(array, 'e', 600 * 1024);
|
||||||
|
array[600 * 1024 - 1] = 0;
|
||||||
|
fwrite(array, 1, 600 * 1024 - 1, f);
|
||||||
|
//printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 8: {
|
||||||
|
char array[800 * 1024] = {'f'};
|
||||||
|
memset(array, 'f', 800 * 1024);
|
||||||
|
array[800 * 1024 - 1] = 0;
|
||||||
|
fwrite(array, 1, 800 * 1024 - 1, f);
|
||||||
|
//printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 10:{
|
||||||
|
char array[1000 * 1024] = {'g'};
|
||||||
|
memset(array, 'g', 1000 * 1024);
|
||||||
|
array[1000 * 1024 - 1] = 0;
|
||||||
|
fwrite(array, 1, 1000 * 1024 - 1, f);
|
||||||
|
//printf("%s\n", array);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: printf("error input of n\n");
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
//printf("%lu\n", n);
|
||||||
|
//printf("%lu\n", r);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
ITERS=$3
|
||||||
|
|
||||||
|
# before running this benchmark,
|
||||||
|
# copy fibonacci to fibonacci_native.out
|
||||||
|
|
||||||
|
testeach() {
|
||||||
|
tmp_cnt=${ITERS}
|
||||||
|
exe_relpath=$1
|
||||||
|
|
||||||
|
echo "${exe_relpath} ($2) for ${tmp_cnt}"
|
||||||
|
|
||||||
|
while [ ${tmp_cnt} -gt 0 ]; do
|
||||||
|
bench=$(echo $2 | $exe_relpath 2> /dev/null)
|
||||||
|
tmp_cnt=$((tmp_cnt - 1))
|
||||||
|
echo "$bench"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Done!"
|
||||||
|
}
|
||||||
|
|
||||||
|
MAXNUM=$2
|
||||||
|
|
||||||
|
tmp1_cnt=${MAXNUM}
|
||||||
|
|
||||||
|
while [ ${tmp1_cnt} -gt 28 ]; do
|
||||||
|
testeach ./fibonacci_$1.out ${tmp1_cnt}
|
||||||
|
tmp1_cnt=$((tmp1_cnt - 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "All done!"
|
@ -0,0 +1,44 @@
|
|||||||
|
#ifndef GET_TIME_H
|
||||||
|
#define GET_TIME_H
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifndef WASM
|
||||||
|
#ifndef CPU_FREQ
|
||||||
|
#define CPU_FREQ 1000
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static unsigned long long
|
||||||
|
get_time()
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
unsigned long long int ret = 0;
|
||||||
|
unsigned int cycles_lo;
|
||||||
|
unsigned int cycles_hi;
|
||||||
|
__asm__ volatile ("rdtsc" : "=a" (cycles_lo), "=d" (cycles_hi));
|
||||||
|
ret = (unsigned long long int)cycles_hi << 32 | cycles_lo;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
#else
|
||||||
|
struct timeval Tp;
|
||||||
|
int stat;
|
||||||
|
stat = gettimeofday(&Tp, NULL);
|
||||||
|
if (stat != 0) printf("Error return from gettimeofday: %d", stat);
|
||||||
|
return (Tp.tv_sec * 1000000 + Tp.tv_usec);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
print_time(unsigned long long s, unsigned long long e)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
printf("%llu cycs, %llu us\n", e - s, (e - s) / CPU_FREQ);
|
||||||
|
#else
|
||||||
|
fprintf(stdout, "%llu us\n", e - s);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* GET_TIME_H */
|
@ -0,0 +1,40 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
// #include "get_time.h"
|
||||||
|
unsigned long int
|
||||||
|
fib(unsigned long int n)
|
||||||
|
{
|
||||||
|
if (n <= 1) return n;
|
||||||
|
return fib(n - 1) + fib(n - 2);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
unsigned long r = 0;
|
||||||
|
//scanf("%s", recv_buf);
|
||||||
|
r = fib(30);
|
||||||
|
printf("%lu\n", r);
|
||||||
|
return 0;
|
||||||
|
}*/
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
//char * recv_buf = malloc(1024 * 1024);
|
||||||
|
char recv_buf[1024 * 1024] = {0};
|
||||||
|
//memset(recv_buf, 0, 1024 * 1024);
|
||||||
|
unsigned long r = 0;
|
||||||
|
//scanf("%s", recv_buf);
|
||||||
|
r = read(0, recv_buf, 1024 * 1024);
|
||||||
|
//size_t rd = read(0, recv_buf, 1000*1024);
|
||||||
|
//if (rd <= 0) return -1;
|
||||||
|
|
||||||
|
// unsigned long long st = get_time(), en;
|
||||||
|
//r = fib(30);
|
||||||
|
// en = get_time();
|
||||||
|
printf("%lu\n", r);
|
||||||
|
|
||||||
|
// print_time(st, en);
|
||||||
|
return 0;
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
ITERS=$3
|
||||||
|
|
||||||
|
# before running this benchmark,
|
||||||
|
# copy fibonacci to fibonacci_native.out
|
||||||
|
|
||||||
|
testeach() {
|
||||||
|
tmp_cnt=${ITERS}
|
||||||
|
exe_relpath=$1
|
||||||
|
|
||||||
|
echo "${exe_relpath} ($2) for ${tmp_cnt}"
|
||||||
|
|
||||||
|
while [ ${tmp_cnt} -gt 0 ]; do
|
||||||
|
bench=$(echo $2 | $exe_relpath 2> /dev/null)
|
||||||
|
tmp_cnt=$((tmp_cnt - 1))
|
||||||
|
echo "$bench"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Done!"
|
||||||
|
}
|
||||||
|
|
||||||
|
MAXNUM=$2
|
||||||
|
|
||||||
|
tmp1_cnt=${MAXNUM}
|
||||||
|
|
||||||
|
while [ ${tmp1_cnt} -gt 28 ]; do
|
||||||
|
testeach ./fibonacci_$1.out ${tmp1_cnt}
|
||||||
|
tmp1_cnt=$((tmp1_cnt - 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "All done!"
|
@ -0,0 +1,120 @@
|
|||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
|
|
||||||
|
#define BUF_MAX 44
|
||||||
|
#define RDWR_MAX 1
|
||||||
|
#if RDWR_MAX > 1
|
||||||
|
int
|
||||||
|
main(int argc, char **argv) __attribute__((optnone))
|
||||||
|
{
|
||||||
|
char buf[RDWR_MAX][BUF_MAX] = { 0 };
|
||||||
|
|
||||||
|
printf("%s enter [in:%s, out:%s]\n", argv[0], argv[1], argv[2]);
|
||||||
|
int fdr = open(argv[1], O_RDONLY, S_IRUSR | S_IRGRP);
|
||||||
|
if (fdr < 0) {
|
||||||
|
perror("fopen");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
int fdw = creat(argv[2], S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
|
||||||
|
if (fdw < 0) {
|
||||||
|
perror("creat");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int n = 0;
|
||||||
|
struct iovec iov[RDWR_MAX] = { 0 };
|
||||||
|
for (int i = 0; i < RDWR_MAX; i++) {
|
||||||
|
iov[i].iov_base = buf[i];
|
||||||
|
iov[i].iov_len = BUF_MAX;
|
||||||
|
}
|
||||||
|
while ((n = readv(fdr, iov, RDWR_MAX)) > 0) {
|
||||||
|
int wvcnt = n / BUF_MAX;
|
||||||
|
if (n % BUF_MAX) {
|
||||||
|
iov[wvcnt].iov_len = n % BUF_MAX;
|
||||||
|
wvcnt++;
|
||||||
|
}
|
||||||
|
if (writev(fdw, iov, wvcnt) != n) perror("writev");
|
||||||
|
|
||||||
|
memset(buf, 0, RDWR_MAX * BUF_MAX);
|
||||||
|
for (int i = 0; i < RDWR_MAX; i++) {
|
||||||
|
iov[i].iov_base = buf[i];
|
||||||
|
iov[i].iov_len = BUF_MAX;
|
||||||
|
}
|
||||||
|
n = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(fdr);
|
||||||
|
close(fdw);
|
||||||
|
|
||||||
|
printf("%s done\n", argv[0]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
int
|
||||||
|
main(int argc, char **argv) __attribute__((optnone))
|
||||||
|
{
|
||||||
|
char buf[BUF_MAX] = { 0 };
|
||||||
|
|
||||||
|
printf("%s enter [in:%s, out:%s]\n", argv[0], argv[1], argv[2]);
|
||||||
|
#ifdef USE_OPEN
|
||||||
|
int fdr = open(argv[1], O_RDONLY, S_IRUSR | S_IRGRP);
|
||||||
|
if (fdr < 0) {
|
||||||
|
perror("fopen");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
int fdw = creat(argv[2], S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
|
||||||
|
if (fdw < 0) {
|
||||||
|
perror("creat");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int n = 0;
|
||||||
|
while ((n = read(fdr, buf, BUF_MAX)) > 0) {
|
||||||
|
if (write(fdw, buf, n) != n) perror("write");
|
||||||
|
memset(buf, 0, BUF_MAX);
|
||||||
|
n = 0;
|
||||||
|
}
|
||||||
|
if (n < 0) perror("read");
|
||||||
|
|
||||||
|
close(fdr);
|
||||||
|
close(fdw);
|
||||||
|
|
||||||
|
#else
|
||||||
|
FILE *fpr = fopen(argv[1], "r");
|
||||||
|
if (!fpr) {
|
||||||
|
perror("fopen");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
FILE *fpw = fopen(argv[2], "w");
|
||||||
|
if (!fpw) {
|
||||||
|
perror("fopen");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!feof(fpr)) {
|
||||||
|
char *p = NULL;
|
||||||
|
if ((p = fgets(buf, BUF_MAX, fpr)) == NULL)
|
||||||
|
perror("fgets");
|
||||||
|
else {
|
||||||
|
if (fputs(p, fpw) < 0) perror("fputs");
|
||||||
|
p = NULL;
|
||||||
|
}
|
||||||
|
memset(buf, 0, BUF_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fpr);
|
||||||
|
fclose(fpw);
|
||||||
|
#endif
|
||||||
|
printf("%s done\n", argv[0]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,27 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define ITERS 50000000
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv) __attribute__((optnone))
|
||||||
|
{
|
||||||
|
printf("%s enter\n", argv[0]);
|
||||||
|
int n = 0, e = 1;
|
||||||
|
if (argc == 2) {
|
||||||
|
n = atoi(argv[1]);
|
||||||
|
if (n > 0) e = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (e || n > 0) {
|
||||||
|
int i = ITERS;
|
||||||
|
n--;
|
||||||
|
while (i-- > 0) {
|
||||||
|
int j = ITERS;
|
||||||
|
while (j-- > 0) __asm__ __volatile__("nop" : : : "memory");
|
||||||
|
}
|
||||||
|
printf("%s\n", argv[0]);
|
||||||
|
}
|
||||||
|
printf("%s done\n", argv[0]);
|
||||||
|
}
|
@ -0,0 +1,101 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "$0 [loop count]"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# != 1 ] ; then
|
||||||
|
usage
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
json_file="test_multiple_image_processing4.json"
|
||||||
|
rm -rf $json_file
|
||||||
|
touch $json_file
|
||||||
|
|
||||||
|
base_exec_time=(39287 96381 8173 23912)
|
||||||
|
base_port=10000
|
||||||
|
base_m_index=1
|
||||||
|
func1_base_name="resize"
|
||||||
|
func2_base_name="png2bmp"
|
||||||
|
func3_base_name="cifar10_"
|
||||||
|
|
||||||
|
loop_count=$1
|
||||||
|
|
||||||
|
for ((i=1; i <=$loop_count; i++))
|
||||||
|
do
|
||||||
|
for ((j=1; j <=4; j++))
|
||||||
|
do
|
||||||
|
#new_deadline=$((${base_exec_time[$j-1]} * ($i+1)))
|
||||||
|
new_deadline=$((${base_exec_time[$j-1]} * (2**$i)))
|
||||||
|
#new_deadline=$((${base_exec_time[$j-1]} * 4))
|
||||||
|
func1_new_name=$func1_base_name$base_m_index
|
||||||
|
func1_new_port=$base_port
|
||||||
|
base_port=$(($base_port + 1))
|
||||||
|
|
||||||
|
cat >> $json_file << EOF
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "$func1_new_name",
|
||||||
|
"path": "resize_wasm.so",
|
||||||
|
"port": $func1_new_port,
|
||||||
|
"relative-deadline-us": $new_deadline,
|
||||||
|
"argsize": 1,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/jpeg",
|
||||||
|
"http-req-size": 1024000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024000,
|
||||||
|
"http-resp-content-type": "image/png"
|
||||||
|
},
|
||||||
|
|
||||||
|
EOF
|
||||||
|
func2_new_name=$func2_base_name$base_m_index
|
||||||
|
func2_new_port=$base_port
|
||||||
|
base_port=$(($base_port + 1))
|
||||||
|
|
||||||
|
cat >> $json_file << EOF
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "$func2_new_name",
|
||||||
|
"path": "C-Image-Manip_wasm.so",
|
||||||
|
"port": $func2_new_port,
|
||||||
|
"relative-deadline-us": $new_deadline,
|
||||||
|
"argsize": 1,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/png",
|
||||||
|
"http-req-size": 4096000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 4096000,
|
||||||
|
"http-resp-content-type": "image/bmp"
|
||||||
|
},
|
||||||
|
|
||||||
|
EOF
|
||||||
|
func3_new_name=$func3_base_name$base_m_index
|
||||||
|
func3_new_port=$base_port
|
||||||
|
base_port=$(($base_port + 1))
|
||||||
|
|
||||||
|
cat >> $json_file << EOF
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "$func3_new_name",
|
||||||
|
"path": "cifar10_wasm.so",
|
||||||
|
"port": $func3_new_port,
|
||||||
|
"relative-deadline-us": $new_deadline,
|
||||||
|
"argsize": 1,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/bmp",
|
||||||
|
"http-req-size": 4096000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024,
|
||||||
|
"http-resp-content-type": "text/plain",
|
||||||
|
"tail-module": true
|
||||||
|
},
|
||||||
|
|
||||||
|
EOF
|
||||||
|
echo "$func1_new_name, $func1_new_port, $func2_new_name, $func2_new_port, $func3_new_name, $func3_new_port, $new_deadline"
|
||||||
|
base_m_index=$(($base_m_index + 1))
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
@ -0,0 +1,104 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "$0 [loop count]"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# != 1 ] ; then
|
||||||
|
usage
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
json_file="test_multiple_image_processing4.json"
|
||||||
|
rm -rf $json_file
|
||||||
|
touch $json_file
|
||||||
|
|
||||||
|
base_exec_time=(39287 96381 8173 23912)
|
||||||
|
base_port=10000
|
||||||
|
base_m_index=1
|
||||||
|
func1_base_name="resize"
|
||||||
|
func2_base_name="png2bmp"
|
||||||
|
func3_base_name="cifar10_"
|
||||||
|
|
||||||
|
deadline_times=(2 10)
|
||||||
|
loop_count=$1
|
||||||
|
|
||||||
|
for ((i=0; i <$loop_count; i++))
|
||||||
|
do
|
||||||
|
for ((j=1; j <=4; j++))
|
||||||
|
do
|
||||||
|
#new_deadline=$((${base_exec_time[$j-1]} * ($i+1)))
|
||||||
|
#new_deadline=$((${base_exec_time[$j-1]} * (2**$i)))
|
||||||
|
#new_deadline=$((${base_exec_time[$j-1]} * (2**($i*2 + 1))))
|
||||||
|
#new_deadline=$((${base_exec_time[$j-1]} * 4))
|
||||||
|
new_deadline=$((${base_exec_time[$j-1]} * ${deadline_times[$i]}))
|
||||||
|
func1_new_name=$func1_base_name$base_m_index
|
||||||
|
func1_new_port=$base_port
|
||||||
|
base_port=$(($base_port + 1))
|
||||||
|
|
||||||
|
cat >> $json_file << EOF
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "$func1_new_name",
|
||||||
|
"path": "resize_wasm.so",
|
||||||
|
"port": $func1_new_port,
|
||||||
|
"relative-deadline-us": $new_deadline,
|
||||||
|
"argsize": 1,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/jpeg",
|
||||||
|
"http-req-size": 1024000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024000,
|
||||||
|
"http-resp-content-type": "image/png"
|
||||||
|
},
|
||||||
|
|
||||||
|
EOF
|
||||||
|
func2_new_name=$func2_base_name$base_m_index
|
||||||
|
func2_new_port=$base_port
|
||||||
|
base_port=$(($base_port + 1))
|
||||||
|
|
||||||
|
cat >> $json_file << EOF
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "$func2_new_name",
|
||||||
|
"path": "C-Image-Manip_wasm.so",
|
||||||
|
"port": $func2_new_port,
|
||||||
|
"relative-deadline-us": $new_deadline,
|
||||||
|
"argsize": 1,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/png",
|
||||||
|
"http-req-size": 4096000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 4096000,
|
||||||
|
"http-resp-content-type": "image/bmp"
|
||||||
|
},
|
||||||
|
|
||||||
|
EOF
|
||||||
|
func3_new_name=$func3_base_name$base_m_index
|
||||||
|
func3_new_port=$base_port
|
||||||
|
base_port=$(($base_port + 1))
|
||||||
|
|
||||||
|
cat >> $json_file << EOF
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "$func3_new_name",
|
||||||
|
"path": "cifar10_wasm.so",
|
||||||
|
"port": $func3_new_port,
|
||||||
|
"relative-deadline-us": $new_deadline,
|
||||||
|
"argsize": 1,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/bmp",
|
||||||
|
"http-req-size": 4096000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024,
|
||||||
|
"http-resp-content-type": "text/plain",
|
||||||
|
"tail-module": true
|
||||||
|
},
|
||||||
|
|
||||||
|
EOF
|
||||||
|
echo "$func1_new_name, $func1_new_port, $func2_new_name, $func2_new_port, $func3_new_name, $func3_new_port, $new_deadline"
|
||||||
|
base_m_index=$(($base_m_index + 1))
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
@ -0,0 +1,107 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "$0 [loop count]"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# != 1 ] ; then
|
||||||
|
usage
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
json_file="test_multiple_image_processing5.json"
|
||||||
|
rm -rf $json_file
|
||||||
|
touch $json_file
|
||||||
|
|
||||||
|
base_exec_time=(39287 96381 8173 23912)
|
||||||
|
base_port=10000
|
||||||
|
base_m_index=1
|
||||||
|
func1_base_name="resize"
|
||||||
|
func2_base_name="png2bmp"
|
||||||
|
func3_base_name="cifar10_"
|
||||||
|
|
||||||
|
deadline_times=(2 10)
|
||||||
|
loop_count=$1
|
||||||
|
|
||||||
|
for ((i=0; i <$loop_count; i++))
|
||||||
|
do
|
||||||
|
for ((j=1; j <=4; j++))
|
||||||
|
do
|
||||||
|
#new_deadline=$((${base_exec_time[$j-1]} * ($i+1)))
|
||||||
|
#new_deadline=$((${base_exec_time[$j-1]} * (2**$i)))
|
||||||
|
#new_deadline=$((${base_exec_time[$j-1]} * 4))
|
||||||
|
#new_deadline=$((${base_exec_time[$j-1]} * (2**($i*2 + 1))))
|
||||||
|
new_deadline=$((${base_exec_time[$j-1]} * ${deadline_times[$i]}))
|
||||||
|
func1_new_name=$func1_base_name$base_m_index
|
||||||
|
func1_new_port=$base_port
|
||||||
|
base_port=$(($base_port + 1))
|
||||||
|
|
||||||
|
cat >> $json_file << EOF
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "$func1_new_name",
|
||||||
|
"path": "resize_wasm.so",
|
||||||
|
"port": $func1_new_port,
|
||||||
|
"relative-deadline-us": $new_deadline,
|
||||||
|
"argsize": 1,
|
||||||
|
"admissions-percentile": 80,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/jpeg",
|
||||||
|
"http-req-size": 1024000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024000,
|
||||||
|
"http-resp-content-type": "image/png"
|
||||||
|
},
|
||||||
|
|
||||||
|
EOF
|
||||||
|
func2_new_name=$func2_base_name$base_m_index
|
||||||
|
func2_new_port=$base_port
|
||||||
|
base_port=$(($base_port + 1))
|
||||||
|
|
||||||
|
cat >> $json_file << EOF
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "$func2_new_name",
|
||||||
|
"path": "C-Image-Manip_wasm.so",
|
||||||
|
"port": $func2_new_port,
|
||||||
|
"relative-deadline-us": $new_deadline,
|
||||||
|
"argsize": 1,
|
||||||
|
"admissions-percentile": 80,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/png",
|
||||||
|
"http-req-size": 4096000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 4096000,
|
||||||
|
"http-resp-content-type": "image/bmp"
|
||||||
|
},
|
||||||
|
|
||||||
|
EOF
|
||||||
|
func3_new_name=$func3_base_name$base_m_index
|
||||||
|
func3_new_port=$base_port
|
||||||
|
base_port=$(($base_port + 1))
|
||||||
|
|
||||||
|
cat >> $json_file << EOF
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "$func3_new_name",
|
||||||
|
"path": "cifar10_wasm.so",
|
||||||
|
"port": $func3_new_port,
|
||||||
|
"relative-deadline-us": $new_deadline,
|
||||||
|
"argsize": 1,
|
||||||
|
"admissions-percentile": 80,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/bmp",
|
||||||
|
"http-req-size": 4096000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024,
|
||||||
|
"http-resp-content-type": "text/plain",
|
||||||
|
"tail-module": true
|
||||||
|
},
|
||||||
|
|
||||||
|
EOF
|
||||||
|
echo "$func1_new_name, $func1_new_port, $func2_new_name, $func2_new_port, $func3_new_name, $func3_new_port, $new_deadline"
|
||||||
|
base_m_index=$(($base_m_index + 1))
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
@ -0,0 +1,102 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "$0 [func name index] [loop count]"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# != 2 ] ; then
|
||||||
|
usage
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
func_name_index=$1
|
||||||
|
func_name="w"$func_name_index
|
||||||
|
json_file="test_multiple_image_processing_single.json"
|
||||||
|
rm -rf $json_file
|
||||||
|
touch $json_file
|
||||||
|
|
||||||
|
base_exec_time=(49444 124753 10799 29602)
|
||||||
|
base_port=$((10000 + ($func_name_index - 1)*3))
|
||||||
|
base_m_index=1
|
||||||
|
func1_base_name="resize"
|
||||||
|
func2_base_name="png2bmp"
|
||||||
|
func3_base_name="cifar10_"
|
||||||
|
|
||||||
|
loop_count=$1
|
||||||
|
|
||||||
|
for ((i=1; i <=$loop_count; i++))
|
||||||
|
do
|
||||||
|
for ((j=1; j <=1; j++))
|
||||||
|
do
|
||||||
|
new_deadline=$((${base_exec_time[$j-1]} * ($i+1)))
|
||||||
|
func1_new_name=$func1_base_name$func_name_index
|
||||||
|
func1_new_port=$base_port
|
||||||
|
base_port=$(($base_port + 1))
|
||||||
|
|
||||||
|
cat >> $json_file << EOF
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "$func1_new_name",
|
||||||
|
"path": "resize_wasm.so",
|
||||||
|
"port": $func1_new_port,
|
||||||
|
"relative-deadline-us": $new_deadline,
|
||||||
|
"argsize": 1,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/jpeg",
|
||||||
|
"http-req-size": 1024000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024000,
|
||||||
|
"http-resp-content-type": "image/png"
|
||||||
|
},
|
||||||
|
|
||||||
|
EOF
|
||||||
|
func2_new_name=$func2_base_name$func_name_index
|
||||||
|
func2_new_port=$base_port
|
||||||
|
base_port=$(($base_port + 1))
|
||||||
|
|
||||||
|
cat >> $json_file << EOF
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "$func2_new_name",
|
||||||
|
"path": "C-Image-Manip_wasm.so",
|
||||||
|
"port": $func2_new_port,
|
||||||
|
"relative-deadline-us": $new_deadline,
|
||||||
|
"argsize": 1,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/png",
|
||||||
|
"http-req-size": 4096000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 4096000,
|
||||||
|
"http-resp-content-type": "image/bmp"
|
||||||
|
},
|
||||||
|
|
||||||
|
EOF
|
||||||
|
func3_new_name=$func3_base_name$func_name_index
|
||||||
|
func3_new_port=$base_port
|
||||||
|
base_port=$(($base_port + 1))
|
||||||
|
|
||||||
|
cat >> $json_file << EOF
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "$func3_new_name",
|
||||||
|
"path": "cifar10_wasm.so",
|
||||||
|
"port": $func3_new_port,
|
||||||
|
"relative-deadline-us": $new_deadline,
|
||||||
|
"argsize": 1,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/bmp",
|
||||||
|
"http-req-size": 4096000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024,
|
||||||
|
"http-resp-content-type": "text/plain",
|
||||||
|
"tail-module": true
|
||||||
|
},
|
||||||
|
|
||||||
|
EOF
|
||||||
|
echo "$func1_new_name, $func1_new_port, $func2_new_name, $func2_new_port, $func3_new_name, $func3_new_port, $new_deadline"
|
||||||
|
func_name_index=$(($func_name_index + 4))
|
||||||
|
done
|
||||||
|
base_port=$(($base_port + 9))
|
||||||
|
done
|
||||||
|
|
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 0976fd036462264f581a588fa6cfa46718c67716
|
@ -0,0 +1,33 @@
|
|||||||
|
function usage {
|
||||||
|
echo "$0 [duration(s)] [concurrency]"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# != 2 ] ; then
|
||||||
|
usage
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
duration=$1
|
||||||
|
concurrency=$2
|
||||||
|
|
||||||
|
f1="105k_"$concurrency".txt"
|
||||||
|
echo $f1
|
||||||
|
f2="305k_"$concurrency".txt"
|
||||||
|
f3="5k_"$concurrency".txt"
|
||||||
|
f4="40k_"$concurrency".txt"
|
||||||
|
|
||||||
|
./test_8c.sh $f1 $duration $concurrency 105k.jpg 10000 2>&1 &
|
||||||
|
pid1=$!
|
||||||
|
./test_8c.sh $f2 $duration $concurrency 305k.jpg 10003 2>&1 &
|
||||||
|
pid2=$!
|
||||||
|
./test_8c.sh $f3 $duration $concurrency 5k.jpg 10006 2>&1 &
|
||||||
|
pid3=$!
|
||||||
|
./test_8c.sh $f4 $duration $concurrency 40k.jpg 10009 2>&1 &
|
||||||
|
pid4=$!
|
||||||
|
wait -f $pid1
|
||||||
|
wait -f $pid2
|
||||||
|
wait -f $pid3
|
||||||
|
wait -f $pid4
|
||||||
|
printf "[OK]\n"
|
||||||
|
|
@ -0,0 +1,14 @@
|
|||||||
|
./test_total_request.sh 105.txt 5000 100 105k.jpg 10000 2>&1 &
|
||||||
|
pid1=$!
|
||||||
|
./test_total_request.sh 305.txt 5000 100 305k.jpg 10003 2>&1 &
|
||||||
|
pid2=$!
|
||||||
|
./test_total_request.sh 5.txt 5000 100 5k.jpg 10006 2>&1 &
|
||||||
|
pid3=$!
|
||||||
|
./test_total_request.sh 40.txt 5000 100 40k.jpg 10009 2>&1 &
|
||||||
|
pid4=$!
|
||||||
|
wait -f $pid1
|
||||||
|
wait -f $pid2
|
||||||
|
wait -f $pid3
|
||||||
|
wait -f $pid4
|
||||||
|
printf "[OK]\n"
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEoQIBAAKCAQEA2bxGJUQa7ywL7I6prE75oA2fE/AfTHTi5KzUEh+LezA/KObP
|
||||||
|
Aa7FgcWUu/QiwCz/aVMvIeVms7CZuu/QJJ9TEinSdxjHixoNhZvbBgLhweCje2YR
|
||||||
|
MUl9ynPsaVZwb/DebloVzlweXRkXKLCfx3s+HXDSHMpDgMhbF5AiehxQCXCUrNzE
|
||||||
|
/e6d217PmX02+VRQPwVWycu5/Mi+mMvlgN/e1XggHDYhvX6t4U0Am5KZ4kqdxXYP
|
||||||
|
T0x6gXxcLi6Ulb15LNCqbbdbFhfYg+tWlqxqIyTHJO2kSw4VNINxIR0dT5FYbxFV
|
||||||
|
4DL9msYQ+ePXUUym3LnPix0Bt9EQLPMeewYhYwIBIwKCAQAlU3m9PuALvmhxsg51
|
||||||
|
T13+LjiHEziQw5ScOuKGw5RBAPTicLXFxjB8pYc2KdoSUNtT4l/Z7M/HCFTeN71I
|
||||||
|
G1ARvgbSloibgM8eN/mpQlKWQ8RBCi7VP8xr2Vu6SVUagRAwLLNH8ojcwnj/qT/2
|
||||||
|
T6Q/j679nwRB9nYEChSJ9jmbN437tvrLSE1ZxvUIzV96Sd9aGaOjg4Ezyb7KqGSR
|
||||||
|
0pFKiufTAoAtUcpQ/hYrQ88KFgbFFNm4yRz0dfNpOekdio/IXs2WZ8688k8aZ1OS
|
||||||
|
DDmFiMLyHxZmp6s5d2pJsLQBIGGWMqxm7a2xeJHY6oLc3DVIRfoJqkFDNWXLlPyR
|
||||||
|
eBAbAoGBAPPvG4koPGbJ7MoJF6DXTg8bjdXDCPhKL5JoU7y/OX7vKdYLX69RYxs+
|
||||||
|
ubILTM/7TTC33nEhqty+GWVVOkwOlap99vmWp2hhrjelLYPJmUsQ7aMWUM2Fsxcw
|
||||||
|
S/NH8RUeaM0F1QqwJEDbdvKjOrgteVQmtPaFo8LFHKmyHF1PsrQ/AoGBAOSBay+J
|
||||||
|
Nx6FvsWHt5PYrKpAjJvM7lAEgFM89zNvBLsIzqxsnTFjvnZ0ySKT5OeBfPA6nf13
|
||||||
|
tx+GsurzIniwKjKeBgGUXRIQ5CjEuGtOdnox7rLfkiluiOyKVDyApUN/66d9FLLX
|
||||||
|
pEeJZSDlUSPGJBvlwfvNGBeVUj9XRv/awbndAoGAfXOnwuF+Jjv2HsLY86HtoV6g
|
||||||
|
txPYujTIAicGflO3K1ZtSYIxNZeSDgMAajGyeZcvAxy7iqOZs1pzdfFRLm3mkjIn
|
||||||
|
Pof+UvBoOd/rhZrhH0qI14fRyMhqu3fsi76ZPg+jnKPp6D1UeSBpDxIeMtWO2tIT
|
||||||
|
7H8+RukHbTcHRe55KX8CgYEAlikpLd3Tw5m34OQoLfTJPK4TQc/Pzi7X/C9gniRi
|
||||||
|
McP1h0APhtslY8kWdc7m4UZ2rH5KkJ8gkQ9fobW3kSNO7hASk1LeEy+r4EbCVSTu
|
||||||
|
xVQDQlhnXQ4fdt6PIHHLsAOa28c5fNbZq1pJxSj6zl2isz82VQMedeXIVYJ/HSla
|
||||||
|
u/cCgYAMNf9At68UjxBECLQOxfLU2GtJBQMP1r3QJzz6/PJqctgJZWzDL/SIg24F
|
||||||
|
hp6cEaaCiUYV158IShdeTUZpai7UNooQ9wijDYYcodXE/9HnNGgVjP+YqvpnizGx
|
||||||
|
yFiYiEcowoetWDVOkDzGHDVAtHdwlWBc4D4frJ5kNipMlEEw5Q==
|
||||||
|
-----END RSA PRIVATE KEY-----
|
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
pid=`ps -ef|grep "sledgert"|grep -v grep |awk '{print $2}'`
|
||||||
|
echo $pid
|
||||||
|
sudo kill -2 $pid
|
||||||
|
|
@ -0,0 +1,378 @@
|
|||||||
|
import sys
|
||||||
|
import json
|
||||||
|
from collections import defaultdict
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
def def_list_value():
|
||||||
|
return [0, 0, 0, 0, 0]
|
||||||
|
def def_value():
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def count_miss_or_meet_deadline_requests(file_dir, percentage):
|
||||||
|
### each time for a request
|
||||||
|
request_times_dict = defaultdict(def_list_value)
|
||||||
|
#### get execution time
|
||||||
|
running_time_dict = defaultdict(def_value)
|
||||||
|
queuing_times_dict = defaultdict(def_value)
|
||||||
|
total_times_dict = defaultdict(def_value)
|
||||||
|
runnable_times_dict = defaultdict(def_value)
|
||||||
|
blocked_times_dict = defaultdict(def_value)
|
||||||
|
initializing_times_dict = defaultdict(def_value)
|
||||||
|
execution_times_dict = defaultdict(def_value)
|
||||||
|
|
||||||
|
### init overhead
|
||||||
|
### queuelength
|
||||||
|
queuelength_dict = defaultdict(list)
|
||||||
|
###
|
||||||
|
running_times = defaultdict(list)
|
||||||
|
queuing_times = defaultdict(list)
|
||||||
|
total_times = defaultdict(list)
|
||||||
|
runnable_times = defaultdict(list)
|
||||||
|
blocked_times = defaultdict(list)
|
||||||
|
initializing_times = defaultdict(list)
|
||||||
|
execution_times = defaultdict(list)
|
||||||
|
####
|
||||||
|
request_counter = defaultdict(def_value)
|
||||||
|
total_time_dist = defaultdict(list)
|
||||||
|
total_workload_dist = defaultdict(def_value)
|
||||||
|
total_real_time_workload_dist = defaultdict(def_value)
|
||||||
|
real_time_workload_times_dist = defaultdict(list)
|
||||||
|
real_time_workload_workloads_dist = defaultdict(list)
|
||||||
|
real_time_workload_requests_dist = defaultdict(list)
|
||||||
|
min_time = sys.maxsize
|
||||||
|
# list[0] is meet deadline number, list[1] is miss deadline number
|
||||||
|
delays_dict = defaultdict(list)
|
||||||
|
max_latency_dist = defaultdict(def_value)
|
||||||
|
total_deadline = 0
|
||||||
|
miss_deadline_dist = defaultdict(def_value)
|
||||||
|
meet_deadline_dist = defaultdict(def_value)
|
||||||
|
meet_deadline = 0
|
||||||
|
miss_deadline = 0
|
||||||
|
max_sc = 0
|
||||||
|
fo = open(file_dir, "r+")
|
||||||
|
for line in fo:
|
||||||
|
line = line.strip()
|
||||||
|
if "meet deadline" in line:
|
||||||
|
meet_deadline += 1
|
||||||
|
name = line.split(" ")[8]
|
||||||
|
request_counter[name] += 1
|
||||||
|
total_time = int(line.split(" ")[5])
|
||||||
|
total_time_dist[name].append(total_time)
|
||||||
|
if total_time > max_latency_dist[name]:
|
||||||
|
max_latency_dist[name] = total_time
|
||||||
|
meet_deadline_dist[name] += 1
|
||||||
|
if "miss deadline" in line:
|
||||||
|
miss_deadline += 1
|
||||||
|
name = line.split(" ")[11]
|
||||||
|
total_time = int(line.split(" ")[8])
|
||||||
|
if total_time > max_latency_dist[name]:
|
||||||
|
max_latency_dist[name] = total_time
|
||||||
|
delay = int(line.split(" ")[4])
|
||||||
|
func = line.split(" ")[11]
|
||||||
|
delays_dict[func].append(delay)
|
||||||
|
request_counter[name] += 1
|
||||||
|
total_time_dist[name].append(total_time)
|
||||||
|
miss_deadline_dist[name] += 1
|
||||||
|
#print("name:", name)
|
||||||
|
if "scheduling count" in line:
|
||||||
|
s_c = int(line.split(" ")[3])
|
||||||
|
if max_sc < s_c:
|
||||||
|
max_sc = s_c
|
||||||
|
if "total workload" in line:
|
||||||
|
thread = line.split(" ")[3]
|
||||||
|
time = line.split(" ")[1]
|
||||||
|
if min_time > int(time):
|
||||||
|
min_time = int(time)
|
||||||
|
real_time_workload = line.split(" ")[11]
|
||||||
|
total_workload = int(line.split(" ")[8])
|
||||||
|
total_real_time_workload = int(line.split(" ")[15])
|
||||||
|
real_time_request = line.split(" ")[5]
|
||||||
|
real_time_workload_times_dist[thread].append(int(time))
|
||||||
|
real_time_workload_workloads_dist[thread].append(int(real_time_workload))
|
||||||
|
real_time_workload_requests_dist[thread].append(int(real_time_request))
|
||||||
|
|
||||||
|
if total_workload_dist[thread] < total_workload:
|
||||||
|
total_workload_dist[thread] = total_workload
|
||||||
|
if total_real_time_workload_dist[thread] < total_real_time_workload:
|
||||||
|
total_real_time_workload_dist[thread] = total_real_time_workload
|
||||||
|
if "thread id" in line:
|
||||||
|
part1,queue_len = line.split(":")
|
||||||
|
thread_id = part1.split(" ")[2]
|
||||||
|
queuelength_dict[thread_id] = queue_len.split(" ")
|
||||||
|
### calculate the execution time
|
||||||
|
if "memory" in line or "total_time" in line or "min" in line or "miss" in line or "meet" in line or "time " in line or "scheduling count" in line or "thread id" in line:
|
||||||
|
continue
|
||||||
|
t = line.split(",")
|
||||||
|
id = t[1] #request id
|
||||||
|
func_idx = t[2][-9] #function id
|
||||||
|
if t[2][-10] == "1":
|
||||||
|
#func_idx = t[2][-10:-9]
|
||||||
|
func_idx = t[2][-10] + t[2][-9]
|
||||||
|
joined_key = id + "_" + func_idx
|
||||||
|
running_time_dict[joined_key] += int(t[9])
|
||||||
|
queuing_times_dict[joined_key] += int(t[6])
|
||||||
|
total_times_dict[joined_key] += int(t[5])
|
||||||
|
runnable_times_dict[joined_key] += int(t[8])
|
||||||
|
blocked_times_dict[joined_key] += int(t[10])
|
||||||
|
initializing_times_dict[joined_key] += int(t[7])
|
||||||
|
|
||||||
|
### get each time for a request
|
||||||
|
request_times_dict[id][0] += int(t[6]) # global queuing time
|
||||||
|
request_times_dict[id][1] += int(t[8]) # local queuing time
|
||||||
|
request_times_dict[id][2] += int(t[10]) # blocking time
|
||||||
|
request_times_dict[id][3] += int(t[5]) # total latency
|
||||||
|
###
|
||||||
|
|
||||||
|
miss_deadline_percentage = (miss_deadline * 100) / (miss_deadline + meet_deadline)
|
||||||
|
print("meet deadline num:", meet_deadline)
|
||||||
|
print("miss deadline num:", miss_deadline)
|
||||||
|
print("total num:", meet_deadline + miss_deadline)
|
||||||
|
print("miss deadline percentage:", miss_deadline_percentage)
|
||||||
|
print("scheduling counter:", max_sc)
|
||||||
|
|
||||||
|
# func_name_dict = {
|
||||||
|
# "cifar10_1": "105k-2",
|
||||||
|
# "cifar10_2": "305k-2",
|
||||||
|
# "cifar10_3": "5k-2",
|
||||||
|
# "cifar10_4": "545k-2",
|
||||||
|
# "cifar10_5": "105k-4",
|
||||||
|
# "cifar10_6": "305k-4",
|
||||||
|
# "cifar10_7": "5k-4",
|
||||||
|
# "cifar10_8": "545k-4",
|
||||||
|
# "cifar10_9": "105k-8",
|
||||||
|
# "cifar10_10": "305k-8",
|
||||||
|
# "cifar10_11": "5k-8",
|
||||||
|
# "cifar10_12": "545k-8",
|
||||||
|
# "resize": "resize",
|
||||||
|
# "fibonacci": "fibonacci",
|
||||||
|
# "resize3": "resize3"
|
||||||
|
# }
|
||||||
|
func_name_with_id = {
|
||||||
|
"1": "105k-2",
|
||||||
|
"2": "305k-2",
|
||||||
|
"3": "5k-2",
|
||||||
|
"4": "40k-2",
|
||||||
|
"5": "105k-10",
|
||||||
|
"6": "305k-10",
|
||||||
|
"7": "5k-10",
|
||||||
|
"8": "40k-10",
|
||||||
|
"9": "105k-8",
|
||||||
|
"10": "305k-8",
|
||||||
|
"11": "5k-8",
|
||||||
|
"12": "40k-8",
|
||||||
|
"noop1" : "noop1",
|
||||||
|
"noop2" : "noop2",
|
||||||
|
"noop3" : "noop3",
|
||||||
|
"noop4" : "noop4",
|
||||||
|
"noop5" : "noop5"
|
||||||
|
}
|
||||||
|
|
||||||
|
func_name_dict = {
|
||||||
|
"cifar10_1": "105k-2",
|
||||||
|
"cifar10_2": "305k-2",
|
||||||
|
"cifar10_3": "5k-2",
|
||||||
|
"cifar10_4": "40k-2",
|
||||||
|
"cifar10_5": "105k-10",
|
||||||
|
"cifar10_6": "305k-10",
|
||||||
|
"cifar10_7": "5k-10",
|
||||||
|
"cifar10_8": "40k-10",
|
||||||
|
"cifar10_9": "105k-8",
|
||||||
|
"cifar10_10": "305k-8",
|
||||||
|
"cifar10_11": "5k-8",
|
||||||
|
"cifar10_12": "40k-8",
|
||||||
|
"resize": "resize",
|
||||||
|
"fibonacci": "fibonacci",
|
||||||
|
"fibonacci5": "fibonacci5",
|
||||||
|
"resize3": "resize3",
|
||||||
|
"noop1" : "noop1",
|
||||||
|
"noop2" : "noop2",
|
||||||
|
"noop3" : "noop3",
|
||||||
|
"noop4" : "noop4",
|
||||||
|
"noop5" : "noop5"
|
||||||
|
}
|
||||||
|
# func_name_dict = {
|
||||||
|
# "cifar10_1": "105k-2",
|
||||||
|
# "cifar10_2": "305k-2",
|
||||||
|
# "cifar10_3": "5k-2",
|
||||||
|
# "cifar10_4": "40k-2",
|
||||||
|
# "cifar10_5": "105k-8",
|
||||||
|
# "cifar10_6": "305k-8",
|
||||||
|
# "cifar10_7": "5k-8",
|
||||||
|
# "cifar10_8": "40k-4",
|
||||||
|
# "cifar10_9": "105k-8",
|
||||||
|
# "cifar10_10": "305k-8",
|
||||||
|
# "cifar10_11": "5k-8",
|
||||||
|
# "cifar10_12": "40k-8",
|
||||||
|
# "resize": "resize",
|
||||||
|
# "fibonacci": "fibonacci",
|
||||||
|
# "resize3": "resize3"
|
||||||
|
# }
|
||||||
|
fun_execution_time = {
|
||||||
|
"cifar10_1": 39786,
|
||||||
|
"cifar10_2": 98794,
|
||||||
|
"cifar10_3": 8985,
|
||||||
|
"cifar10_4": 23826,
|
||||||
|
"cifar10_5": 39786,
|
||||||
|
"cifar10_6": 98794,
|
||||||
|
"cifar10_7": 8985,
|
||||||
|
"cifar10_8": 23826,
|
||||||
|
"cifar10_9": 39786,
|
||||||
|
"cifar10_10": 98794,
|
||||||
|
"cifar10_11": 8985,
|
||||||
|
"cifar10_12": 23826,
|
||||||
|
"fibonacci5": 0,
|
||||||
|
"fibonacci4": 0,
|
||||||
|
"noop1" : 0,
|
||||||
|
"noop2" : 0,
|
||||||
|
"noop3" : 0,
|
||||||
|
"noop4" : 0,
|
||||||
|
"noop5" : 0
|
||||||
|
|
||||||
|
}
|
||||||
|
# func_name_with_id = {
|
||||||
|
# "1": "105k-2",
|
||||||
|
# "2": "305k-2",
|
||||||
|
# "3": "5k-2",
|
||||||
|
# "4": "40k-2",
|
||||||
|
# "5": "305k-4",
|
||||||
|
# "6": "5k-4",
|
||||||
|
# "7": "105k-8",
|
||||||
|
# "8": "305k-8",
|
||||||
|
# "9": "5k-8",
|
||||||
|
# "10": "305k-8",
|
||||||
|
# "11": "5k-8",
|
||||||
|
# "12": "40k-8"
|
||||||
|
# }
|
||||||
|
# func_name_with_id = {
|
||||||
|
# "1": "105k-2",
|
||||||
|
# "2": "305k-2",
|
||||||
|
# "3": "5k-2",
|
||||||
|
# "4": "40k-2",
|
||||||
|
# "5": "105k-8",
|
||||||
|
# "6": "305k-8",
|
||||||
|
# "7": "5k-8",
|
||||||
|
# "8": "305k-8",
|
||||||
|
# "9": "5k-8",
|
||||||
|
# "10": "305k-8",
|
||||||
|
# "11": "5k-8",
|
||||||
|
# "12": "40k-8"
|
||||||
|
# }
|
||||||
|
### get execution time
|
||||||
|
for key,value in running_time_dict.items():
|
||||||
|
func_idx = key.split("_")[1]
|
||||||
|
running_times[func_idx].append(value)
|
||||||
|
for key,value in queuing_times_dict.items():
|
||||||
|
func_idx = key.split("_")[1]
|
||||||
|
queuing_times[func_idx].append(value)
|
||||||
|
for key,value in runnable_times_dict.items():
|
||||||
|
func_idx = key.split("_")[1]
|
||||||
|
runnable_times[func_idx].append(value)
|
||||||
|
for key,value in blocked_times_dict.items():
|
||||||
|
func_idx = key.split("_")[1]
|
||||||
|
blocked_times[func_idx].append(value)
|
||||||
|
for key,value in initializing_times_dict.items():
|
||||||
|
func_idx = key.split("_")[1]
|
||||||
|
initializing_times[func_idx].append(value)
|
||||||
|
for key,value in total_times_dict.items():
|
||||||
|
func_idx = key.split("_")[1]
|
||||||
|
total_times[func_idx].append(value)
|
||||||
|
|
||||||
|
for key,value in request_counter.items():
|
||||||
|
print(func_name_dict[key], ":", str(value), "proportion:", (100*value)/(meet_deadline + miss_deadline))
|
||||||
|
for key,value in total_time_dist.items():
|
||||||
|
a = np.array(value)
|
||||||
|
p = np.percentile(a, int(percentage))
|
||||||
|
print(func_name_dict[key] + " " + percentage + " percentage is:" + str(p) + " mean is:" + str(np.mean(value)) + " max latency is:" + str(max_latency_dist[key]))
|
||||||
|
total_cpu_times = 0
|
||||||
|
for key,value in meet_deadline_dist.items():
|
||||||
|
total_cpu_times += value * fun_execution_time[key]
|
||||||
|
miss_value = miss_deadline_dist[key]
|
||||||
|
total_request = miss_value + value
|
||||||
|
miss_rate = (miss_value * 100) / total_request
|
||||||
|
|
||||||
|
print(func_name_dict[key] + " miss deadline rate:" + str(miss_rate) + " miss count is:" + str(miss_value) + " total request:" + str(total_request))
|
||||||
|
print("effective total cpu times:", total_cpu_times)
|
||||||
|
for key,value in real_time_workload_times_dist.items():
|
||||||
|
real_time_workload_times_dist[key] = [x - min_time for x in value]
|
||||||
|
|
||||||
|
for key,value in running_times.items():
|
||||||
|
#print("function times:", func_name_with_id[key], np.median(total_times[key]), np.median(running_times[key]), np.median(queuing_times[key]), np.median(runnable_times[key]), np.median(blocked_times[key]), np.median(initializing_times[key]))
|
||||||
|
print("function times:", func_name_with_id[key], np.median(total_times[key]), np.median(running_times[key]), np.median(queuing_times[key]), np.median(runnable_times[key]), np.median(blocked_times[key]), np.mean(initializing_times[key]))
|
||||||
|
for key, value in delays_dict.items():
|
||||||
|
new_value = [i/1000 for i in value]
|
||||||
|
p99 = np.percentile(new_value, 99)
|
||||||
|
print("function:", key, " delays:", p99)
|
||||||
|
|
||||||
|
total_workload = 0
|
||||||
|
with open("total_workload.txt", "w") as f:
|
||||||
|
for key,value in total_workload_dist.items():
|
||||||
|
total_workload += value
|
||||||
|
#print("thread " + key + " total workload:" + str(value))
|
||||||
|
pair = [key + " "]
|
||||||
|
pair.append(str(value))
|
||||||
|
f.writelines(pair)
|
||||||
|
f.write("\n")
|
||||||
|
print("total workload is:", total_workload)
|
||||||
|
|
||||||
|
with open("total_real_time_workload.txt", "w") as f:
|
||||||
|
for key,value in total_real_time_workload_dist.items():
|
||||||
|
#print("thread " + key + " total real time workload:" + str(value))
|
||||||
|
pair = [key + " "]
|
||||||
|
pair.append(str(value))
|
||||||
|
f.writelines(pair)
|
||||||
|
f.write("\n")
|
||||||
|
|
||||||
|
js = json.dumps(total_time_dist)
|
||||||
|
f = open("total_time.txt", 'w')
|
||||||
|
f.write(js)
|
||||||
|
f.close()
|
||||||
|
js2 = json.dumps(real_time_workload_times_dist)
|
||||||
|
f2 = open("real_workload_times.txt", 'w')
|
||||||
|
f2.write(js2)
|
||||||
|
f2.close()
|
||||||
|
|
||||||
|
js3 = json.dumps(real_time_workload_workloads_dist)
|
||||||
|
f3 = open("real_workload_workloads.txt", 'w')
|
||||||
|
f3.write(js3)
|
||||||
|
f3.close()
|
||||||
|
|
||||||
|
js4 = json.dumps(real_time_workload_requests_dist)
|
||||||
|
f4 = open("real_workload_requests.txt", 'w')
|
||||||
|
f4.write(js4)
|
||||||
|
f4.close()
|
||||||
|
|
||||||
|
js5 = json.dumps(running_times)
|
||||||
|
f5 = open("running_time.txt", 'w')
|
||||||
|
f5.write(js5)
|
||||||
|
f5.close()
|
||||||
|
|
||||||
|
js6 = json.dumps(total_times)
|
||||||
|
f6 = open("total_time2.txt", 'w')
|
||||||
|
f6.write(js6)
|
||||||
|
f6.close()
|
||||||
|
|
||||||
|
js7 = json.dumps(delays_dict)
|
||||||
|
f7 = open("delays.txt", 'w')
|
||||||
|
f7.write(js7)
|
||||||
|
f7.close()
|
||||||
|
|
||||||
|
js8 = json.dumps(request_times_dict)
|
||||||
|
f8 = open("request_time.txt", 'w')
|
||||||
|
f8.write(js8)
|
||||||
|
f8.close()
|
||||||
|
|
||||||
|
js9 = json.dumps(queuelength_dict)
|
||||||
|
f9 = open("5m_queuelength.txt", "w")
|
||||||
|
f9.write(js9)
|
||||||
|
f9.close()
|
||||||
|
|
||||||
|
for key,value in total_time_dist.items():
|
||||||
|
print(key + ": time list length is ", len(value))
|
||||||
|
for key,value in queuelength_dict.items():
|
||||||
|
print("thread id:", key, " queuelength:", len(value))
|
||||||
|
if __name__ == "__main__":
|
||||||
|
argv = sys.argv[1:]
|
||||||
|
if len(argv) < 1:
|
||||||
|
print("usage ", sys.argv[0], " file dir" " percentage")
|
||||||
|
sys.exit()
|
||||||
|
count_miss_or_meet_deadline_requests(argv[0], argv[1])
|
After Width: | Height: | Size: 13 KiB |
@ -0,0 +1,90 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "resize",
|
||||||
|
"path": "resize_wasm.so",
|
||||||
|
"port": 10000,
|
||||||
|
"relative-deadline-us": 50000,
|
||||||
|
"argsize": 1,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/jpeg",
|
||||||
|
"http-req-size": 1024000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024000,
|
||||||
|
"http-resp-content-type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "png2bmp",
|
||||||
|
"path": "C-Image-Manip_wasm.so",
|
||||||
|
"port": 10001,
|
||||||
|
"relative-deadline-us": 60000,
|
||||||
|
"argsize": 1,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/png",
|
||||||
|
"http-req-size": 4096000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 4096000,
|
||||||
|
"http-resp-content-type": "image/bmp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "cifar10",
|
||||||
|
"path": "cifar10_wasm.so",
|
||||||
|
"port": 10002,
|
||||||
|
"relative-deadline-us": 50000,
|
||||||
|
"argsize": 1,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "image/bmp",
|
||||||
|
"http-req-size": 4096000,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024,
|
||||||
|
"http-resp-content-type": "text/plain",
|
||||||
|
"tail-module": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "fibonacci",
|
||||||
|
"path": "fibonacci_wasm.so",
|
||||||
|
"port": 10003,
|
||||||
|
"expected-execution-us": 600,
|
||||||
|
"relative-deadline-us": 2000,
|
||||||
|
"argsize": 2,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "text/plain",
|
||||||
|
"http-req-size": 1024,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024,
|
||||||
|
"http-resp-content-type": "text/plain"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "fibonacci2",
|
||||||
|
"path": "fibonacci2_wasm.so",
|
||||||
|
"port": 10004,
|
||||||
|
"expected-execution-us": 600,
|
||||||
|
"relative-deadline-us": 2000,
|
||||||
|
"argsize": 2,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "text/plain",
|
||||||
|
"http-req-size": 1024,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024,
|
||||||
|
"http-resp-content-type": "text/plain"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "fibonacci3",
|
||||||
|
"path": "fibonacci3_wasm.so",
|
||||||
|
"port": 10005,
|
||||||
|
"expected-execution-us": 600,
|
||||||
|
"relative-deadline-us": 2000,
|
||||||
|
"argsize": 2,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "text/plain",
|
||||||
|
"http-req-size": 1024,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024,
|
||||||
|
"http-resp-content-type": "text/plain",
|
||||||
|
"tail-module": true
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "fibonacci",
|
||||||
|
"path": "fibonacci_wasm.so",
|
||||||
|
"port": 10000,
|
||||||
|
"expected-execution-us": 600,
|
||||||
|
"relative-deadline-us": 2000,
|
||||||
|
"argsize": 2,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "text/plain",
|
||||||
|
"http-req-size": 1024,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024,
|
||||||
|
"http-resp-content-type": "text/plain"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "fibonacci2",
|
||||||
|
"path": "fibonacci2_wasm.so",
|
||||||
|
"port": 10001,
|
||||||
|
"expected-execution-us": 600,
|
||||||
|
"relative-deadline-us": 2000,
|
||||||
|
"argsize": 2,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "text/plain",
|
||||||
|
"http-req-size": 1024,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024,
|
||||||
|
"http-resp-content-type": "text/plain"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "fibonacci3",
|
||||||
|
"path": "fibonacci3_wasm.so",
|
||||||
|
"port": 10002,
|
||||||
|
"expected-execution-us": 600,
|
||||||
|
"relative-deadline-us": 2000,
|
||||||
|
"argsize": 2,
|
||||||
|
"http-req-headers": [],
|
||||||
|
"http-req-content-type": "text/plain",
|
||||||
|
"http-req-size": 1024,
|
||||||
|
"http-resp-headers": [],
|
||||||
|
"http-resp-size": 1024,
|
||||||
|
"http-resp-content-type": "text/plain"
|
||||||
|
}
|
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 8.1 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 9.3 KiB |