為什麼伺服器不總是以最大速度執行?
這是一個困擾我一段時間的問題,我似乎在網上找不到任何談論它的東西。我有一台執行 VMware Hypervisor ESXi 的伺服器。當我在上面啟動虛擬機時,它們通常需要 2-3 分鐘才能啟動;不是很長的時間,但不是瞬間的。但是,當我查看伺服器上的性能日誌時,處理器、RAM 或磁碟使用率都不是 100% 左右;通常他們平均在 60%-80% 左右 那麼如果伺服器有工作要做,為什麼不以 100% 的速度完成呢?
在我看來,在任何給定時刻,限制性能的組件都應該以 100% 執行。例如,如果我有一個非常慢的硬碟驅動器,那麼它應該幾乎總是以 100% 的速度執行。因此,至少其中一個區域(處理器、RAM、磁碟和網路)應始終處於 100%,除非伺服器處於完全空閒狀態。
為什麼不是這樣?
延遲將是原因之一。“磁碟在我可以做任何其他事情之前給我我需要的數據”與數據返回的時間之間的滯後將使 CPU 在這段時間內處於空閒狀態。
資源可能確實以 100% 執行,但時間很短。作業系統啟動將遵循“處理或決定某事、從磁碟獲取某事、在記憶體中執行某事、使用設備執行某事”的一般模式,每秒重複多次。因此,當您看到磁碟在 2 秒內以 25% 的速度執行時,這可能意味著它以 100% 的速度執行了 0.5 秒,然後在其餘時間處於空閒狀態。
正如 EEAA 指出的那樣,多核系統使這變得更加複雜。CPU 上可以執行四個執行緒的單執行緒軟體在全速執行時只能達到 25%。即使是多執行緒軟體也很少能達到 100%,因為數據必須(通常)從硬碟驅動器流向 RAM,再到記憶體,再到 CPU。保持管道滿是困難的,而且往往主要發生在可預測的工作負載上,比如影片編碼。在這種情況下,作業系統可以觀察讀取模式並在需要之前檢索數據,將其放入適當的記憶體中,例如 RAM 中的磁碟記憶體。