403Webshell
Server IP : 39.106.62.82  /  Your IP : 216.73.217.128
Web Server : nginx/1.14.1
System : Linux iz2ze1m0zmp2dk5c3j5ap5z 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64
User : www ( 1000)
PHP Version : 7.4.33
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /sbin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /sbin/ecs_mq_rps_rfs
#!/bin/bash
# This is the default setting of networking multiqueue and RPS/XPS/RFS on ECS.
# 1. enable multiqueue if available
# 2. enable RPS/XPS optimization
# 3. enable RFS optimization
# 4. start irqbalance service

# set and check multiqueue
function set_check_multiqueue()
{
    eth=$1
    log_file=$2
    queue_num=$(ethtool -l $eth | grep -iA5 'pre-set' | grep -i combined | awk {'print $2'})
    if [ $queue_num -gt 1 ]; then
        # set multiqueue
        ethtool -L $eth combined $queue_num
        # check multiqueue setting
        cur_q_num=$(ethtool -l $eth | grep -iA5 current | grep -i combined | awk {'print $2'})
        if [ "X$queue_num" != "X$cur_q_num" ]; then
            echo "Failed to set $eth queue size to $queue_num" >> $log_file
            echo "after setting, pre-set queue num: $queue_num , current: $cur_q_num" >> $log_file
            return 1
        else
            echo "OK. set $eth queue size to $queue_num" >> $log_file
        fi
    else
        echo "only support $queue_num queue; no need to enable multiqueue on $eth" >> $log_file
    fi
}

