| Name | Modified | Size | Downloads / 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 "<----- ----->"