NoName Team 電腦資訊討論區

 找回密碼
 我要註冊
搜索
查看: 10350|回復: 20

[討論] 關於ramdisk的閒聊——利用記憶體優化運行速度、保護硬盤

[複製鏈接]
發表於 2016-8-6 23:59:36 | 顯示全部樓層 |閱讀模式
這個帖子也不是什麼迫切需要解決的問題,只是關於使用電腦的閒聊,也不知道發在這裡合不合適哈?

最近有打算給筆記本加內存,2G加到6G。遇到很多問題,有的解決了,有的還沒。沒解決的都是些小問題(有些偏向理論性的、未必實際的),但或許需要大神級別才能解答。加內存看上去很簡單一件事,但是會引申出各種各樣的問題。

首先,要不要安裝64位系統(我現在32位)?
好處不用說,直接識別所有內存。
壞處:
1.64位系統運行32位程序會不會慢?搜索一番,結論是:慢的大約只有1%,可以忽略。
2.重裝很麻煩。
所以說主要是重裝麻煩的因素。

那麼32位系統能不能用6GB內存呢?
有這麼幾個方法:
1.破解核心。這個方法好像有可能導致系統崩潰,不安全。
2.ramdisk號稱可以使用系統未識別內存。

於是我進一步詳細了解ramdisk。(當然我事先就知道ramdisk是用來幹嘛的,ramdisk的基本功能是模擬硬盤。支持系統未識別內存只是輔助功能)
搜了一下才發現ramdisk有3家:
1.ramdisk4g。网友gavotte开发的Ramdisk,是从微软的Ramdisk改写的,完全免费。但是由於我看過這篇文章:
终于知道ramdisk 4g是如何使用4G以上内存了,慎用!-远景论坛-微软极客社区
http://bbs.pcbeta.com/viewthread-413990-1-1.html
所以它不安全。
據該文章,randisk4g的原理是ddk api: MmMapIoSpace。
2.primo ramdisk。
3.SuperSpeed ramdisk。

2和3比較起來,2(primo)可以搶在系統加載前啟動,比3(SuperSpeed)好。而且3好像不支持32位系統還是怎麼,反正我暫時只考慮用2。

primo ramdisk官網的原話:“未識別內存管理接口(UIMMI)。這個管理接口提供了一個統一的方式來管理和使用未識別內存。”講得好像很簡單,但是在下面又有“避免同時使用未識別內存導致的衝突問題。通常這些保留空間為主板集成顯卡使用。”
http://www.romexsoftware.com/zh- ... ment-interface.html

也就是說,它跟前面提到的ramdisk4g有著同樣的問題:需要避免與其它硬件使用同一塊內存。這個頁面也提供了避開內存衝突的辦法,就在上面這個鏈接中,大概就是用試驗看看會不會花屏的方法,有興趣了解的請點進去。
但是在我看來,這個方法不夠嚴謹:
1.它假定了只有顯卡這個硬件使用了未識別內存。如果還有未知硬件在使用別的地址呢?那不就留下隱患了?
2.這樣亂搞,確定不會傷害到顯卡嗎?

所以我繼續了解關於顯卡和未分配內存的知識。
差不多到這裡我就進行不下去了。
關於顯卡,有這麼幾個小問題:
1.我用的是A卡,通過“Catalyst Control Center”(就是在任務欄右下角的一個圖標點進去)可以直接查看到有1024MB內存(也就是顯存),也就說明是獨立顯卡。
但是,我在性能信息和工具裡面,卻看到:
显示适配器类型 ATI Mobility Radeon HD 6370
  可用图形内存总数 1754 MB
        专用图形内存 1024 MB
        专用系统内存 0 MB
        共享系统内存 730 MB
是因为1GB显存不够用吗?
2.我現在的內存是2GB,100%可以識別。那麼它肯定用的是系统已识别内存。问题就是,如果扩大到6GB,还安全吗?

