#!/bin/bash

function TASKSET {
  CPU=0
  for PID in $1; do
    taskset -pc "$CPU" "$PID" &> /dev/null ;
    if [ $CPU -lt 15 ]; then
      let CPU=CPU+1
    else
      let CPU=0
    fi
  done
}

function RENICE {
  for PID in $2; do
    renice "$1" "$PID" &> /dev/null ;
  done
}

MULT=0
while [ foo ]; do
  PID1=$(ps aux | awk '!/awk/ && /m-queens/ { print $2 }')
  PID2=$(ps aux | awk '!/awk/ && /sr2sieve/ { print $2 }')
  PID3=$(pgrep -x ecm)
  PID4=$(pgrep -x dnetc)
  PID5=$(pgrep -x amicable_OpenCL)
  PID6=$(ps aux | awk '!/awk/ && /wrapper/ { print $2 }')

  #run every 2min
  RENICE "-18" "$PID1 $PID2 $PID3 $PID4 $PID6"
  RENICE "-19" "$PID5"

  if [ $(($MULT % 4)) -eq 0 ]; then
    #run every 8min
    TASKSET "$PID1 $PID2 $PID3 $PID4 $PID5 $PID6"
  fi

  if [ $MULT -eq 15 ]; then
    #run every 32min
    echo 1 > /proc/sys/vm/compact_memory
    let MULT=0
  else
    let MULT=MULT+1
  fi

        sleep 120;
done

