1/17更新結果__誠心請教有實際使用過萬轉硬碟及SSD

h7878220 wrote:
ramdisk很危險,但是可以考慮改用ram cahe下去做改善,這個方案在SSD上感覺沒那麼明顯,但是用在其它較慢的傳統硬碟上面確有很大的提升。
我有一顆用SD卡RAID 0模擬的偽SSD
速度慢到靠北邊了比普通硬碟更慢,可是掛上ram cahe可以媲美正SSD。
大大可以考慮試試看。(恕刪)


認同+1....
凡人只知RAM DISK.卻不知RAM CACHE才是更安全.也更有效率.尤其在伺服器上面.RAM更不可能拿來開RAMDISK.無論在商業伺服還是工業伺服.不可能做這種不安全的事

就根本而言.儲存設備比2.5"SSD快的還很多.台灣一般買的到的.OCZ RevoDrive 3 X2 PCI-E 240GB★讀寫速度最高可達1500MB/s與1250MB/s★4K隨機寫入200,000IOPS.480GB的更快.960GB再更快.口袋決定速度

最新玩具CM88 1.6TB在ATTO Disk Benchmark中,讀寫都超過2800MB/s....CrystalDiskMark x64隨機讀寫測試,讀取為2175MB/s,寫入為1770MB/s。....別的網站有東西實測.只是...很貴
DRAM 的可靠性,其實是比 硬碟 或 SSD 來的優的

SSD 寫入 5~10萬次(MLC~SLC),顆粒位址就會損壞。硬碟應該多多少少也有同樣問題,只是那個數字更大。而 DRAM 是寫不壞的。

尤其如果有 "ECC 同位元檢查" 加持,可靠性又翻一層樓,不過 ECC 記憶體很貴。

電腦如果會當機,說明硬體有問題,或者散熱需要加強。另有一種可能性是軟體有BUG。


**************************************

凡 Cache 都有「命中率」問題

因為 cache 不可能比儲存裝置大,如果 cache 比儲存裝置大,那就是 RAMDisk,而不是 cache 了。

想要的資料,cache 中剛好有,這叫:命中。

想要的資料,cache 中沒有,需從 硬碟/SSD 讀入,這叫:沒命中。

以 MySQL 資料庫來說,無論怎樣優化,命中率若有 30% 以上,已經是超人表現。

且這 30% 也是要開機運作一段時間才有的,如果是剛開機,cache 是空的,那一開始查詢都會很緩慢。要等 cache 漸漸豐富起來,才能發揮出 30% 命中的效果。


而如果把整個資料庫,塞入 RAMDisk 的話,命中率即為 100%!

因為整個資料庫都在 RAM 中,那當然就是 100% 命中。

且不會有空窗期,開機時會先由腳本把資料拷貝到 RAMDisk 中,然後再啟動相關服務,一上線服務,命中率就是 100% 的,沒有 cache 那種 0% 的空窗期。


此外 cache 若太大,有時反而拖慢效能。

比方說:
cache 有 3GB,資料有 10GB。
優化再怎樣爛,也會有 30% 命中率。

但是每次都要先去掃那 3GB
30% 命中,70% 不命中
當不命中時,才要去 10GB 那裡讀資料

換言之,有 70% 機率,會被拖慢速度。


而如果把整個資料庫塞入 RAMDisk 中,並且 cache 設小小的。

比方說:
乾脆直接設 0MB cache
那就完全不要去讀 cache 了(省時),直接找資料
而資料在 RAM 中,相當於就是 100% 命中的 cache。


當然的,如果把 cache 設和資料等大

比方說:
資料 10GB,cache 也是 10GB

好處是:資料堅持不放 RAMDisk,放 硬碟/SSD 比較保險。

假如 cache 填滿時,命中率會高達 95% 以上

但問題是:會有空窗期,因為開機後,cache 一開始是空的。
如果....你的資料是 10GB..那你就要準備10GB的RAMDISK...但如果你用RAM CACHE.根本不用 10GB

