#!/bin/sh

. /usr/lib/tuned/functions


start() {
    local dev_path
    local dev_name
    local rotational
    local elevator
    local vz_module
    if [ -e /proc/vz/vestat ]; then
        # CloudLinux profile settings aren't compatible with OpenVZ
        # set parameters for oom-killer
        if [ -e /proc/vz/oom_score_adj ]; then
            cat /etc/tuned-profiles-cloudlinux/oom-groups.conf > /proc/vz/oom_score_adj
        fi
        return 0
    fi
    # disable tcache/tswap OpenVZ subsystems
    for vz_module in tcache tswap; do
        save_set_sys "active_module_${vz_module}" "/sys/module/${vz_module}/parameters/active" 'N'
    done
    # block devices configuration
    for dev_path in ${DISKS_SYS}; do
        dev_name=$(eval LANG=C /bin/basename "${dev_path}" 2>/dev/null)
        rotational=$(eval LANG=C /bin/cat "${dev_path}/queue/rotational" 2>/dev/null)
        if [ "${rotational}" -eq 1 ]; then
            elevator='deadline'
        else
            elevator='noop'
        fi
        set_elevator "${dev_path}/queue/scheduler" ${elevator} 2>/dev/null
        save_set_sys "nr_requests_${dev_name}" "${dev_path}/queue/nr_requests" '1024' 2>/dev/null
    done
    # disable hugepages
    save_set_sys 'transparent_hugepage_khugepaged_defrag' '/sys/kernel/mm/transparent_hugepage/khugepaged/defrag' '0' 2>/dev/null
    save_set_sys 'transparent_hugepage_defrag' '/sys/kernel/mm/transparent_hugepage/defrag' 'never' 2>/dev/null
    save_set_sys 'transparent_hugepage_enabled' '/sys/kernel/mm/transparent_hugepage/enabled' 'never' 2>/dev/null
    return 0
}


stop() {
    local dev_path
    local dev_name
    local vz_module
    if [ -e /proc/vz/vestat ]; then
        # CloudLinux profile settings aren't compatible with OpenVZ
        return 0
    fi
    # revert tcache/tswap OpenVZ subsystems state
    for vz_module in tcache tswap; do
        restore_sys "active_module_${vz_module}" "/sys/module/${vz_module}/parameters/active"
    done
    # revert block devices configuration
    for dev_path in ${DISKS_SYS}; do
        dev_name=$(eval LANG=C /bin/basename "${dev_path}" 2>/dev/null)
        restore_elevator "${dev_path}/queue/scheduler" 2>/dev/null
        restore_sys "nr_requests_${dev_name}" "${dev_path}/queue/nr_requests" 2>/dev/null
    done
    # revert hugepages configuration
    restore_sys 'transparent_hugepage_khugepaged_defrag' '/sys/kernel/mm/transparent_hugepage/khugepaged/defrag' 2>/dev/null
    restore_sys 'transparent_hugepage_defrag' '/sys/kernel/mm/transparent_hugepage/defrag' 2>/dev/null
    restore_sys 'transparent_hugepage_enabled' '/sys/kernel/mm/transparent_hugepage/enabled' 2>/dev/null
    return 0
}


process $@
