Performance

KVM/Qemu, Ubuntu:為什麼更多的客戶機 CPU 會快速增強 Disk-I/O?

  • December 24, 2012

我們有一個由兩個節點組成的 Heartbeat/DRBD/Pacemaker/KVM/Qemu/libvirt 集群。每個節點執行 Ubuntu 12.04 64 位,具有以下軟體包/版本:

  • 核心 3.2.0-32-generic #51-Ubuntu SMP
  • DRBD 8.3.11
  • qemu-kvm 1.0 + noroms-0ubuntu14.3
  • libvirt 0.9.13
  • 起搏器 1.1.7
  • 心跳 3.0.5

虛擬客人正在執行 Ubuntu 10.04 64 位和 Ubuntu 12.04 64 位。我們使用 libvirt 功能將主機 CPU 的功能傳遞給虛擬來賓,以實現最佳 CPU 性能。

現在這是此集群上的常見設置:

  • 虛擬機“監控”有 4 個 vCPU
  • 虛擬機“監控”使用 ide 作為磁碟介面(出於顯而易見的原因,我們目前正在切換到 VirtIO)

我們最近進行了一些簡單的測試。我知道他們不專業,沒有達到高標準,但他們已經表現出強烈的趨勢:

節點 A 正在執行虛擬機“bla” 節點 B 正在執行虛擬機“監控”

當我們將文件從 VM“bla”rsync 到 VM“monitoring”時,我們只能達到 12 MB/s。當我們在虛擬機“監控”中執行一個簡單的 dd if=/dev/null of=/tmp/blubb 時,我們可以達到大約 30 MB/s。

然後我們向虛擬機“監控”添加了 4 個以上的 vCPU 並重新啟動它。VM“監控”現在有 8 個 vCPU。我們重新執行了測試,結果如下:當我們將文件從 VM“bla”rsync 到 VM“monitoring”時,我們現在達到了 36 MB/s。當我們在虛擬機“監控”中執行簡單的 dd if=/dev/null of=/tmp/blubb 時,我們現在可以達到大約 61 MB/s。

對我來說,這種效果是相當令人驚訝的。為什麼顯然為這個虛擬客戶添加更多虛擬 CPU 會自動意味著 VM 內部的磁碟性能更高?

我對此沒有任何解釋,非常感謝您的意見。我想了解導致這種性能提高的原因,因為我可以 100% 地重現這種行為。

我會給出非常粗略的想法/解釋。

在 OP 情況下,除了在 VM 內測量外,還應查看主機。

在這種情況下,我們可以假設以下是正確的

  1. **在所有測試中,主機 I/O(磁碟)頻寬並未達到最大值。**隨著 VM( "monitoring") I/O 的增加,分配給它的 CPU 越多。如果主機 I/O 已經達到最大值,則應該沒有 I/O 性能提升。
  2. "bla"不是限制因素因為"monitoring"I/O 性能在不改變"bla"
  3. CPU 是性能提升的主要工廠(在 OP 的情況下),因為 I/O 不是瓶頸,並且 OP 沒有提到任何記憶體大小的變化。但為什麼?或者怎麼做?

附加因素

  1. 寫入比讀取花費更多時間這對於 VM 和主機來說是相同的。用非常簡單的話來說:VM 等待主機完成讀寫。

當更多的cpu分配給時會發生什麼"monitoring"

"monitoring"分配更多的 CPU 時,它會獲得更多的處理能力,但也會獲得更多的 I/O 處理時間

這與它無關,rsync因為它是一個單執行緒程序。

它是 I/O 層利用增加的 CPU 能力,或者更準確地說,是增加的處理時間。

如果在測試期間使用了cpu監控程序(例如top)"monitoring",它不會顯示一個,但是所有cpu使用率都會上升,還有%wa。%wa 是花費在 I/O 上的等待時間。

這種性能提升只會在您的主機 I/O 不是最大時才會發生。出去。

我在 KVM 站點中找不到 cpu 調度,但是有這個部落格提到 KVM 正在使用 CFS 和 cgroups,下面是引用

在 KVM 中,每個 vcpu 都映射到一個 Linux 程序,該程序又利用硬體輔助創建虛擬化所需的“煙霧和鏡像”。因此,vcpu 只是 CFS 的另一個程序,對於 cgroups 也是重要的,作為資源管理器,它允許 Linux 管理資源分配 - 通常按比例分配以設置約束分配。cgroups 也適用於記憶體、網路和 I/O。程序組可以成為調度組的一部分,以將資源分配要求應用於程序的分層組。

簡而言之,更多 cpu = 更多 cpu 時間 = 給定時間段內更多 I/O 時隙。

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