ZeroMQ - 效能注意事項



總的來說,效能注意事項與應用程式和雲解決方案的成功一樣重要。

為了最佳化 ZeroMQ (ZMQ) 的效能,我們應該牢記幾個要點。ZeroMQ 被認為是一個高效能的非同步訊息傳遞庫,但我們必須同時考慮硬體和軟體因素才能最大限度地利用它。

以下是一些影響ZeroMQ 效能的因素:

  • 記憶體使用
  • 延遲
  • 吞吐量

讓我們詳細討論以上因素:

記憶體使用

ZeroMQ 被設計成儘可能輕量級,以便它甚至可以在記憶體有限的平臺上執行。較低的記憶體佔用量對於最佳化 L1i 快取的使用也很重要。當代碼大小足夠小時,處理器可以將整個訊息傳遞程式碼儲存在 L1i 快取中,並避免緩慢地訪問物理記憶體以獲取新的程式碼部分。

包含實際程式碼的庫部分長度為 80kB,在 Linux 平臺上共享庫約為 350kB。儘管如此,許多程式碼都是內聯的,因此它們作為行內函數放置在標頭檔案中,而不是庫中。

下表顯示了 top 實用程式報告的記憶體使用情況:

應用程式 虛擬記憶體 駐留記憶體 駐留程式碼
傳送方 24312kB 1360kB 12kB
接收方 24308kB 1360kB 8kB

延遲

延遲是指原因與其結果之間的時間延遲,通常在通訊系統或過程中。在計算和網路的上下文中,延遲衡量資料從一點到另一點傳輸所需的時間,或系統對操作做出響應所需的時間。

對於 1 位元組的訊息,我們測量的延遲為 40 微秒,其中網路棧佔用 25 微秒,ZeroMQ 佔用 15 微秒。使用 TCP 延遲為 15 微秒的 10GbE,我們預計延遲約為 30 微秒。我們還有一種解決方案,可以繞過作業系統核心直接與硬體通訊,旨在將延遲降低到 20 微秒以下。

低延遲:如果低延遲非常重要,則應使用 ZMQ_IMMEDIATE 套接字選項來防止任何緩衝。建議使用 in-proc(執行緒之間的記憶體內訊息傳遞)或程序間通訊套接字而不是 TCP,因為它們成本更低。

吞吐量

吞吐量是指 ZeroMQ 透過網路傳送和接收訊息的速率。這以每秒訊息數 (mps) 或甚至每秒資料量 (mb/s) 來衡量。

吞吐量受以下因素影響,包括訊息大小、套接字型別、網路頻寬和系統性能。

  • 訊息大小:較大的訊息會降低每秒傳送的訊息速率,而較小的訊息會提高它。
  • 套接字型別:套接字型別 push-pull 或 pub-sub 會影響訊息的分配方式以及處理速度。
  • 批處理:批次傳送訊息可以減少開銷並提高吞吐量。
  • 網路頻寬:較高的頻寬允許更多資料流過,從而提高吞吐量。
  • 系統資源:CPU、記憶體和執行緒利用率會影響訊息的處理效率。

在 ZeroMQ 中,棧是指傳送和接收訊息所需的軟體和元件層。整個棧,包括網路裝置、網絡卡、處理器和作業系統,都會影響結果。它通常由以下部分組成:

應用層

這是應用程式程式碼使用其 API 與 ZeroMQ 互動的層。我們定義瞭如何在不同套接字(PUB-SUB、PUSH-PULL 等)之間傳送和接收訊息。

訊息層

此層根據我們選擇的套接字模式(例如 REQ-REP、PUB-SUB)管理訊息排隊、排程和路由。它處理訊息緩衝、批處理和流量控制。

傳輸層

此層根據所選傳輸協議決定如何傳遞訊息。以下是一些傳輸協議:

  • inproc:它是程序內通訊(同一程序內的執行緒)。
  • ipc:它是程序間通訊(同一臺機器上的程序)。
  • tcp:用於透過 TCP 網路進行通訊。
  • pgm/epgm:它是一種用於廣播的多播傳輸協議。

網路棧

ZeroMQ 使用系統的網路層(如 TCP/IP),它處理諸如資料包傳輸、TCP 情況下的重傳和擁塞控制等低階任務。

硬體

物理硬體(包括網路介面)驅動訊息的實際傳輸和接收。

廣告