RAMDISK.必須要由HDD COPY到RAM中.也就是必須預讀一次....這動作跟RAM CACHE一樣.都必須讀一次.也就是.當RAMCACHE跟RAMDISK一樣大時.二者是相同的.原理都一樣必讀一次至RAM.然後執行在RAM...所以RAMDISK是上古時期的東西.時代早用RAMCACHE取代了...

歷史:
早期 8086-80286時期.20MB要價 8000.大家都用FDD.就連DOS只支援640K.有RAMDRIVE.SYS這指令來開RAMDISK.然後把BASIC.PE.丟進去執行.這樣遠比在5.25"FDISK快多了.

中期 80486時代.大家都有了硬碟.沒有人會用貴的要死的RAM去開RAMDISK....那時出了二樣東西.一是CACHE軟體.第二樣則時HDD-CACHE卡.上面可插 4條 1-8MB的RAM.在這段時期.CACHE又發展出.HDD上面會開BUFFER.也就是現在的 1TB32M的由來

近代 WIN95之後.RAM便宜了.有人玩RAMDISK.有人玩RAMCACHE.不能說誰對誰錯.如果你的RAM夠大.能把資料全裝進RAM.會重復執行.且有信心能在重置前回存.RAMDISK是對的.
但如果你的資料很大.RAM無法裝進所有資料.也就是要有分頁.或靠外部存取.或有可能來不及重置回存.那選CACHE會更合適.

看看別人這篇文章吧.到頭才發現.裝了 ramdisk 會不會只是為了跑分而已
真實經驗:用Win7 64bit再用ramdsik是走回頭路, 當然比較慢

fedora wrote:
DRAM 的可靠性,...比方說:
資料 10GB,cache 也是 10GB
好處是:資料堅持不放 RAMDisk,放 硬碟/SSD 比較保險。
假如 cache 填滿時,命中率會高達 95% 以上
但問題是:會有空窗期,因為開機後,cache 一開始是空的。(恕刪)

RAMDISK...一開機也是空的.一樣要預讀才能執行.這根CACHE有什二樣?
RAMCACHE 比 RAMDISK 更不保險

CACHE 一般策略就是WRITE CACHE小,READ CACHE大,但那些RAMCACHE不調大WRITECACHE效能不高,調大了回存時間增多就不保險了,最重要是使檔案系統受損,用戶又不知道受損是那兒,RAMCACHE可以使整個硬盤資料損失,所以write cache 的時間性很重要,而且所謂RAMCACHE,說穿了和WINDOWS 下的WRITE BACK CACHE一樣的東西,但WINDOWS CACHE 因有OS 的控制會變得更穩定,軟件也可以發一個 FILE_FLAG_WRITE_THROUGH 給系統要求資料立即存入。

而且本身WINDOWS也會把沒有使用的記憶體轉作磁碟緩存,用RAMCACHE好有點多此一舉。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa364218%28v=vs.85%29.aspxh


RAMDISK也是不保險,但當有大量RAM可用時,把暫存檔放到RAMDISK 上是可以加速,再加上更保護SSD,用在筆記本可以更少訪問SSD,可以更省電呢,如果是伺服器系統,RAMDISK是內置功能,此時專門軟件就會利用很多RAMDISK作直接暫存,而WIN要把暫存放到硬碟,是因為不可以假定系統有大量RAM可用。


伺服器比桌面機貴,但當然保險得多,一塊伺服器PCB的出廠價就比一塊桌面PCB可以貴20倍以上了。

說回此題需求,可以把新機器換作企業級SSD SLC 如美光P320h,他有25PB/50PB的壽命,換作五年使用,
每日可以承受25000/12500GB的寫入,當然價格是不能想像的高 (三千/六千美元)。

http://www.anandtech.com/show/6371/micron-p320h-pcie-ssd-700gb-review-first-nvme-ssd

如果一般家用SSD,主控能否承受高強度也是問題,那麼接近現實的選擇可以是
INTEL 710 這類約千多元美金的入門企業級產品,可以承受至少1500TB 的8KB 寫入
換轉五年使用一天就可以玩約800GB數據了。
cheonglee wrote:
RAMCACHE 比...(恕刪)


