diff --git a/experiments/extra.shared.sh b/experiments/extra.shared.sh
index 62fa1cfb2211eacfd867444cbefea7e8ea6203b4..27c7f57299918411d6d6876e31859098ab580443 100644
--- a/experiments/extra.shared.sh
+++ b/experiments/extra.shared.sh
@@ -1,7 +1,11 @@
 perf_stat_start() {
     local opt_args=""
     if [ "$PERF_STAT_NO_CORES" != "true" ]; then
-         opt_args="$opt_args -C 0-$((THREADS - 1))"
+        if [ ! -z "$OVERRIDE_CPUS" ]; then
+            opt_args="$opt_args -C $OVERRIDE_CPUS"
+        else
+            opt_args="$opt_args -C 0-$((THREADS - 1))"
+        fi
     fi
     $PERF stat $PERF_EXTRA_ARGS $opt_args -e LLC-load-misses:u,LLC-load-misses:k,LLC-loads:u,LLC-loads:k,LLC-store-misses:u,LLC-store-misses:k,LLC-stores:u,LLC-stores:k,task-clock,cycles:u,cycles:k,instructions:u,instructions:k -o "$DATA_OUT/stat_$1$EXP_AUX_SUFFIX.txt" &
     PERF_STAT_PID=$!
@@ -14,7 +18,11 @@ perf_stat_stop() {
 perf_record_start() {
     local opt_args=""
     if [ "$PERF_STAT_NO_CORES" != "true" ]; then
-         opt_args="$opt_args -C 0-$((THREADS - 1))"
+        if [ ! -z "$OVERRIDE_CPUS" ]; then
+            opt_args="$opt_args -C $OVERRIDE_CPUS"
+        else
+            opt_args="$opt_args -C 0-$((THREADS - 1))"
+        fi
     fi
 
     pushd "$DATA_OUT"
diff --git a/experiments/memcached.shared.sh b/experiments/memcached.shared.sh
index d6423f1677a21d2555c1a8eb31ab94141de5b97b..f0bb02cf86073f52285fcc91f3eb04f44b840ffd 100644
--- a/experiments/memcached.shared.sh
+++ b/experiments/memcached.shared.sh
@@ -28,8 +28,12 @@ cleanup_memcached() {
 
 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 &
+    local cpus="0-$((THREADS - 1 - THREAD_TAIL_OFFSET))"
+    if [ ! -z "$OVERRIDE_CPUS" ]; then
+        cpus="$OVERRIDE_CPUS"
+    fi
+    echo "taskset -c $OVERRIDE_CPUS $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 $OVERRIDE_CPUS $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"
diff --git a/run.sh b/run.sh
index 57560b79b9c59b6d0622ee63e064c243402f1475..1a4c23923a0b6b6e640fb6ee6873a871ca8e7a55 100755
--- a/run.sh
+++ b/run.sh
@@ -38,6 +38,11 @@ while [[ $# -gt 0 ]]; do
             shift
             shift
             ;;
+        --override-cpus)
+            OVERRIDE_CPUS="$2"
+            shift
+            shift
+            ;;
         --fstack)
             FSTACK=true
             USERSTACK=true
@@ -122,6 +127,9 @@ if [ "${#EXTRA_TUNING[@]}" -gt 0 ]; then
         EXPERIMENT_NAME="$EXPERIMENT_NAME.$tuning"
     done
 fi
+if [ ! -z "$OVERRIDE_CPUS" ]; then
+    EXPERIMENT_NAME="$EXPERIMENT_NAME.override_cpus$OVERRIDE_CPUS"
+fi
 if [ "$FSTACK" == "true" ]; then
     EXPERIMENT_NAME="$EXPERIMENT_NAME.fstack"
 fi