Performance Tuning (TBD)

性能調(diào)優(yōu)是個大而復(fù)雜的系統(tǒng)性問題,涉及Linux系統(tǒng)(進程管理,文件系統(tǒng),磁盤系統(tǒng),網(wǎng)絡(luò)IO處理等),內(nèi)核參數(shù)調(diào)優(yōu),常見檢測及配置工具的使用等等。在目前針對云和虛擬化的基礎(chǔ)設(shè)施的性能評價體系,我們可以可以分別從CPU,內(nèi)存,存儲,網(wǎng)絡(luò)以及內(nèi)核參數(shù)幾個方面來查看性能調(diào)優(yōu)的具體實現(xiàn)和方法論。

在這之前,我們有必要了解一下相應(yīng)的檢測及配置工具,如下圖:


常見工具及對應(yīng)Linux模塊

內(nèi)核參數(shù)

TBD

CPU

我們先看看如何查看sysvinit或者systemd的服務(wù)

查看sysvinit運行的服務(wù),其中+代表開啟,-代表關(guān)閉:

# service --status-all

[ + ]? acpid

[ + ]? apache-htcacheclean

[ + ]? apache2

[ + ]? apparmor

[ + ]? apport

[ + ]? atd

[ + ]? binfmt-support

[ - ]? bootmisc.sh

[ - ]? cgroupfs-mount

[ - ]? checkfs.sh

[ - ]? checkroot-bootclean.sh

[ - ]? checkroot.sh

...

查看啟動的系統(tǒng)守護進程,這里有一個工具叫做chkservice,執(zhí)行后的界面如下:

chkservice,按?呼出幫助菜單

安裝步驟如下:

# sudo add-apt-repository ppa:linuxenko/chkservice

# sudo apt-get update

# sudo apt-get install chkservice

查看啟動的systemd服務(wù):

# systemctl

查看裝載的服務(wù)類型單元(服務(wù)即名稱為.service)

# systemctl list-units --type service

UNIT? ? ? ? ? ? ? ? ? ? ? ? ? ? ? LOAD? ACTIVE SUB? ? DESCRIPTION

acpid.service? ? ? ? ? ? ? ? ? ? ? loaded active running ACPI event daemon

apparmor.service? ? ? ? ? ? ? ? ? loaded active exited? LSB: AppArmor initialization

apport.service? ? ? ? ? ? ? ? ? ? loaded active exited? LSB: automatic crash report generation

...

查看已安裝的服務(wù)類型單元文件(服務(wù)類別)

# systemctl list-unit-files --type service

UNIT FILE STATE

accounts-daemon.service? ? ? ? ? ? ? ? ? ? enabled

acpid.service? ? ? ? ? ? ? ? ? ? ? ? ? ? ? disabled

apport-forward@.service? ? ? ? ? ? ? ? ? ? static

apt-daily-upgrade.service? ? ? ? ? ? ? ? ? static

systemd-cgtop?按照資源使用率(CPU,內(nèi)存,磁盤吞吐率)從高到低的順序顯示系統(tǒng)中的控制組(Control Group)。類似top的一個命令,每秒刷新

# systemd-cgtop?

Control Group?????????????????????????????????????????????????????????????????????????????????????????????????????????Tasks?? %CPU?? Memory?Input/s Output/s

/?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????-?? 13.1???? 1.7G???????-??????? -

/kubepods????????????????????????????????????????????????????????????????????????????????????????????????????????????????96??? 9.2??996.9M??????? -??????? -

/kubepods/burstable??????????????????????????????????????????????????????????????????????????????????????????????????????38??? 7.2?? 493.8M???????-??????? -

/kubepods/burstable/pod4685929b3a965eb93b397eb2e4262428??????????????????????????????????????????????????????????????????13??? 3.3?? 341.4M???????-??????

...


以下是基本的方法論:

1. 對業(yè)務(wù)做CPU核綁定,針對OpenStack中的虛機,我們需要版本的支持

2. 分配大頁內(nèi)存減少TLB不命中的概率

3. TBD

內(nèi)存

TBD

存儲

對于存儲尤其是遠程訪問的存儲節(jié)點,一些基本的要素需要保證:

1. host上專有的物理網(wǎng)卡(如10G);

2. 隔離的網(wǎng)絡(luò);

3. 較大的MTU;

4. 高性能磁盤(SSD,SAS);

5. 大的內(nèi)存;