贊同+1
現代人.把RAM買大了.卻自尋煩惱
RAMCACHE系統早就做的很好.其實你不用理會.讓系統自行運用RAM吧
RAMDISK卻是在走回頭路.有人真實測得.從COPY到執行運算.到回存.RAMDISK並沒有大勝.RAMDISK速度是100倍的SSD.但好像只贏在跑分上面.

所以還是從真實的SSD.<或PCI-E型的SSD>著手.才是正途....RAM這種東西.有錢就加大.但留給系統用.我們凡人還是別介入太多.系統商開發團隊幾千幾萬人.難到還會不知道RAMDISK這東西嗎?

2008微軟對於SSD看法.看過一篇.請把SSD當成HDD看.別再考量什麼會用壞了.我們能做的.備好銀子.買好一點的而己
開虛擬機小試了一下
select 5百萬筆資料
兩組分別是RAID10 SATA硬碟(7200rpm),單顆SSD 520 180G
MDF不論放在HDD或SSD上的搜尋時間都一樣
看資源監視器,硬碟讀取的速度連10MB/s都不到
單純讀取測不出什麼結果...

還是要請angwo大以實際工作環境去測才知道IO提升有沒有幫助了
M01 前幾天停機維護伺服器,重新開機後不知道大家有沒有感覺:明顯的變慢。開機幾天後,漸漸才恢復原先的速度。

估計八成也就 cache 的問題。因為 cache 剛開機是空的,會有空窗期,要等慢慢的有人去連線查詢,把 cache 塞滿了,命中率才會提昇起來。

而 RAMDisk 是一開始命中率就 100% 的,不存在空窗期。因為:可以事先把資料拷貝到 RAMDisk 中,再去啟動 httpd、mysqld ....等相關服務。

服務一旦啟動,允許外面連線進入,RAMDisk 就已經是"滿" 的狀態,立即提供 100% 的命中率。不會有:剛開機時,速度緩慢....這種空窗期的問題。

************************************************

Linux 核心 kernel 2.6 之後,提供核心內建的 RAMDisk (temp fs 檔案系統)

/dev/shm 就是 RAMDisk,核心直接支援的。

此外也可以在 /etc/fstab 磁區分割表中,直接掛載檔案系統是 temp fs 的磁區。


範例:

Q.如何把 RAMDisk 與 硬碟/SSD,綁成 RAID-1?

架構圖:


作法思路:
● 在「/dev/shm」和「硬碟」 分別建立一個空的 img 檔
● 將空的 img 檔,分別掛載為「虛擬磁碟」 /dev/loop0 和 /dev/loop1
● 把2個虛擬磁碟,組成 RAID-1,指定為 /dev/md0
● 將 mysql 資料庫移動到 /dev/md0,並在原先位置建立一個 ln -s 的軟連結,藉以欺騙軟體
● 如此一來 mysql 的資料庫,實際在 /dev/shm,而又在硬碟裡,便達成了目的


1)創建空的「映像檔」

# 在「/dev/shm」創建一個空檔案,大小為 1GB
dd if=/dev/zero of=/dev/shm/1GB.img bs=1M count=1024

註:bs 固定為 1M 的情況下,藉由改變 count 的值,可以改變映像檔大小。

# 在「硬碟」創建一個空檔案,大小也是 1GB
dd if=/dev/zero of=/home/1GB.img bs=1M count=1024


2) 把「映像檔」,各別掛載為 loop 「虛擬磁碟」

# 掛載虛擬磁碟
losetup /dev/loop0 /dev/shm/1GB.img
losetup /dev/loop1 /home/1GB.img


3) 把「loop 虛擬磁碟」,組成 RAID-1

# 新增 soft RAID
mdadm --create --auto=yes /dev/md0 --level=1 --raid-devices=2 --chunk=4 /dev/loop0 /dev/loop1


4) 格式化 RAID,並掛載成目錄

# 格式化
mkfs -t ext4 /dev/md0

# 掛載成目錄
mkdir /mnt/raid
mount -t ext4 /dev/md0 /mnt/raid


5) 移動 mysql 資料庫

# 停止 mysql
/etc/init.d/mysqld stop

