Performance
並行處理和磁碟 IO 以提高性能。更多核心還是更多伺服器?
我在 Ubuntu 12.04 上的 AWS EC2 實例 (c3.8xlarge) 上有一項大型分析工作。
目標是以 100% CPU 載入伺服器,執行記憶體允許的盡可能多的作業(數量不同,但通常每個作業 1-3gb)。
我最初的想法是提供一個大型實例並執行 32 個同時處理作業 - 每個核心一個。然而,這些工作需要大量讀取文件(通常是同一個文件)、大量壓縮/解壓縮,並且基本上是大量磁碟重的東西。
以前,當我在 m3.xlarge 節點(15gb RAM,4 核)上執行測試時,我可以在 4 個並發作業中獲得非常好的 100% CPU 使用率。
然而,我在 32 個核心和 60gb RAM 上的初步結果要差得多。我懷疑伺服器在磁碟上遇到了瓶頸,目前是通用 SSD(未配置 IOPS)。
所以問題是 - 這裡有什麼更好的?我是否嘗試為磁碟提供更高的 IOPS,或者嘗試某種 RAID 設置,以便大型伺服器可以處理更多工作?或者我是否總是通過簡單地啟動集群中的幾個較小的伺服器來獲得更好的整體吞吐量,而不會出現在一個磁碟上同時執行 30 多個作業的磁碟瓶頸?
這裡不是 HPC 專家,因此非常感謝所有建議。
當然,“最佳”是有依賴性的,但是有一些眾所周知的方法可以提高 AWS 上的 IO 性能。
- RAID0——一堆通用 SSD EBS 卷。
- 一些大型的預置 IOP EBS 卷。
- 如果您正在執行順序工作,請使用該類型的 640GB 實例本地儲存。
- 綜合以上三點。
以上所有假設您的實例在 EBS 優化模式下執行。
您當然可以在 Amazon 上獲得最大 IOPS,您只需要願意為此付費。我不相信您可以在創建實例後附加實例儲存,因此該選項可能需要啟動一個新實例。