计算机频率、内存相关杂谈
計算機頻率、內存相關雜談
?? 計算機傳統架構是分為 北橋和南橋兩個芯片組,其中北橋連接著CPU、顯卡、以及內存等高速設備,南橋則連接著硬盤、USB、PS/2、PCI等等低速設備,不直接與處理器打交道,北橋和南橋之間也是通過Hub架構進行連接。如下圖:
從圖上可以看出,北橋芯片負責和CPU通信,并控制內存(僅限于Intel除i7系列以外的cpu,AMD系列cpu在K8系列以后就在cpu中集成了內存控制器,因此AMD平臺的北橋芯片不控制內存)、顯卡數據在北橋內部傳輸,而北橋和cpu通信是通過CPU的FSB前端總線來進行傳輸的。
內存數據與cpu交互是這么一個過程:CPU發出指令,通過前端總線到達北橋內存控制器,內存控制器再將命令給內存,內存將數據傳遞給北橋,北橋再通過前端總線傳遞給CPU,注意這個過程,CPU->北橋->內存->北橋->CPU.因此cpu到北橋,北橋到內存的傳輸速度要匹配才能達到最佳效果,而北橋因為承載了大量數據的中轉運輸,發熱量可不容小覷。
上面說的過程是傳統過程,還有一類剛才說的intel i7系列以及AMDK8系列以后的CPU由于在CPU內部集成了內存控制器,內存控制器與cpu之間幾乎沒有間距,內存交互與cpu交互不再需要北橋參與,內存數據直接交給內存控制器后,cpu直接取用,比傳統方式來講內存延遲小很多,當然也快捷很多。參考下圖:
明白了以上內容之后,后面部分就相對不那么空洞了,接下來再來看一些基本概念,然后我會講一些與機器性能相關的一些匹配問題:
?
U(CPU簡稱)的 主頻:cpu工作時的頻率,對于同系列的U來說,一般是主頻越高代表U的處理速度越快,不同系列的U,主頻只能作為參考,因為整體性能還要考慮U的指令流水線等等。
U的外頻:這個頻率一般是整個系統的基準工作頻率,也稱為系統時鐘頻率,是cpu與主板之間的同步數據的基準頻率,而大多數系統中外頻也是內存和主板同步數據的基準頻率,因此可以認為是以cpu的外頻與內存在進行數據同步。
U的倍頻: U的主頻與外頻之間存在著一個比值關系,這個比值就是
倍頻系數,簡稱倍頻。理論上倍頻是從1.5一直到無限的,但需要注意的是,倍頻是以0.5為一個間隔單位。外頻與倍頻相乘就是主頻,所以其中任何一項提高都可以使CPU的主頻上升,但是有的U的廠家將某些U的倍頻進行了鎖定,例如intel,因此一般來說都只有提升外頻來幫助提高U的主頻。
FSB(intel U的概念):全稱Front SideBUS,前端總線,它是U和北橋芯片之間傳遞數據的通道,U的前端總線頻率一般遵從如下公式:FSB前端總線頻率=外頻*4 ,注意只有intel的U才有前端總線的概念,FSB傳輸速率計算方式是:FSB傳輸速率=FSB總線頻率*總線位寬=外頻*4*總線位寬,一般FSB總線位寬是64位,即U的外頻和位寬越高,表示了這個通道傳輸能力越強大。
?
HyperTransport:超傳輸技術, 它是一種高速、低延時、點對點的連接,旨在提高電腦、服務器、嵌入式系統,以及網絡和電信設備的集成電路之間的通信速度。它的速度比某些現有技術高出48倍。HyperTransport有助于減少系統之中的布線數量,從而能夠減少系統瓶頸,讓當前速度更快的微處理器能夠更加有效地在高端多處理器系統中使用系統內存。前面說了cpu與內存直連,cpu與北橋直連,北橋和南橋直連,AMD就采用了這種技術,當然這種技術也是首先由AMD發明的,HyperTransport也有他自己的傳輸頻率,HyperTransport總線頻率=CPU外頻*HyperTransport倍頻 ,注意不是CPU的倍頻,因此如果cpu外頻提高,可見,HyperTransport總線頻率也在相應提高。由于HyperTransport采用類似DDR的工作方式,即在上升沿和下降沿都傳送數據,相當于傳送數據能力翻倍,400MH工作頻率相當于800MHZ, 因此其傳輸速率=工作頻率*2*位寬,而HyperTransport默認位寬是32位,此外HyperTransport是在同一個總線中可以模擬出兩個獨立數據鏈進行點對點數據雙向傳輸,因此理論上最大傳輸速率可以視為再翻倍,稱為雙向傳輸技術,因此考慮到雙向傳輸的話,那么HyperTransport最大傳輸速率=工作頻率*2*位寬*2,目前HyperTransport 3.0標準有1.8GHz、2.0GHz、2.4GHz和2.6GHz四種物理工作頻率,在2.0GHZ工作頻率下,單向傳輸速度=2.0*2*32/8=16GB/S,雙向傳輸速度更可以達到32GB/S。可見傳統FSB傳輸速度的確沒法跟HyperTransport比啊。
?
內存頻率:內存的頻率其實細分應該分為核心頻率、實際時鐘頻率、等效工作頻率。
結合內存分代來講,內存到目前為止可以分SDRAM、DDR、DDR2、DDR3,我們平時購買內存條的時候就會接觸到這些名字DDR400、DDR333、DDRII533、DDRII667、DDRIII1066等名字。DDR后面I、II、III代表的是DDR一代、二代、三代內存條,400、533、667、1066等表示的內存條的等效工作頻率。
可以從上圖中看到DDR2-800的字樣。另外CL=5表示列選通延遲時間為5個內存時鐘周期,具體后面再深入分析。
??? 大家知道計算機系統的時鐘頻率依靠的是晶體振蕩器來產生的,而內存自身并不帶振蕩器,因此內存自身并沒有辦法控制自己的頻率,它只能限制自己能夠運行的最大頻率是多少,真正的工作時的頻率還是要依賴芯片上的北橋或者主板上的時鐘發生器來產生。
?? 先來看下內存工作的兩個步驟:內存從Memory Cell Array(內存單元對列,內存的一種結構) 中讀取數據到Io Buffer中,等到了一定位數之后再從Io Buffer中傳送到cpu系統進行處理。
? 于是有了下面的概念:
核心頻率:(內部時鐘)指內存顆粒工作頻率,它是讀取數據到IO Buffer的頻率。
內存外部時鐘頻率:這個頻率就好理解了,就是將數據從IO Buffer傳送出去的頻率
等效工作頻率:這個就涉及到另外的知識了,先說概念,表示數據等效傳輸頻率,目前DDR、DDR2、DDR3等效工作頻率都是外部時鐘頻率的2倍。
先看下面的圖:
SDRAM: (Synchronous DynamicRandom Access Memory )同步動態隨機存儲器,同步是指內存工作需要同步時鐘,內部的命令的發送與數據的傳輸都以它為基準;動態是指存儲陣列需要不斷的刷新來保證數據不丟失;隨機是指數據不是線性依次存儲,而是自由指定地址進行數據讀寫,如上圖,SDRAM核心工作時,每次獲取1bit數據到I/Obuffer中,SDRAM核心工作頻率=外部時鐘頻率,由于SDRAM是在外部時鐘周期的上升沿傳遞一次數據,因此等效頻率=外部時鐘頻率。
DDR:(Dual DateRate SDRAM)雙倍速率SDRAM的簡稱,DDR在SDRAM上有了提高,每次核心工作時可以同時預取2bit數據到I/O buffer,而為了把I/O buffer中的2位數數據給送出去,DDR采用了外部時鐘周期上升沿和下降沿都傳送一位數據,因此很自然我們能知道,DDR核心頻率=外部時鐘頻率,而等效工作頻率是外部時鐘頻率的2倍,因此他采用了上升、下降沿都傳送一位數據。
DDR2: 這是第二代DDR內存,從上圖我們可以看出,DDR2采用4位數據預取技術,即每次核心工作時將同時傳遞4位數據到I/O buffer中,而將這4位數據要全部傳送出去,采用上升沿和下降沿都傳遞一位數據來看,DDR2的外部時鐘頻率必須要是核心頻率的兩倍才能及時將數據傳遞出去。因此可以得出這么一個關系:DDR2等效工作頻率是外部時鐘頻率的兩倍(因為采用了上下沿都傳遞數據),而外部時鐘頻率又是核心頻率的兩倍(為了及時將數據傳遞出去,否會積壓在buffer中)
DDR3: 這是第三代DDR內存,同理,DDR3采用了8位數據預取技術,相應的要及時將數據傳遞出去,外部時鐘頻率需要時核心工作頻率的4倍才行,而等效工作頻率一樣是外部時鐘頻率的2倍(上下沿傳遞數據)
?
可見在相同的核心頻率下,DDR3的傳輸能力要強得多,并且,在得到相同的傳輸帶寬下,DDR3只需要很小的核心工作頻率就可以完成,工作電壓也會小很多,發熱量也就相應小了很多,好處多多,目前DDR內存基本上已經銷聲匿跡,DDR2也基本上要被DDR3完全淘汰。
?
那么內存有這么多頻率,跟cpu外頻又有什么關系呢?前面講到,外頻是cpu與內存等同步數據的一個頻率,因此一般來說內存外部時鐘頻率應該大于cpu外頻為好,否則內存將會成為cpu運行的一個瓶頸,因為數據供應跟不上。考慮內存和cpu搭配,除了考慮頻率搭配以外,還要考慮數據帶寬搭配,什么意思呢?舉個例子
? ????Cpu外部頻率200MHZ, FSB 800MHZ,我們可以計算一下,FSB一般是64位,因此0.8*64/8=6.4GB/S,考慮頻率一致,我們可以采用DDR 400、DDR2-400、DDR3-400(如果有),三種中一種,他們的外部時鐘頻率都是200MHZ,但是帶寬呢?由于DDR、DDR2、DDR3位寬一般為64位,因此,0.4*64/8=3.2GB/S,明顯數據寬度是個瓶頸,達不到cpu要求的數據寬度,于是就出現了雙通道技術,雙通道技術目的是將內存的數據寬帶增加一倍,注意,是數據寬度,而不是頻率增加一倍,即,如果再插一根同樣類型的內存條,并且你的主板支持雙通道技術,那么你的帶寬將增加一倍,64位可以變成128位,即,0.4*128/8=6.4GB/S,恰好匹配。
???? 請記住兩點:①頻率需要匹配②帶寬也要匹配? 才能不拖cpu后腿。
(其實關于上面兩點,網上有很多說法,沒有個準,也有說應該是外頻要和內存核心頻率匹配的,也有說要跟外部時鐘頻率匹配的, 對于拖cpu后腿的說法,有的人認為只要帶寬匹配就行了,他們舉的例子都是DDR內存,由于DDR內存核心頻率和外部時鐘頻率一致,因此也完全看不出來是否一定要頻率一致,到底以哪個頻率一致,經過我看了大概幾百多篇文章以及自己試驗結果來看,我得出了以上結論)
???? 當然,這只是讓內存工作再同步模式下,你的內存也可以是DDR3 -1333,此時由于你的內存外部時鐘頻率是667MHZ,明顯高于cpu外頻,系統默認情況一般會設定為內存異步工作模式,即內存頻率與外頻可以不一致。如果你采用CPUZ或者everest查看,可以看到FSB:DRAM=xx:xxxx,這里FSB請不要搞錯,由于歷史原因,這里只表示外頻,DRAM表示內存外部時鐘頻率。
前面說了DDR、DDR2、DDR3,也看了他們工作示意圖,我們可以從中得出什么來呢?
同樣的等效頻率DDR400、DDR2-400,DDR核心頻率200,ddr2核心頻率100,也就是說DDR2核心工作的周期比DDR要長。怎么得出來的呢?頻率的倒數就是周期。自己計算一下就知道。三類內存他們延遲時間DDR3>DDR2>DDR。延遲時間會影響到內存的工作效率,就是同樣的DDR3-800型號,不同的物理內存,他們制作時也不可能完全一樣,總有的體質好的內存條延遲時間可以短點,有的卻要長一些,我們應該選用體質較好的內存條,延遲時間短一點,這也是為什么有的內存條上會標注CL=5的原因,表示CL延遲時間為5ns.
?下面是我從另一處文章中摘抄過來的,是關于內存延遲的很好的描述,我做了少量修飾,文章出處給忘記了,先貼出來,供大家參考:
?? ?再來了解一下內存基本結構和工作流程。目前,每一顆內存芯片內部的存儲電路分為4塊存儲陣列(就是4個邏輯Bank,也就是前面說的CellArray)每個存儲陣列(邏輯Bank)的存儲單元地址通過“行地址”和“列地址”定位。因此每個存儲單元的地址由三部分組成:邏輯Bank地址、行地址、列地址。尋址的過程是:先指定邏輯Bank地址,再指定行地址,然后指定列地址,這樣就能夠確定一個存儲陣列內的存儲單元。
在實際工作中,邏輯Bank地址與相應的行地址是同時發出的,這個命令稱之為“行有效”或“行激活”(Row Active)。在此之后,將發送列地址尋址命令與具體的操作命令(是讀還是寫),這兩個命令也是同時發出的,所以一般都會以“讀/寫命令”來表示列尋址。
從行有效命令發出到讀/寫命令發出之間有一段時間間隔,這個間隔稱之為tRCD,即RAS to CAS Delay(RAS至CAS延遲),RAS是行地址選通脈沖,CAS是列地址選通脈沖,所以tRCD也可以理解為行選通周期。tRCD是SDRAM(包括DDR)的一個重要時序參數,一般以時鐘周期(tCK,Clock Time)為單位。比如tRCD=2,就代表延遲周期為兩個時鐘周期,具體到確切的時間,則要根據時鐘頻率而定,對于DDR400(時鐘頻率=200MHz)來說,每個周期是5ns,tRCD=2,就是10ns的延遲,對于DDR333來說(時鐘頻率=166MHz), 每個周期是6ns,tRCD=2,就是12ns的延遲。????? 當列地址被選中之后,就會觸發數據傳輸,但是從存儲單元中輸出到數據真正出現在內存芯片的 I/O 接口之間還需要一定的時間(數據觸發本身就有延遲,而且還需要進行信號放大),這段時間就是非常著名的 CL(CAS Latency,列地址脈沖選通潛伏期)。CL時間長短與芯片硬件設計和制作工藝密切相關,因為這個列地址脈沖選通潛伏期取決于芯片的數據觸發電路的延遲和信號放大電路的延遲。所以JEDEC就是以CL、tRCD等參數把DDR400分成A、B、C三個等級。
??? CL 的數值也是以時鐘周期表示。常見有2、2.5、3等。相同工作頻率的內存芯片,CL值不同,實際延遲時間是不一樣的。比如 DDR-400,時鐘頻率為 200MHz,時鐘周期為 5ns,那么 CL=2 就意味著 10ns 的潛伏期,CL=2.5 就意味著 12.5ns 的潛伏期,CL=3 就意味著 15ns 的潛伏期。因此CL=3的DDR400其性能不如CL=2.5的。如果在BIOS里設置了CL=2.5,超出心存芯片的的標稱性能,如果廠家設定的標稱值是接近極限值,沒有超頻的余地,那么就會導致內存讀取數據出錯,表現為藍屏死機。CL=3的DDR400,當BIOS設置為CL=2.5時,其頻率必須降為DDR333(166MHz),才可以穩定工作,當頻率降為DDR333(166MHz),每個周期=6ns,2.5個周期=15ns,延遲時間是15ns。與CL=3時的DDR400(200MHz)延遲時間相同(5ns X 3 = 15ns)。
???? 從上面的分析,可以看出,CL和tRCD參數值用周期表示,屬于相對值,還要乘以實際工作頻率才是實際的延遲時間。而實際延遲時間取決于芯片硬件設計的電路制作工藝。
CL 只是針對讀取操作,對于 SDRAM,寫入是沒有潛伏期的,對于 DDR SDRAM,寫入潛伏期在 0.75 至 1.25 個時針周期之間。
???? BIOS里的內存時序參數設置比較專業,所以JEDEC規定在內存條加一個EEPROM芯片,記錄時序參數設置,BIOS可以讀取這個參數,自動設置。避免用戶錯誤設置。這個紀錄時序參數設置的EEPROM芯片就叫SPD。
我們可以通過看SPD信息了解內存條的性能。
??? 這也就說明為什么在雙通道時,用CL=3的DDR400,如果內存條品質(超頻)不優秀,導致藍屏死機,把速度降為333就可以解決的原因。
???? 微星865主板BIOS的內存時序設置里沒有CL=3的選項,使用CL=3的DDR400會藍屏死機。那些有CL=3選項的主板也會因為使用CL=3的DDR400藍屏死機。我就處理和解決過其他各種品牌主板的這個問題。如果到網上搜索“藍屏死機 DDR400”,就可以看到很多這一類帖子。各種品牌的主板都有。
?? 下面我們再看看tRCD參數,這里小寫的t是timing(時序)的第一個字母,表示時序的意思,RCD就是RAS to CAS Delay的縮寫,其中RAS是行地址選通脈沖,CAS是列地址選通脈沖,tRCD就是行地址選通脈沖到列地址選通脈沖的時間間隔。根據SDRAM的工作原理和JEDEC標準,CPU讀寫內存時,首先發出從行地址選通脈沖(也叫行有效命令),然后發出列地址選通脈沖(也叫讀/寫命令)。從行有效命令發出到讀/寫命令發出之間有一段時間間隔,tRCD就是這個間隔。這個也是由芯片的觸發電路的延遲和信號放大電路的延遲決定的,也就是說是硬件本身的特性。tRCD一般用時鐘周期為單位。比如tRCD=2,就代表延遲周期為兩個時鐘周期,這是相對的。絕對的時間間隔,要根據時鐘頻率而定。
總結
以上是生活随笔為你收集整理的计算机频率、内存相关杂谈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2,列表渲染指令v-for以及过滤和排序
- 下一篇: 马上开课 | 第 3 期临床基因组家系分