# 移動
cd /var/lib
mv mysql /mnt/raid

# 在原地建一個軟連結,以便欺騙軟體可以正常運作
ln -s /mnt/raid/mysql/ mysql


6) 關機需要什麼步驟?

不用任何步驟,直接 powroff 或 reboot 就行,資料不會丟失。

包括突然的停電意外,也不用怕。


7) 重開機後,如何還原?

重開機後,因為 DRAM 資料消失,/dev/shm 中的映像檔亦跟著消失。且 loop 虛擬磁碟也會消失,原 /dev/md0 的 RAID-1 陣列會處於毀損狀態。

要加入新的映像檔,重新掛載虛擬磁碟,並重建 RAID,才能恢復陣列健康度。

建議把 msyql 設定為開機不自動啟動,改用自己的腳本來啟動

寫一支 shell script 腳本,放入啟動腳本

腳本範例:

#!/bin/sh

# 在「/dev/shm」創建一個空檔案
dd if=/dev/zero of=/dev/shm/1GB.img bs=1M count=1024

# 將「映像檔」,掛為「虛擬磁碟」
losetup /dev/loop0 /dev/shm/1GB.img
losetup /dev/loop1 /home/1GB.img

# 停此 /dev/md0
# 因為當 /home/1GB.img 掛入 /dev/loop1 時,就會啟動 md0,但是那個無法運作
mdadm --stop /dev/md0

# 還原建立過的 RAID
# 以 /dev/loop1(/home/1GB.img)為參考值,還原 md0
mdadm --assemble --force /dev/md0 /dev/loop1

# 將 /dev/loop0(新空白虛擬磁碟)插入 RAID
mdadm --manage /dev/md0 --add /dev/loop0

# 等待幾秒,等 RAID 重建工作,這秒數自行斟酌,看容量大小
sleep 30

# 把 RIAD 掛載成目錄
mount -t ext4 /dev/md0 /mnt/raid

# 啟動 mysql
/etc/init.d/mysqld start

# 啟動需借助 mysql 的相關服務,如 httpd


說明一下「還原 RAID」的部份:

RAID-1 由最少 2 顆磁碟組成。



上圖:還原時,只有指定 /dev/loop1,所以第一槽的位置是空的,代表「磁碟移除狀態」。相當於:把硬碟拔出陣列。



上圖:接著插入 /dev/loop0(新空白虛擬磁碟),此時 RAID 系統會自動重建。會自動把第2槽的硬碟資料,映射到第1槽。相當於:把新的硬碟插入陣列。

重建,需要一些時間,因為它要把第二槽的資料,映射(拷貝)到第一槽。

重建時陣列不能馬上使用,會有不可預期的問題。腳本中要 sleep 一些時間,等它重建完畢,陣列恢復健康度後才能用。


**************************************

以上就是利用「虛擬 RAID」,將 mysql 資料庫放入 /dev/shm 加速。

同時又不必擔心停電資料會消失,因為資料會經由 RAID-1 「即時」「同步」「映射」到硬碟/SSD。


RAID-1 讀取資料時,並不需要兩顆裝置都讀資料,系統會自動判斷速度比較快的那顆來讀資料,或者是從第一部裝置讀取資料。

在此應用下,RAMDisk 做為第一部裝置且速度比較快,讀資料時,會優先從它身上讀取。因此讀取速度會接近 RAMDisk 速度(實際上經過太多虛擬層,速度會有一些降低)。


在一台實體老舊電腦的測試結果(DDR2 單通道記憶體):



由畫面中可以看到:/dev/md0 (磁碟陣列)的讀取速度,快過實體硬碟 /dev/sda 「2倍」以上。

如果直接去測 /dev/loop0 的讀取速度(由 /dev/shm 中的 映像檔掛載而成,即 RAMDiks),也差不多是那個 md0 陣列的讀取速度。

所以可以證明:那是 RAMDisk 讀取速度發揮的效果,已經遠遠超越硬碟讀取速度。

RAID-1 寫入速度的話,會稍微降低,因為需要同步寫入2顆裝置的關係。