說存儲有必要提一下LVM,一個磁盤卷的管理工具,里面幾個概念通過一張圖來了解一下。可以看到P指的是物理意義,V指的是虛擬或者邏輯意義,通過LVM實現(xiàn)對物理磁盤的邏輯劃分和分組。

LVM基本概念
LVM容量,可能同最新有出入

網(wǎng)絡(luò)

針對DPDK對網(wǎng)絡(luò)IO性能的提升,以下是基本的方法論:

1. 更新DPDK驅(qū)動(uio-pci-generic ----> vfio-pci);

2. vSwitch微調(diào), 如NIC卡的mbuf分配;


針對TCP協(xié)議棧的性能調(diào)優(yōu),重點在于眾多TCP參數(shù)的理解和配合。

查看默認TCP分配內(nèi)存,其值是根據(jù)當(dāng)前系統(tǒng)內(nèi)存大小動態(tài)生成的一個值,其中顯示的三個值分別是最小值,初始值和最大值。

在128G內(nèi)存的設(shè)備上:

# cat /proc/sys/net/ipv4/tcp_mem

1347279 1796375 2694558

在32G內(nèi)存的設(shè)備上:

# cat /proc/sys/net/ipv4/tcp_mem

384375? 512503? 768750

查看用來socket所使用接收緩沖區(qū)大小,固定值為208K

# cat /proc/sys/net/core/rmem_default

212992

查看socket所使用接收緩沖區(qū)最大值,理論不小于default值

# cat /proc/sys/net/core/rmem_max

212992

查看用來socket所使用發(fā)送緩沖區(qū)大小,固定值為208K

# cat /proc/sys/net/core/wmem_default

212992

查看socket所使用發(fā)送緩沖區(qū)最大值,理論不小于default值

# cat /proc/sys/net/core/wmem_max

212992

The maximum amount of option memory buffers:

每個socket可用的最大緩沖區(qū)大小。默認20K

# cat /proc/sys/net/core/optmem_max

20480

針對以上的默認值,可以將值做如下調(diào)整,僅供參考:

# echo 'net.core.wmem_max=12582912' >> /etc/sysctl.conf

# echo 'net.core.rmem_max=12582912' >> /etc/sysctl.conf

# echo 'net.ipv4.tcp_rmem= 10240 87380 12582912' >> /etc/sysctl.conf

# echo 'net.ipv4.tcp_wmem= 10240 87380 12582912' >> /etc/sysctl.conf

使能RFC1323定義的window scaling,要支持超過64KB的TCP窗口,必須啟用該值(1表示啟用),TCP窗口最大至1GB,TCP連接雙方都啟用時才生效。

# echo 'net.ipv4.tcp_window_scaling = 1' >> /etc/sysctl.conf

使能RFC1323定義的timestamps

# echo 'net.ipv4.tcp_timestamps = 1' >> /etc/sysctl.conf

啟用有選擇的應(yīng)答(1表示啟用),通過有選擇地應(yīng)答亂序接收到的報文來提高性能,讓發(fā)送者只發(fā)送丟失的報文段,(對于廣域網(wǎng)通信來說)這個選項應(yīng)該啟用,但是會增加對CPU的占用。

# echo 'net.ipv4.tcp_sack = 1' >> /etc/sysctl.conf

當(dāng)連接關(guān)閉的時候,TCP 默認緩存了很多連接指標(biāo)在 route cache 中,以至于在不久的將來,連接建立的時候,可以用這些值來設(shè)置初始化條件。通常,這提升了整體的性能,但是,有時候會引起性能下降,如果設(shè)置的話,TCP 在關(guān)閉的時候不緩存這些指標(biāo)。

# echo 'net.ipv4.tcp_no_metrics_save = 1' >> /etc/sysctl.conf

設(shè)置在入方向上可入隊列的最大報文數(shù),當(dāng)端口接收報文的速率大于內(nèi)存處理速率時,微調(diào)該選項可以緩解CPU負荷

# echo 'net.core.netdev_max_backlog = 5000' >> /etc/sysctl.conf

重新載入新的設(shè)置

# sysctl -p

寫入/etc/sysctl.conf是保證重啟配置不會消失,如果僅做臨時的操作調(diào)優(yōu),可以用sysctl來實現(xiàn)配置的查看和修改,如下:

# sysctl kernel.shmmax

# sysctl -w kernel.shmmax=xx

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容