Dạ dùng renice với chrt để tune cực kỳ hiệu quả. Nhờ anh Minh khai sáng và anh Tuấn Quỳnh hổ trợ mà em biết được mấy cái này tương đối rõ. Em phải vật vã mất mấy tháng mới bắt đầu hiểu được nó.
Nói ngắn gọn thì renice chỉ thay đổi priority tối đa được 39. Còn chrt ngoài priority còn thay đổi được scheduling policy.
https://serverfault.com/questions/1...nce-between-renice-and-chrt-commands-in-linux
Ta xem lại dev Orion tune mpd trên Rune 0.4, cực kỳ tinh tế:
mpd.service - set priority 50:
Mã:
[Unit]
Description=Music Player Daemon
After=network.target sound.target
[Service]
#ExecStart=/usr/bin/mpd --no-daemon
ExecStart=/usr/bin/taskset -c 2,3 /usr/bin/mpd --no-daemon
# allow MPD to use real-time priority 50
LimitRTPRIO=50
LimitRTTIME=infinity
[Install]
WantedBy=multi-user.target
Do mpd có nhiều child process, mỗi child process có nhiệm vụ khác nhau. Nên script orion_optimize.sh renice tương ứng (Nếu đẩy tất cả các child process lên thường tiếng sẽ bị bó hẹp):
Mã:
mpdprio_nice () {
count=1
for pid in $(pgrep -w mpd);
do
if ((count == 3))
then
echo "### Set priority for: mpd-player thread ###";
renice -15 $pid;
fi
if ((count == 4))
then
echo "### Set priority for: mpd-output thread ###";
renice -18 $pid;
fi
if ((count == 5))
then
echo "### Set priority for: mpd-decoder thread ###";
renice -16 $pid;
fi
count=$((count+1))
done
}
Ngoài ra còn phải xét đến các tác vụ liên quan. Thí dụ như để mpd chạy cần phải có cifsd để lấy nhạc từ SMB. Vậy có thể cần phải nâng priotity của cifsd lên. Nhưng không được cao quá vì nó có thể lấn sang cái khác.