至於 Linux RAMDisk 為何那麼慢,慢到那麼誇張,也許那台電腦真的很老舊,也許經過 loop 虛擬掛載,效能大減,這部份我就沒深究了。

在新型的 DDR3 的電腦,效能或許會比較好吧。

總之,RAMDisk 與 硬碟,組成 RAID-1,讀取是有加速效果的。


虛擬 RAID 還有很多玩法,提供幾個思路:

"異地備援"
● 把網路遠端的電腦檔案,掛到本地當虛擬磁碟
● 與本地的虛擬檔案,組成 RAID-1
● 把需要異地備援的 service 服務,放到那個 RAID
● 那麼不就是「異地備援」了。這邊寫入的時候,遠端那邊也會即時同步寫入(映射)。
● 不過網路速度要夠快...XD


"多台電腦的 RamDisk,透過網路組 RAID-0"
● 這台電腦出一點 RamDisk 空間做映像檔,那台電腦也出一點
● 把所有的都集中起來,做 RAID-0
● 一台電腦的 RamDisk 空間很小,但集中多台的,就有很多
● 存取 RAID-0 時,實際上存取每台電腦的 RAM,這個效能不用說了吧
● 讀寫速度或許受限,但 seektime 一定非常的低
● 會受限於網路速度,使用 iscsi 通道,是否可改善「網路傳輸效能」?
● 使用 Linux Bonding 綁定多網卡,是否可改善「網路傳輸效能」?

fedora wrote:
M01 前幾天停機維護伺服器,重新開機後不知道大家有沒有感覺:明顯的變慢。開機幾天後,漸漸才恢復原先的速度。
估計八成也就 cache 的問題。因為 cache 剛開機是空的,會有空窗期,要等慢慢的有人去連線查詢,把 cache 塞滿了,命中率才會提昇起來。
而 RAMDisk 是一開始命中率就 100% 的,不存在空窗期。因為:可以事先把資料拷貝到 RAMDisk 中,再去啟動 httpd、mysqld ....等相關服務。
服務一旦啟動,允許外面連線進入,RAMDisk 就已經是"滿" 的狀態,立即提供 100% 的命中率。不會有:剛開機時,速度緩慢....這種空窗期的問題。
(恕刪)


那就全RAMDisk就好了.cache做什麼.M01真不聰明.這例子舉的不夠好...樓主的資料是"幾十G".會只用RAMDisk就能容納的下?這還要加上程式執行的.也就是X2.樓主上看 100G的RAM...還是覺得樓主還是專心找台好的儲存設備.別玩RAMDISK這東西.光COPY幾十G到RAMDISK.用台慢一點的.就是人家的好幾倍時間.HDD?先去上個WC再回來也還沒載入成功<開機>

fedora wrote:
"多台電腦的 RamDisk,透過網路組 RAID-0"
● 這台電腦出一點 RamDisk 空間做映像檔,那台電腦也出一點
● 把所有的都集中起來,做 RAID-0
● 一台電腦的 RamDisk 空間很小,但集中多台的,就有很多
● 存取 RAID-0 時,實際上存取每台電腦的 RAM,這個效能不用說了吧
● 讀寫速度或許受限,但 seektime 一定非常的低
● 會受限於網路速度,使用 iscsi 通道,是否可改善「網路傳輸效能」?
● 使用 Linux Bonding 綁定多網卡,是否可改善「網路傳輸效能」?
(恕刪)

提出這麼多方法.但只要一張2000MB/S↑的SSD卡<CM88>.就能做的到.一定要跑那麼復雜嗎?<OCZ RevoDrive 3X2系列的也不貴>
angwo wrote:
因工作上需時常處理全國性資料(資料量以G計算),
並且需作大量運算及對硬碟IO,
一次處理完都會產生幾十G的檔案.
且工作有時效性,

目前工作機是萬轉硬碟掛RAID0.
最近要更換電腦,廠商是建議改用SSD掛RAID0來做.
因從未使用過SSD,且以前聽說SSD有寫入次數限制
並且資料消失無法救回,故遲遲不敢做決定.

