-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbufferoptimizer.sh
More file actions
72 lines (58 loc) · 2.15 KB
/
bufferoptimizer.sh
File metadata and controls
72 lines (58 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/bin/bash
clear
function getCurrentRecvBuf() {
ethtool -g "$Interface" | grep -A 15 "Current" | grep -i "rx:" | awk '{print $2}'
}
function getCurrentRecvDrops() {
netstat "$Interface" -i | grep "$Interface" | awk '{print $5}'
}
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
cyan=$(tput setaf 6)
nocolor=$(tput sgr0)
if [[ -z $1 ]]; then
echo "No interface was chosen. Available options are:"
ip -o link show | awk -F': ' '{print $2}'
exit 1
else
Interface="$1"
fi
if [[ -z $2 ]]; then
InitBuffer="96"
else
InitBuffer="$2"
fi
echo "${cyan}[+] Chosen $Interface to optimize ${nocolor}"
echo "${cyan}[+] Chosen $InitBuffer as initial buffer size ${nocolor}"
bufPreset=$(ethtool -g "$Interface" | grep "RX:" | head -1 | awk '{print $2}')
bufCurrent=$(ethtool -g "$Interface" | grep "RX:" | tail -1 | awk '{print $2}')
if [[ $bufCurrent -gt $bufPreset ]]; then
echo "${red}[-] Current Buffer size $bufCurrent is greater than Preset buffer size $bufPreset ${nocolor}"
exit 1
fi
echo "${cyan}[+] Preset Buffer size: $bufPreset ${nocolor}"
echo "${cyan}[+] Actual Buffer size: $bufCurrent ${nocolor}"
while ((InitBuffer <= bufPreset)); do
currentRecBuf=$(getCurrentRecvBuf)
InitRecvDrop=$(getCurrentRecvDrops)
echo "${yellow}[*] Current receive buffer size: $currentRecBuf ${nocolor}"
echo "${yellow}[*] Current receive drops: $InitRecvDrop ${nocolor}"
echo "${yellow}[+] Changing receive buffer size to $InitBuffer ${nocolor}"
ethtool -G "$Interface" rx "$InitBuffer"
NewRecBuf=$(getCurrentRecvBuf)
echo "${cyan}[+] Changed receive buffer size to $NewRecBuf ${nocolor}"
for ((i = 0; i < 5; i++)); do
sleep 1s
CurrentRecvDrop=$(getCurrentRecvDrops)
echo " ${yellow}$1 - Current receive drops: $CurrentRecvDrop ${nocolor}"
done
if [[ $CurrentRecvDrop > $InitRecvDrop ]]; then
echo "${red}[-] Buffer size of $NewRecBuf did not work ${nocolor}"
((InitBuffer = InitBuffer + 32))
echo "${red}[-] Next buffer size will be $InitBuffer ${nocolor}"
else
echo "${green}[+] Buffer size of $NewRecBuf worked ${nocolor}"
break
fi
done