Home
Name Modified Size InfoDownloads / Week
README.txt 2017-11-28 2.1 kB
oios-iosched.c 2017-09-12 51.7 kB
Makefile 2017-09-12 260 Bytes
gos.c 2017-09-12 18.5 kB
gos.h 2017-09-12 2.2 kB
gos_start.c 2017-09-12 220 Bytes
cpu_stat.c 2017-09-12 2.9 kB
disk_stat.c 2017-09-12 7.5 kB
Totals: 8 Items   85.5 kB 0
Guarantee of SLA: GoS

GoS framework is a scheduling architecture for providing required performance to virtual machines running concurrently on a virtualized server.
GoS includes different types of resource scheduler in a physical server, CPU and block I/O, to support diverse workload running on virtual machines with different characteristics (CPU-intensive or I/O-intensive).

PREREQUISITE

Because GoS is designed for virtualized environment equipped with SSDs, it requires following environments.
 - KVM installed Linux
 - SSD equipped virtual machines

INSTALL GUIDES

GoS is loadable kernel model independent of kernel version.

1. make in the GoS directory
  # make
2. install drivers
  # insmod gos_start.ko
  # insmod cpu_stat.ko
  # insmod disk_stat.ko
  # insmod gos.ko
3. configure block I/O scheduler
  # echo noop > /sys/block/sdc/queue/scheduler
  # rmmod oios-iosched
  # insmod oios-iosched.ko && echo oios > /sys/block/sdc/queue/scheduler
  # echo 1 > /sys/block/sdc/queue/nomerges

TEST SCRIPT

Run virtual machines with performance requirements and evaluate their performance using any CPU or bock I/O benchmark.
First, run following shell script to generate virtual machines with performance requirements (SLA).
 - sla_optaion: b_bw-require I/O bandwidth (B), c_usage-require CPU utilization (%, 1 core = 100%)
 - sal_value: bandwidth in B or CPU utilization

#!/bin/bash

target_vm=$1
sla_option=$2
sla_value=$3

vm_path="/sys/fs/cgroup/cpu/machine/$1.libvirt-qemu"
vcpu_string=$(virsh dumpxml ${target_vm} | grep vcpu | grep -v grep)
num_vcpu=${vcpu_string#*>}
num_vcpu=${num_vcpu%<*}
dev_string=$(virsh dumpxml ${target_vm} | egrep 'nvme|sd')
name_dev=${dev_string#*\'}
name_dev=${name_dev%\'*}
cmd_string=""
for i in $(seq 0 $((num_vcpu - 1)))
do
	vcpu_path="${vm_path}/vcpu$i"
	cmd_string="${cmd_string} `cat "${vcpu_path}/tasks"`"
done
cmd_string="${cmd_string} ${sla_option} ${sla_value} ${name_dev}"
echo ${cmd_string} > /proc/gos_vm_info
echo "<----- CMD : ${target_vm} ${sla_option} ${sla_value} ----->"
cat /proc/gos_vm_info
echo "<----- ----->"
Source: README.txt, updated 2017-11-28