Skip to content
Snippets Groups Projects
memcached.shared.sh 3.23 KiB
source "$EXP_ROOT/experiments/extra.shared.sh"

CONNS=160 # per agent thread

NO_RUNS=0

REINIT_RUNS=4

load_config() {
    source "$EXP_ROOT/configs/memcached.sh"
    source "$EXP_ROOT/configs/mutilate.sh"
}

cleanup_mutilate() {
    echo "Killing all mutilate processes on clients"
    sudo -u $SSH_USER pdsh -R ssh -w $MEMCLIENTS pkill mutilate || true
}

cleanup_memcached() {
    echo "Killing memcached process"
    kill -INT $MEMCACHED_PID || true
    sleep 2
    kill $MEMCACHED_PID || true
    if [ "$PERF_STAT_ONLY_MEMCACHED" == "true" ]; then
        PERF_EXTRA_ARGS="$PERF_EXTRA_ARGS_ORIG"
    fi
}

start_memcached() {
    echo "Starting memcached"
    echo "taskset -c 0-$((THREADS - 1 - THREAD_TAIL_OFFSET)) $MEMCACHED $MEMCACHED_ARGS -u root -t $((THREADS - THREAD_TAIL_OFFSET)) -b 16384 -c 32768 -m 10240 -o hashpower=24,no_lru_maintainer,no_lru_crawler" 
    taskset -c 0-$((THREADS - 1 - THREAD_TAIL_OFFSET)) $MEMCACHED $MEMCACHED_ARGS -u root -t $((THREADS - THREAD_TAIL_OFFSET)) -b 16384 -c 32768 -m 10240 -o hashpower=24,no_lru_maintainer,no_lru_crawler &
    MEMCACHED_PID=$!
    if [ "$PERF_STAT_ONLY_MEMCACHED" == "true" ]; then
        PERF_EXTRA_ARGS_ORIG="$PERF_EXTRA_ARGS"
        PERF_EXTRA_ARGS="-p $MEMCACHED_PID $PERF_EXTRA_ARGS"
        PERF_STAT_NO_CORES=true
    fi
}

start_mutilate() {
    echo "Starting mutilate"
    # Mutilate client agents always run on 8 cores
    sudo -u $SSH_USER pdsh -R ssh -w $MEMCLIENTS taskset -c 0-7 mutilate -A -T 8 2>/dev/null & sleep 1
}

warmup() {
    echo "Warming up Memcached..."
    sudo -u $SSH_USER $MUTILATE --loadonly
    sudo -u $SSH_USER $MUTILATE --noload -c100 $MUTCLIENTS -t30 -u 0
}

run_mutilate() {
    if [ "$NO_RUNS" -ge "$REINIT_RUNS" ]; then
        echo "Re-intializing Memcached server"
        memcached_shutdown
        memcached_startup
        NO_RUNS=0
    fi
    echo "Running mutilate with $CONNS connections per agent (core) and QPS = $QPS"
    perf_stat_start "$1"
    extra_data_start $MEMCTRL,$MEMCLIENTS
    sudo -u $SSH_USER $MUTILATE --noload -c$CONNS $MUTCLIENTS -t30 -u 0 -q $QPS | tee $DATA_OUT/$1$EXP_AUX_SUFFIX.txt
    extra_data_stop $MEMCTRL,$MEMCLIENTS "$1"
    perf_stat_stop
    NO_RUNS=$((NO_RUNS + 1))
}

memcached_pre_start() {
    load_config

    if [ "$FSTACK" == "true" ] && [ $THREADS -gt 1 ]; then
        echo "Cannot run F-Stack memcached in multi-threaded mode"
        exit 1
    fi

    if [ "$FSTACK" == "true" ]; then
        MEMCACHED="$MEMCACHED_FSTACK"
        PERF_EXTRA_ARGS="-D 15000" # Account for S-Stack connection establishment delay
    elif [ "$CALADAN" == "true" ]; then
        MEMCACHED="$MEMCACHED_CALADAN"
        MEMCACHED_ARGS="$MEMCACHED_ARGS $CALADAN_CONFIG -p 11211"
        REINIT_RUNS=9999 # Caladan does not support restarting the application process properly
    fi

    EXPERIMENT_NAME_EXT="t$THREADS.c$CONNS"

    if [ "$NAPI_LOCALITY" == "true" ]; then
        MEMCACHED_ARGS="$MEMCACHED_ARGS -N $THREADS"
    fi

    pkill memcached || true
    sleep 1
    cleanup_mutilate    
}

memcached_init() {
    NO_RUNS=0
    memcached_startup
}

memcached_startup() {
    start_memcached
    start_mutilate
    sleep 15
    warmup
}

memcached_shutdown() {
    cleanup_mutilate
    cleanup_memcached
}

memcached_deinit() {
    memcached_shutdown
}