關於內存映射。
在“系統信息”裡面,“系統摘要-》硬件資源” 下,有“內存”和“I/O”等。
1.可以看到我顯卡的內存資源有佔用0x94000000-0x940FFFFF這樣的地址。這應該就是PAE的作用了吧?(我的電腦是PAE開啟的,在AIDA64下可以看到)。那麼如果內存加到6GB,有可能內存映射會變化,也就有可能變到未識別內存那裡去了。
2.在“I/O”下,也有顯卡對應的資源,但是這些好像不是內存地址,不明白是什麼。
3.總之,就是,理論上可以通過這裡的數據,得知系統未識別內存的使用情況,進而可以避免ramdisk出現意外。

時間原因,先寫這些。對我自己也是個總結。
發表於 2016-8-7 03:51:50 | 顯示全部樓層
本帖最後由 阿達金田一 於 2016-8-7 03:56 編輯

簡單一點說...這只是 MMIO(Memory Mapped I/O) 的問題

http://www.techbang.com/posts/88 ... rove-capacity-usage
http://stenlyho.blogspot.tw/2008/08/io.html

對 電腦硬體 x86 來說...  是用 PAE 來存取 4G 以後的記憶體
https://zh.wikipedia.org/wiki/%E ... 0%E6%89%A9%E5%B1%95

而對 win x86 來說...通常 PAE 是都有開啟的... 也就是 win x86 ... 系統 其實都可以用到 4G 以上...
所以...只是 M$ 對 win x86 做的限制而以...( 要你換 x64 )
拿 linux x86 來說...只要有安裝 PAE 支援... Linux 都是能用 4G 以上
而 win x86 是開了 PAE ... 但是 系統 還是不給 ram 用 4G 以上 ... 只能另外用 修改補丁 或是 用 ramdisk ... 等其它方式去用 4G 以後的部份

所以不管 ramdisk 是如何用到 4G 以後...
如果...  有超過 1個 以上的 硬/軟體 ... 有使用到 相同的 定址 ... 那就是會有衝突
例如...
假設用 ramdisk ... 而 ramdisk 使用的 定址 ... 其中有一部份剛好是 顯卡 在用的話
那在 I/O Ramdisk 時...如果 I/O 到 顯卡 在用的部份...那等於是在對 顯卡 做 I/O ... 當然就會有問題

不過我個人覺的...除非 ramdisk 沒寫好...不然應該是不會這樣...
因為大多的 硬體 定址範圍 是可以查到的... (就像你用 裝置管理員 都可以看到一部份的資料)

針對 MMIO ... 也有所謂的 memory remapping ... 用來重新定義 MMIO 位址
http://marksu22.pixnet.net/blog/ ... 0%E7%94%A8%E7%9A%84

有的 主機板 本身會提供 memory remapping 功能...
至於 軟體 能否做 memory remapping 我就不太清楚

所以 MMIO 的情況 一部份要看 主機板 的設計...
像我曾經用過一個 主板 ... 灌 XP.. 扣掉 內顯 佔用的 768M ... 實際可用的 ram 的確有 3.25G ... 沒有 MMIO 的問題

另外...有時 記憶體不能全部使用 可能也不是 MMIO 的問題... 而是主機板本身設計的問題
例如 http://www.mobile01.com/topicdetail.php?f=300&t=3755748&p=2
回文中有寫... 換個 ram 插槽 就好了
發表於 2016-8-7 04:19:47 | 顯示全部樓層
本帖最後由 阿達金田一 於 2016-8-7 04:53 編輯

再補充
PAE 簡單說就是可以讓 x86 用到 4G 以上 ... 不用想的太複雜
而 MMIO 不管有沒有 PAE ... 都還是有 MMIO ... 這是一個 硬體 I/O 的方式而以

win x86 一般其實都有開 PAE ... 所以 系統 本身其實都可以識別到 4G 以上...
只是可以用的只有 4G 而以...這是 系統(M$) 自我限制的...
一部份可能是因為...在 整體架構 都是 x86 的情況下...
如果只有 核心 可以 4G 以上 ... 例如
用 修改補丁 ...修改 win x86 的核心程式
http://blog.xuite.net/aarongaw/SE/47325895-%E8%A7%A3%E9%96%8B32%E4%BD%8D%E5%85%83Win+7%E8%A8%98%E6%86%B6%E9%AB%944GB%E9%99%90%E5%88%B6+ReadyFor4GB