# calculate the cpuset for RPS/XPS cpus
function cal_cpuset()
{
    cpu_num=$(grep -c processor /proc/cpuinfo)
    quotient=$((cpu_num/8))
    if [ $quotient -gt 2 ]; then
        quotient=2
    elif [ $quotient -lt 1 ]; then
        quotient=1
    fi
    for i in $(seq $quotient)
    do
        cpuset="${cpuset}f"
    done
    if [ $cpu_num -lt 4 ]; then
        for i in $(seq $cpu_num)
        do
            bin_mask="${bin_mask}1"
        done
        ((cpuset=2#${bin_mask}))
    fi
    echo $cpuset
}

# enable RPS/XPS feature
function set_rps_xps()
{
    eth=$1
    cpuset=$2
    for rps_file in $(ls /sys/class/net/${eth}/queues/rx-*/rps_cpus)
    do
        echo $cpuset > $rps_file
    done
    for xps_file in $(ls /sys/class/net/${eth}/queues/tx-*/xps_cpus)
    do
        echo $cpuset > $xps_file
    done
}

# check RPS/XPS cpus setting
function check_rps_xps()
{
    eth=$1
    exp_cpus=$2
    log_file=$3
    ((exp_cpus=16#$exp_cpus))
    ret=0
    for rps_file in $(ls /sys/class/net/${eth}/queues/rx-*/rps_cpus)
    do
        ((cur_cpus=16#$(cat $rps_file | tr -d ",")))
        if [ "X$exp_cpus" != "X$cur_cpus" ]; then
            echo "Failed to check RPS setting on $rps_file" >> $log_file
            echo "expect: $exp_cpus, current: $cur_cpus" >> $log_file
            ret=1
        else
            echo "OK. check RPS setting on $rps_file" >> $log_file
        fi
    done
    for xps_file in $(ls /sys/class/net/${eth}/queues/tx-*/xps_cpus)
    do
        ((cur_cpus=16#$(cat $xps_file | tr -d ",")))
        if [ "X$exp_cpus" != "X$cur_cpus" ]; then
            echo "Failed to check XPS setting on $xps_file" >> $log_file
            echo "expect: $exp_cpus, current: $cur_cpus" >> $log_file
            ret=1
        else
            echo "OK. check XPS setting on $xps_file" >> $log_file
        fi
    done
    return $ret
}

# enable RFS feature
function set_check_rfs()
{
    log_file=$1
    total_queues=0
    rps_flow_cnt_num=4096
    rps_flow_entries_file="/proc/sys/net/core/rps_sock_flow_entries"
    ret=0
    for j in $(ls -d /sys/class/net/eth*)
    do
        eth=$(basename $j)
        queues=$(ls -ld /sys/class/net/$eth/queues/rx-* | wc -l)
        total_queues=$(($total_queues + $queues))
        for k in $(ls /sys/class/net/$eth/queues/rx-*/rps_flow_cnt)
        do
            echo $rps_flow_cnt_num > $k
            if [ "X$rps_flow_cnt_num" != "X$(cat $k)" ]; then
                echo "Failed to set $rps_flow_cnt_num to $k" >> $log_file
                ret=1
            else
                echo "OK. set $rps_flow_cnt_num to $k" >> $log_file
            fi
        done
    done
    total_flow_entries=$(($rps_flow_cnt_num * $total_queues))
    echo $total_flow_entries > $rps_flow_entries_file
    if [ "X$total_flow_entries" != "X$(cat $rps_flow_entries_file)" ]; then
        echo "Failed to set $total_flow_entries to $rps_flow_entries_file" >> $log_file
        ret=1
    else
        echo "OK. set $total_flow_entries to $rps_flow_entries_file" >> $log_file
    fi
    return $ret
}

# start irqbalance service
function start_irqblance()
{
    log_file=$1
    ret=0
    cpu_num=$(grep -c processor /proc/cpuinfo)
    if [ $cpu_num -lt 2 ]; then
        echo "No need to start irqbalance" >> $log_file
        echo "found $cpu_num processor in /proc/cpuinfo" >> $log_file
        return $ret
    fi
    if [ "X" = "X$(ps -ef | grep irqbalance | grep -v grep)" ]; then
        systemctl start irqbalance
        sleep 1
        systemctl status irqbalance &> /dev/null
        if [ $? -ne 0 ]; then
            service irqbalance start
            if [ $? -ne 0 ]; then
                echo "Failed to start irqbalance" >> $log_file
                ret=1
            fi
        else
            echo "OK. irqbalance started." >> $log_file
        fi
    else
        echo "irqbalance is running, no need to start it." >> $log_file
    fi
    return $ret
}

# main logic
function main()
{
    ecs_network_log=/var/log/ecs_network_optimization.log
    ret_value=0
    rps_xps_cpus=$(cal_cpuset)
    echo "running $0" > $ecs_network_log
    # we assume your NIC interface(s) is/are like eth*
    eth_dirs=$(ls -d /sys/class/net/eth*)
    if [ $? -ne 0 ];then
        echo "Failed to find eth*  , sleep 30" >> $ecs_network_log
        sleep 30
        eth_dirs=$(ls -d /sys/class/net/eth*)
    fi
    echo "find eth device is : $eth_dirs" >> $ecs_network_log
    echo "========  ECS network setting starts $(date +'%Y-%m-%d %H:%M:%S') ========" >> $ecs_network_log

    for i in $eth_dirs
    do
        cur_eth=$(basename $i)
        echo "set and check multiqueue on $cur_eth" >> $ecs_network_log
        set_check_multiqueue $cur_eth $ecs_network_log
        if [ $? -ne 0 ]; then
            echo "Failed to set multiqueue on $cur_eth" >> $ecs_network_log
            ret_value=1
        fi
        echo "enable RPS/XPS on $cur_eth" >> $ecs_network_log
        set_rps_xps $cur_eth $rps_xps_cpus
        echo "check RPS/XPS on $cur_eth" >> $ecs_network_log
        check_rps_xps $cur_eth $rps_xps_cpus $ecs_network_log
        if [ $? -ne 0 ]; then
            echo "Failed to enable RPS/XPS on $cur_eth" >> $ecs_network_log
            ret_value=1
        fi
    done
    echo "set and check RFS" >> $ecs_network_log
    set_check_rfs $ecs_network_log
    if [ $? -ne 0 ]; then
        ret_value=1
    fi
    echo "start irqbalance service" >> $ecs_network_log
    start_irqblance $ecs_network_log
    if [ $? -ne 0 ]; then
        ret_value=1
    fi
    echo "========  ECS network setting END $(date +'%Y-%m-%d %H:%M:%S')  ========" >> $ecs_network_log
    return $ret_value
}

# program starts here
main
exit $?

Youez - 2016 - github.com/yon3zu
LinuXploit