為什麼 RAM 部分滿會導致延遲?

為什麼 RAM 部分滿會導致延遲?

為什麼部分滿 RAM(假設 80%)會導致設備延遲很多,即使有一些空間可用於儲存更多資料?我期望它能一直正常工作到 99%。

我注意到行動裝置上的記憶體比 PC 上的多,因為它的 RAM 較小,例如我的手機有 2 GB RAM;當我的可用 RAM 少於 1 GB 時,它會滯後很多!儘管仍有 ~ 1 GB 可用空間,為什麼會發生這種情況?

答案1

這裡涉及很多內容,但我將盡力以適用於任何作業系統的方式盡可能簡單地解釋它。

這裡有兩個基本原則:

  1. RAM 中所需的所有內容以及可從 RAM 中受益的內容的總和幾乎總是大於 RAM 的大小。可以從 RAM 中受益的內容包括進程工作集和備用清單。後者包含曾經活躍使用但後來不再活躍的資料和程式碼。其中大部分將再次使用,其中一些很快就會被使用,因此將其保留在 RAM 中是有益的。該內存充當一種緩存,但並不是真正必需的,因此屬於可用內存的類別。就像空閒記憶體一樣,它可以快速分配給任何需要它的程式。為了提高效能,備用記憶體應該很大。

  2. 記憶體區塊的使用頻率遠不是隨機的,但可以相當準確地預測。記憶體被分成區塊,通常為 4K 位元組。有些區塊每秒鐘會被訪問多次,而有些區塊則在幾分鐘、幾小時、幾天甚至幾週內都沒有被存取(如果系統運行的時間足夠長的話)。這兩個極端之間有廣泛的用途。記憶體管理器知道哪些區塊最近被存取過,哪些區塊沒有被存取過。一個合理的假設是,最近訪問過的記憶體區塊很快就會再次被需要。最近未訪問過的記憶體可能很快就不再需要。長期的經驗證明這是一條有效的原則。

記憶體管理器利用第二個原則來大幅減輕第一個原則帶來的不良後果。為此,它將進行平衡操作,將最近存取的資料保留在 RAM 中,同時將很少使用的資料保留在原始文件或頁面文件中。

當 RAM 充足時,這種平衡行為很容易。許多最近不使用的資料可以保存在 RAM 中。這是一個很好的情況。

當工作量增加時,事情會變得更加複雜。使用的資料和程式碼的總和更大,但 RAM 的大小保持不變。這意味著其中較小的子集可以保存在 RAM 中。一些最近較少使用的資料不能再位於 RAM 中,而必須保留在磁碟上。記憶體管理器非常努力地在活動使用的記憶體和可用記憶體之間保持良好的平衡。但隨著工作負載的增加,記憶體管理器將被迫為正在運行的進程提供更多可用記憶體。這不是一個好情況,但記憶體管理器別無選擇。

問題在於,程式運行時將資料移入或移出 RAM 需要時間。當 RAM 充足時,這種情況不會經常發生,甚至不會被注意到。但當 RAM 使用率達到較高水準時,這種情況會更頻繁地發生。這種情況可能會變得非常糟糕,以致於將資料移入和移出 RAM 所花費的時間比實際使用資料所花費的時間還要多。這就是顛簸,記憶體管理器極力避免這種情況,但在高工作負載的情況下通常無法避免。

記憶體管理器就在您身邊,即使在不利的條件下,也始終盡力保持最佳效能。但是,當工作負載很大且可用記憶體不足時,它必須做一些壞事才能繼續運行。這實際上是最重要的事情。首要任務是先保持一切正常運行,然後儘可能快地進行。

答案2

所有現代作業系統都使用未使用的記憶體來快取數據,以便可以從快速 RAM 而不是較慢的儲存中存取資料。他們通常會將其報告為可用內存,因為應用程式可以清除快取並在需要時使用它,但它實際上仍在使用中。它越少,可以快取的資料就越少,電腦的速度就越慢。

答案3

這個答案大部分已被重寫,以重新組織結構並使訊息更清晰。我也將其作為社區維基答案打開;請隨意編輯。

分頁是一種記憶體管理方案,透過該方案將固定大小的記憶體區塊分配給它們。當記憶體使用率上升到較高水準(即80%容量)時,分頁開始從RAM擴展到vRAM(虛擬RAM)。

vRAM 位於系統儲存中,通常位於硬碟或其他相當大的儲存位置。

進程被分配到硬碟的一部分作為記憶體運行,並將其部分視為 RAM。這是一個完全正常的過程,但是,當與 vRAM 之間傳輸資料所花費的時間增加時,系統效能就會下降。

雖然專用 RAM 是透過主機板從 CPU 直接存取的,這提供了快速連接,但虛擬 RAM 必須在主機板和 vRAM 位置之間橫向佈線。

然而,這只會造成輕微的性能影響。當對 vRAM 進行分頁的速率急劇增加時(當專用 RAM 接近容量時),就會發生抖動。

顛簸是將記憶體頁面快速傳輸到虛擬記憶體的做法。這會對效能造成巨大影響,因為必須花費更多時間來取得和定址資料。

假設您想寫下一個 30 位數字長的數字。你可以坐在螢幕旁邊,用記事本寫下來(使用專用記憶體),或記住 5 塊內容,然後跑到隔壁房間,把它記在記事本上(使用虛擬記憶體)。兩者都完成了工作,但哪個會更快呢?

了解更多關於在這裡打散

非常感謝此答案的貢獻者,包括丹尼爾·B,類別xenoid喬恩·本特利

答案4

請記住,硬碟是一個數量級慢點比 RAM 快,而且 RAM 本身並不是那麼快(在整體架構中)。按照訪問速度的順序(其中每個梯級比上面的梯級慢一個數量級),您有

  1. 處理器暫存器- 實際上,暫存器是可用的在 1 個處理器週期內。考慮到處理器每秒執行數十億個週期(3 GHz = 每秒 30 億個週期),這速度太快了。
  2. 處理器快取- 取決於級別,但它們仍然相當快(L1 快取有 3-5 個週期可用性)。
  3. 隨機存取記憶體 (RAM)- 隨機部分意味著您不知道它在訪問它時處於什麼狀態。想像一個包裹遞送員必須停下來,拿起包裹,走到門口,按門鈴並等待回應。也許你根本不等,也許你等了一兩分鐘,史密斯太太拖著腳步走到房子後面的門口。實際上,我們談論的是 14-27 個週期(取決於我們訪問 RAM 時的狀態)。
  4. 硬碟機- 現在這裡有一個物理過程,雖然它發生得盡可能快,但你正在等待磁頭移動和軌道在這些磁頭下移動。實際上,7,200 RPM HDD 可以在大約 4 毫秒內完成一轉,或附近的某個地方3 GHz 處理器為 750,000 個週期。那很慢。

虛擬記憶體管理器是一個賭徒。它打賭您並不總是需要所有 RAM,因此它會進行有根據的猜測並擲骰子,您的文件程式(當您閱讀本文時,它在過去 10 分鐘內一直在後台運行)不是非常重要,它把它推到硬碟上。

但隨後您按一下返回文件!現在,VMM 必須從 HDD 載入所有資料。更糟的是,如果 RAM 不足,它現在必須將其他資料(更多賭博)推送到 HDD 以釋放可用空間。 Linux 喜歡生活在邊緣。它將用頻繁使用的資料填充絕大多數 RAM(非常適合進程很少的伺服器)。

相關內容