而其它的 Driver 或 程式 還是只用 x86 來定址... 就可能會有問題 ( 除非能保証 Driver 全都使用前 4G )
維基PAE 中也有寫
Windows XP SP2和其他新的版本,默認在有no-execute (NX)和execute-disable (XD)特性的處理器上以PAE模式運行以允許NX。NX(或XD)在頁表項的第63位。如果沒有PAE,頁表項只就32位元;所以要利用NX這個特性的話,就必須運行在PAE模式下。但是,基於為保證驅動兼容等原因,微軟通過許可證,在內核中把桌面版Windows(包括Windows XP、Windows Vista和Windows 7)和部分低端Windows Server的物理地址空間限制為4GiB。

說的簡單一點... Driver 也要支援 PAE

所以...win x86 要玩 4G 以上...
核心不修改...MMIO 最好是都在 4G 前(不用 remap)... 然後 4G 以後用 ramdisk


至於 顯卡 的 共用系統記憶體... 並不是 MMIO
http://tsowen.pixnet.net/blog/po ... B%E6%8A%80%E8%A1%93

簡單的說...就是拿 系統ram 當 顯卡ram 用... 但它本身還是 系統Ram
發表於 2016-8-7 06:34:51 | 顯示全部樓層
本帖最後由 wang_966 於 2016-8-7 06:38 編輯

1.請問為何想將2G加到6G? 2G確實少了一點, 一般而言加到4G便足以應付多數需求,
  , 如果超過4G似乎改用64位元作業系統為佳.

2.個人在32位元作業系統會使用 Gavotte RAMDisk 設虛擬磁碟約768M在 V:
   供 Firefox/Chrome/IE 的快取之用, 如此一來播影片較為順暢, 且可減少硬碟的耗損.
   ( 在64位元作業系統可改用PE常用的 ImDisk ).

3.除非是須要用到大量的運算, 或要用的軟體只提供64位元版, 否則不一定要用64位元作業系統.

4.有少數軟體在64位元作業系統須跑64位元版的才能正常運作, 例如: Avidemux 2.6.12 (影片剪輯).

5.儘量用免安裝版的軟體, 如此在系統轉換時會較省力.
   

 樓主| 發表於 2016-8-7 18:48:29 | 顯示全部樓層
小結:
現在還不能確定能不能查到內存映射的情況。我前面雖然看到了0x94000000-0x940FFFFF這樣的地址,但並沒有說這些地址被映射到哪裡去了。也就是說,尚不確定這部分是否對應用程序透明。如果透明的話,那麼就如你說,這是軟件設計得不好。
能夠查看完整的映射嗎?

關於PAE、memory map、I/O,我目前還不太理解,慢慢來。這幾個東西的層次關係很重要。我還是想以上面一段說的為突破口:能否查看完整的映射。
關於PAE
X86 client versions with PAE enabled do have a usable 37-bit (128 GB) physical address space.
——來自微軟官網






新的問題與思路:
Windows任務管理器的“進程”一欄下,所有進程的內存總和明顯小於已佔用內存。到底什麼在佔用?我猜是顯卡。我的電腦A卡,查到說它有一種技術可以借用內存(前面金田一大大的回文也有提到)。所以我想我的電腦的內存是它主要佔用的(那麼算下來真正win7系統也就佔用500M左右?)。還看到有人說,win7剛啟動就內存佔用高是因為superfetch,這點我不太認同,詳細見下面“資源監視器”部分。
我還看到,有人的顯卡會導致系統識別的內存減小,他的顯卡會佔用1GB以上的“為硬件保留的內存”,而這部分內存不被系統識別(即,在“我的電腦-屬性”裡面看到的可用內存小於安裝內存)。
但我的顯卡不會這樣。我的“為硬件保留的內存”總共只有75MB。

superfetch怎麼關不掉

資源監視器中,“內存”一欄可以看到物理內存的分配條形圖。分為:
1.為硬件保留的內存
2.正在使用
3.已修改
4.備用
5.可用
第三個,黃色的“已修改”是什麼???
第四個“備用”,就是“緩存”或“快取”。按我的理解應該是superfetch用的。但是把superfetch服務關掉了,也仍然會有。非常不理解。
第五個“可用”其實就是“空閒”(Windows任務管理器下的措辭)。