所以想請有實際使用經驗的大大,
就讀出及寫入數據
耐用性,及資料安全性
SSD掛RAID0速度是否真能快一倍?
還是受限於頻寬,RAID0效能並不明顯?
提供心得供參考

至於資料保存問題,
因牽涉到個資問題,
處理完後約一個月就會刪除,不需保留
只要故障率不會很高,還是可接受....(恕刪)


我想你應該還沒搞清楚
你需要的是運算密集,I/O密集還是兩者都需要的系統吧!

撇開系統價格不談,
如果是I/O密集系統,你會需要RAMDisk的。再來再談你擔心的穩定度!

toocck wrote:
.光COPY幾十G到RAMDISK.用台慢一點的.就是人家的好幾倍時間.HDD?先去上個WC再回來也還沒載入成功<開機>..(恕刪)


如果是家用桌機電腦,是有可能如你所說的那樣

而伺服器的話,比方說每週維護一次,每個月維護一次,甚至說一年才維護一次(註:伺服器 24H 全年無休開機的,僅有週期性停機維護)

每次維護 2小時~1天 不等,應該沒差那 copy 幾十GB 的時間。

以單顆 SSD 每秒 500MB/s 連續讀來說,讀入 10GB 資料,僅需 20秒。若用 RAID-0 的 SSD,這時間還可縮短一半。

不用 SSD,單純用慢速硬碟讀入,也沒關係。畢竟維護時間有 2小時~1天不等。

然後伺服器一開放讓人連線,就是最佳狀態,百人、千人、萬人,等待許久,立刻湧入,毫不 LAG,讚

相當於是「預讀」,cache 也有所謂的「預讀」。不過 RAMDisk 的「預讀」是 100% 的。


cache 和 RAMDisk 本一家的,都是 RAM。

容量小叫做 cahce,容量大叫做 RAMDisk。

那個只是名稱差異而已。本質是一樣的東西。


**********************************

桌機電腦的話,我不關機的,都用待命(S3、STR)。

待命約耗 4W 電,DRAM 會持續供電,資料不會消失

STR 待命,電源開關按下去,一秒可用,不必等待開機過程。

現在的主流電腦,也不一定要按機殼上的開關,按鍵盤隨便一顆鍵就可以開機。然後有顆月亮符號的按鍵(有些是 FN 組合鍵),按下去立刻待命。

PC 電腦現在很少人在關機了,像平板那樣,都用待命的,要用時按下去,立刻可用。

4W 連續待命一個月,電費在 9元左右。


****************************************************

toocck wrote:
提出這麼多方法.但只要一張2000MB/S↑的SSD卡<CM88>.就能做的到.一定要跑那麼復雜嗎?..(恕刪)


SSD 的 seektime 沒有 DRAM 快

比方說:

SSD 的 seektime 平均搜尋時間,是 0.1ms 來講

DRAM 的 seektime 是 0.0001 ms 等級的,幾乎是瞬間

seektime 在隨機存取的查詢應用下(例:資料庫),幫助很大。



(上圖)一般 SSD 的速度



(上圖)RAMDisk 的速度

註:這是 AMD 平台下的 RAMDisk,速度比較慢。如果是 Intel 平台下的 RAMDisk ,連續讀寫是 9GB/S 以上。


連續讀寫的部份不看,主要差別是 4K 隨機小檔讀寫速度。

DRAM 的 4K 讀寫,快 SSD 百倍以上!


如用 HD TUNE 測試,還可以發現 DRAM 的 seektime 是 SSD 的「千倍」以上。

不過 HD TUNE 會挑 RAMDisk 驅動,我目前用的 RAMDisk, HD TUNE 抓不到,所以就沒測了。

這是 DRAM 和 NAND Flash (SSD 的快閃記憶體顆粒)先天上的物理特性差異,NAND Flash 後天在怎樣也彌補不了的。
限制級
您即將進入之討論頁 需滿18歲 方可瀏覽。
提醒:內容可能因過於寫實、驚悚而令人感到不舒服,是否繼續觀看?

根據「電腦網路內容分級處理辦法」修正條文第六條第三款規定,已於該限制級網頁,依台灣網站分級推廣基金會規定作標示。
評分
複製連結