Linux

在 Linux 中啟用/禁用非同步文件 io 的所有/大多數方法是什麼?

  • April 19, 2018

長話短說,我有兩台相同的伺服器使用 VirtualBox 託管虛擬機,兩台伺服器都託管一個虛擬機,每個虛擬機的設置方式幾乎相同,只有一個用於生產,另一個用於內部測試和開發。重要的是伺服器的硬體和作業系統是相同的,兩個虛擬機都使用相同的作業系統,執行的軟體也基本相同,只是使用場景有點不同。問題是,在執行一段時間後,我在生產虛擬機上遇到了一些工作負載的大量性能問題,我無法為內部虛擬機重現這些問題。

VM 中的所有軟體通常都“正常”工作,沒有錯誤,只是某些工作負載能夠在 VM 上施加如此高的負載/成本/任何東西,以至於它變得非常緩慢且無法使用。經過幾個小時的執行後,即使重新啟動 ClamAV 守護程序也已經觸發了問題。我也可以通過 Tomcat 上的一些特殊負載來觸發它,並且所有情況都有大量 CPU 和至少一些共同的 I/O。但只有在 prod 中,具有相同數量的 CPU、RAM 等的測試 VM 才能按預期工作。即使在 prod-VM 中,問題也不會在重新啟動後直接出現,似乎只是在執行幾個小時後才會出現。

我現在正在做的是比較sysctl -a兩個系統並檢查哪些差異可能導致我的性能問題。一個區別如下:

fs.aio-max-nr = 65536
fs.aio-nr = 0

對比

fs.aio-max-nr = 65536
fs.aio-nr = 2661

第一個是生產虛擬機。我也有其他一些虛擬機0,但也有一些非 0。0因為 prod- 和 test-VM 託管非常相似的軟體,httpd、Tomcat7、Postgres 9.6、自定義 Perl 服務等,所以對我來說,一個擁有而另一個沒有,對我來說沒有任何意義。從我所讀到的,0僅僅意味著沒有人在 prod-VM 中使用非同步 I/O,而是在 test-VM 中使用。由於使用的是相同的軟體,這不太可能。

所以我猜測由於某種原因存在一些配置差異,導致 prod-VM 中的軟體認為它不能使用非同步 I/O,這可能會在我的案例中大幅降低性能。

雖然aio-max-nr顯然不是問題,但是否有其他設置、包、庫或任何可能影響該軟體認為非同步 I/O 不可用的東西?

我發現的唯一東西是特定於軟體的,但與我正在使用的軟體無關,或者被提及fs.aio-max-nr為可能的瓶頸,這顯然不是我的情況。

過去,至少在原則上檢查非同步 I/O 是否可用的以下操作似乎有效,但在我的任何系統上都找不到任何東西,這似乎不再是這種情況。

grep kio /proc/slabinfo

https://kbflow.wordpress.com/2013/02/25/check-if-async-io-is-enabled-in-centos/ https://www.systutorials.com/linux-kernels/125888/patch-aio-remove-kioctx-from-mm_struct-linux-2-6-15/

以下確實提供了兩個系統上相同的一些數據和結果:

ls -l /sys/kernel/slab | grep kio

lrwxrwxrwx 1 root root 0 Apr 18 13:03 aio_kiocb -> :t-0000128
lrwxrwxrwx 1 root root 0 Apr 18 13:02 kioctx -> :t-0000640

https://community.oracle.com/message/14732908#14732908

不過,不確定這些數據告訴我什麼,一些數據在兩個 VM 上是相等的,有些是不同的,尤其objects_partial0在 prod-VM 上。我希望在一些配置文件中找到一些簡單的開關或類似的東西。:-)

AIO 在核心本身中啟用:

cat /boot/config-4.4.0-119-generic | grep AIO

CONFIG_AIO=y
CONFIG_COMEDI_AIO_AIO12_8=m
CONFIG_COMEDI_AIO_IIRO_16=m
CONFIG_DELL_WMI_AIO=m

我在我的設置中發現了不同之處:MySQL。停止設置fs.aio-nr02661重新開始。它被記錄為可選地使用 AIO,並且還可以找到調整技巧

所以,AIO 很可能不是我的擴展問題的原因,因為它在核心中啟用並且fs.aio-max-nr足夠高。我想這是我問題的一般答案,這兩個設置都需要確定,其他一切都取決於具體的應用程序。無論是否使用 AIO,很可能沒有其他額外的全域/系統範圍設置影響該決定。

引用自:https://serverfault.com/questions/908211