天天看點

memory:part1-1What every programmer should know about memory

What every programmer should know about memory

原文位址:http://lwn.net/Articles/250967/

1 前言

        在早期,計算機比較簡單。系統的各種部件,例如CPU,記憶體,大容量存儲器,和網絡接口,都是一同開發的,是以,它們的性能是相當平衡。例如,記憶體和網絡接口(得多)不比提供資料的CPU的速度快。

        一旦計算機的基本結構穩定,硬體開發人員可以集中優化各個子系統的,形勢驟變。突然某些計算機元件的性能明顯落後,形成了瓶頸。對大容量存儲和記憶體子系統尤其如此,由于成本的原因,它們性能的提升相對于其他元件速度慢很多。

        大多使用軟體技術處理緩慢的大容量存儲:作業系統(最有可能被使用)把最長使用的資料放在主存儲器中,通路它們比硬碟通路要快數個數量級。儲存設備本身也加入緩存,這不需要修改作業系統就可以提高性能。 {然而,當使用儲存設備的高速緩存,為了保證資料的完整性,變動是必要的。} 本文的目的,我們不會深究更多軟體優化的大容量存儲通路的細節。

        不同于存儲子系統,去除主記憶體的瓶頸已被證明要困難得多,幾乎所有的解決方案都需要更改硬體。今天,這些變化主要來自于以下幾種形式:

RAM的硬體設計(速度和并行)。 記憶體控制器的設計。 CPU緩存。 裝置的直接記憶體通路(DMA)。

        在大多數情況下,本文将處理CPU高速緩存和一些影響存儲器控制器設計的東西在。探索這些主題的過程中,我們将探讨DMA,并把它到插入大的圖中(系統架構圖)。但是,我們将開始介紹今天的商品化硬體的設計。這是了解有效地使用記憶體子系統存在的問題和局限性的一個先決條件。我們也将了解不同類型的RAM在一些細節的差别,并說明這些差别為什麼仍然存在。

        本文是在完全包含所有的,也不是最終的。它僅限于商品硬體,進一步的限制于硬體的一個子集。此外,本文的目的就是把許多議題的細節讨論的足夠清晰,本文的目标。對于這樣的話題,讀者可以找到更詳細的文檔。

        當涉及到作業系統的具體細節和解決方案,專門的文字描述了Linux作業系統。在任何時候,它都不包含其他作業系統的任何資訊。筆者有沒有興趣讨論其他作業系統的影響。如果讀者認為他/她使用不同的作業系統,他們隻能去找它們的供應商,要求他們寫與此類似的檔案。

        開始前的最後一個意見。文本包含了一些術語“通常”和其他類似的限定詞的出現。這裡讨論的技術存在很多很多的變化,在現實世界中,本文隻針對最常見的,主流的版本。對于術語來說絕對的的語句是罕見的,那隻能是限定詞。

1.1 文檔結構

本文檔主要面向是軟體開發人員。,它沒有深入對硬體為導向的讀者有用的,足夠多硬體技術細節。但我們可以深入的實用資訊之前,大量的基礎必須為開發者奠定。

那之後,第二部分描述了随機存取存儲器(RAM)的技術細節。本節的内容最好應該知曉,但也絕不是能夠了解後面的章節的關鍵。适當的向後引用在内容需要的時候加入,心急的讀者可以跳過這一節開頭的大部分。

第三部分深入了大量的CPU的高速緩存操作的細節。圖示的使用可以使文本不那麼幹癟。此内容文檔的其餘部分的了解是必不可少的。第4節簡要介紹了如何實作虛拟記憶體的。這也要求其餘的基礎工作。

第5節深入大量介紹的非統一記憶體通路(NUMA)系統的細節。

第6節是本文的中心。它彙集了所有前面的章節中的資訊,并為程式員提供了關于如何在各種情況下,寫出運作良好的代碼的建議。很不耐煩的讀者可以從本節開始,如果必要的話,回到前面的章節,修習底層技術的知識。

第7章介紹的工具可以幫助程式員把工作做得更好。即使對技術有完全的了解,在一個複雜的軟體項目中問題就不顯而易見了。一些工具是必要的。

在第8節中,我們給出了一個技術的遠景,在不久的将來是可以期待的,或很簡單的就能擁有。

1.2 反映問題

        作者想更新本文已經有一段時間。這中必要包括由于技術的進步導緻的更新必要,但也要糾正錯誤。我們鼓勵讀者發送電子郵件報告問題。

1.3緻謝

我想感謝Johnray Fuller,特别是Jonathan Corbet, 他負責的一部分艱巨的任務,把作者自身式英文轉換成更傳統的。Markus Armbruster對文本中存在的問題和疏漏提供了很多寶貴的意見。

1.4 關于本文

本文的标題是向大衛戈德堡的經典論文“What Every Computer Scientist Should Know About Floating-Point Arithmetic”緻敬[goldberg]。對于敢于敲擊鍵盤進行嚴肅的程式設計人們,雖然它是一個先決條件,Goldberg的論文仍然并非為很多人所知。

轉載于:https://my.oschina.net/daleshen128/blog/77148

繼續閱讀