ramdisk這一類軟件有沒有“swap out to pagefile”的風險?就是說,在內存吃緊的時候,ramdisk中的數據會不會被弄到pagefile.sys中去?如果ramdisk中的數據又被寫回到硬盤的話,就不能達到加速的目的了。然而,內存中的數據什麼情況下會被寫到硬盤中(pagefile)又不是我們能完全控制的。
這也是為什麼我打算將pagefile放到randisk中去。
引用一段:

所建立的 RamDisk (應該是 Virtual Disk), 其實並不能拿來放 pagefile. 原因是這個命令是由 System Virtual memory 來配置記憶體, 而這些 virtual memory 本身是可能被 swap out to pagefile 的. 這樣造成衝突, 結果就是當機.

上面一段乍看有道理,但是想想覺得不對。只要我把系統唯一的pagefile放到ramdisk中去,並且ramdisk能在系統啟動前加載,就能完美模擬pagefile了。
 樓主| 發表於 2016-8-7 18:49:56 | 顯示全部樓層
wang_966 發表於 2016-8-7 06:34
1.請問為何想將2G加到6G? 2G確實少了一點, 一般而言加到4G便足以應付多數需求,
  , 如果超過4G似乎改用64位 ...

如果是加到4G,系統僅識別3.2G(也有的說3G),剩下700多MB,我又擔心硬件佔用(如顯卡),又想把pagefile.sys放進去。所以保守起見,4GB有點不夠。

請問您在使用ramdisk的過程中有沒有將pagefile.sys放進去?如果沒有,請教一下,ramdisk這一類軟件有沒有“swap out to pagefile”的風險?就是說,在內存吃緊的時候,ramdisk中的數據會不會被弄到pagefile.sys中去?如果ramdisk中的數據又被寫回到硬盤的話,就不能達到加速的目的了。然而,內存中的數據什麼情況下會被寫到硬盤中(pagefile)又不是我們能完全控制的。
這也是為什麼我打算將pagefile放到randisk中去。

另外請問,Gavotte ramdisk支持ntfs嗎?因為我在網上一篇2012年6月的文章看到說,“缺點和buffalo類似,默認不支持ntfs(沒記錯的話好像可以用特殊方法強行建立)”。
 樓主| 發表於 2016-8-7 18:53:31 | 顯示全部樓層
阿達金田一 發表於 2016-8-7 03:51
簡單一點說...這只是 MMIO(Memory Mapped I/O) 的問題

http://www.techbang.com/posts/88 ... rove-capaci ...

这个换插槽也真是。。除了双通道,之前还从未听说插槽有什么区别。该不会是接触不良的原因吧?正如你说,“主機板本身設計的問題”。
 樓主| 發表於 2016-8-7 18:53:31 | 顯示全部樓層
阿達金田一 發表於 2016-8-7 03:51
簡單一點說...這只是 MMIO(Memory Mapped I/O) 的問題

http://www.techbang.com/posts/88 ... rove-capaci ...

这个换插槽也真是。。除了双通道,之前还从未听说插槽有什么区别。该不会是接触不良的原因吧?正如你说,“主機板本身設計的問題”。
 樓主| 發表於 2016-8-7 18:55:57 | 顯示全部樓層
关于ramdisk,原来有好多家。
但我还是倾向于primo。
有一份性能测试:
http://fiehnlab.ucdavis.edu/staf ... disk-benchmarks.pdf
primo排名第二。
排第一的太简陋了,不好操作。
 樓主| 發表於 2016-8-7 18:56:03 | 顯示全部樓層
本帖最後由 huhiha 於 2016-8-7 19:07 編輯

趣聞2則:
1.關於ramdisk
“我的8G內存,分了4GC盤緩存,其餘的給了其他分區,在資源管理器裡顯示內存佔用時刻都是100%


2.關於superfetch
“還是開啟吧,不開系統慢。而且據我使用,要是關了,內存佔用反而大了,不解!”
PS:我的感受也是這樣。
您需要登錄後才可以回帖 登錄 | 我要註冊

本版積分規則

小黑屋|手機版|NoName Team 電腦資訊討論區 |網站地圖

GMT+8, 2025-8-19 02:38 , Processed in 0.093049 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表