您當前的位置:首頁 > 攝影

電腦記憶體佔用滿會比佔用率很低時更加費電嗎?

作者:由 老狼 發表于 攝影時間:2018-10-29

記憶體要耗電,這大家都知道。但耗電多少人們卻知之不多。知乎的小夥伴們的求知慾是無窮的,這不,知友 @KuRRe8 私信我了這個問題。問題很簡單,但是回答起來卻並不容易。思來想去,如果不在這個問題上加入一定的限定,結果就會非常發散,不利於瞭解問題的本質。我在這裡加上“同一臺電腦,相同記憶體配置時”的約束條件,問題變成“同一臺電腦,相同記憶體配置時,記憶體佔用滿會比佔用率很低時更加費電嗎?”,避免浪費筆墨,來討論一些不必要的分支條件,縮小問題結果的集合。

知其然,且知其所以然,瞭解現象的本質,這是本專欄的宗旨。要理解費電嗎的答案,我們需要先從記憶體電力消耗的原因和組成談起。

記憶體耗電的原因和構成

一個記憶體條(以下用DIMM代替)插入主機板後,讀寫記憶體和無事可幹時到底耗電多少呢?要了解這個問題,我們先要理解記憶體是如何進行讀寫操作的。這裡需要些背景知識,如果對深入這個問題沒有興趣的朋友可以直接跳過本節:

從上面這些文章中我們知道,DIMM是由Rank, Chip和Bank組成。一個簡化的DDR3記憶體結構框圖如下:

電腦記憶體佔用滿會比佔用率很低時更加費電嗎?

1Gb DDR3 SDRAM Functional Block Diagram(出自參考資料1)

在clock enable (CKE)使能後,每一次讀寫操作大致分為三個步驟:

1.

傳送ACTIVATE(ACT)命令,它會選中一個bank中的一個行row,row的內容會進入Row的buffer中,也就是結構框圖的sense amplifier:

電腦記憶體佔用滿會比佔用率很低時更加費電嗎?

2.

傳送讀寫命令(RD/WR),在Row Buffer上的一些列Column會被挑出來,放到資料線上。

電腦記憶體佔用滿會比佔用率很低時更加費電嗎?

3.

結束後傳送pre-charge(PRE)命令,清理現場,為下一次ACT命令做準備:

電腦記憶體佔用滿會比佔用率很低時更加費電嗎?

除此之外還有on-die termination (ODT)命令,為了簡化起見,我們不再贅述,感興趣的同學可以參看:

那麼不做任何事的時候呢?DIMM上很多器件還是有電的,這時候消耗的電力叫做Background(背景)功耗。這時電流消耗主要是過一段時間重新整理Refresh一下各個bank,保證資料不丟失並且因為CKE的開啟,各個器件處於待命的狀態,隨時準備接受ACT等等命令。

原理就介紹到這裡,那麼各個部分耗電幾何呢?記憶體耗電和電壓、頻率十分相關,DDR4比DDR3電壓低,更加省電。DDR3L比DDR3也省電,但頻率上不去。在給定記憶體的前提下,參考資料1給出了Micron的結果,1G DDR3 DIMM功耗:

電腦記憶體佔用滿會比佔用率很低時更加費電嗎?

資料來源:Micron

電腦記憶體佔用滿會比佔用率很低時更加費電嗎?

資料來源:Micron

電腦記憶體佔用滿會比佔用率很低時更加費電嗎?

資料來源:Micron

需要指出的是,這個資料沒有利用任何Intel CPU給出的省電狀態。Intel CPU會根據記憶體空閒狀態,將一直處於idle狀態的Rank放入Active idle或者pre-charge idle的模式下,節省一部分背景功耗。

耗電問題解析

現在回到我們的問題上來:“同一臺電腦,相同記憶體配置時,記憶體佔用滿會比佔用率很低時更加費電嗎?”

答案並不唯一,和當時的workload有關。我們從workload最大到最小逐個分析一下。

1.

假設情況A,電腦記憶體需求很高,所有記憶體都被分配完畢,電腦還在不停地從外部快取換入換出頁表。情況B,電腦記憶體需求量不高,有一半記憶體空置,但被分配過的記憶體被頻繁訪問。

因為外部快取往往在硬碟等裝置,它的延遲和功耗往往遠遠大於記憶體。這種情況,毫無疑問,A耗電記憶體部分遠大於B。

2.

情況A,電腦記憶體全部被佔滿,但也不需要新記憶體,記憶體被頻繁讀寫。情況B,記憶體一半佔滿,另一半空置,佔滿部分被頻繁讀寫。

透過前面介紹的原理,很容易得到結論:A情況的後面一半會耗費最大的功耗,而B的空閒部分只有背景功耗甚至是Active idle或者pre-charge idle狀態。所以功耗A大於B。至於具體差多少,大家可以根據上面那個功耗列表計算一下。Active idle和pre-charge idle的功耗大約是5mw左右。

3.

情況A,電腦記憶體佔滿,但電腦已經空閒下來,沒有什麼記憶體讀寫操作。情況B,記憶體佔用一半,也沒有記憶體讀寫操作。

A和B都工作在只消耗背景功耗的模式下,唯一的區別是儲存的內容不同,需要指出的是存0和存1,背景功耗沒有什麼不同。所以這時,A和B的功耗是一樣的。

這裡有個現實的例子,伺服器部署資料庫大小不同的功耗情況:

電腦記憶體佔用滿會比佔用率很低時更加費電嗎?

X軸是記憶體佔用率,可以看出大部分功耗曲線是幾乎水平的。

最後的廢話

我在另外一篇文章中:《為什麼現在的電腦都這麼吃記憶體?》介紹了現在Windows和Linux總是傾向於預讀取很多內容來提高效能,所以現實情況是一開機記憶體就被佔光了,空空蕩蕩的記憶體往往並不會再出現了,所以記憶體讀寫與否,是不是工作在只有背景功耗模式下,才是決定記憶體耗能的關鍵性因素。

記憶體功耗,據統計佔據筆記本系統5%的能耗,而在伺服器產品中則高得多。目前對它的功耗控制做的並不好,很多高階的功能並沒有在產品中使用。對它的節能,現在越來越被提上日程,我在參考資料裡面列出了一些相關研究,有興趣的讀者可以作為擴充套件閱讀了解一下。

更多BIOS知識盡在BIOS培訓雲課堂

另一個類似的文章:

其他記憶體相關文章:

歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號“UEFIBlog”,在那裡有最新的文章。

電腦記憶體佔用滿會比佔用率很低時更加費電嗎?

用微信掃描二維碼加入UEFIBlog公眾號

參考資料:

[1]:

https://www。

micron。com/~/media/docu

ments/products/technical-note/dram/tn41_01ddr3_power。pdf

[2]:

https://

upcommons。upc。edu/bitst

ream/handle/2117/98303/DReAM+an+Approach+to+Estimate+Per-Task+DRAM+Energy。pdf;jsessionid=9890DEE6C49866A696DE08D7C1E74461?sequence=1

[3]:

http://

users。ece。cmu。edu/~omut

lu/pub/memory-dvfs_icac11。pdf

[4]:

https://

arxiv。org/pdf/1705。1029

2。pdf

標簽: 記憶體  功耗  耗電  idle  DDR3