SSD的 4K對齊優化

你可能會問:「為何要4K對齊?」(傳統 HHD硬碟不需要 4K對齊!)

Disk, Record Player

因為 SSD的硬體規範是以 4 KB當作最小儲存單位(稱為page),相當於傳統硬碟的扇區(sector),而 NTFS、EXT3、等常用的格式,也是以 4 KB作為一個叢集(cluster),也剛好與記憶體最小儲存單位相符。當寫入一個 4 KB的檔案到 SSD時,不僅填滿一個page,也與記憶體最小儲存單位相符,亦是一個叢集的大小,以這樣方式存取 SSD效能是最佳的。

如果沒有對齊 4 KB的最小儲存單位,儲存資料就會出現同時操作兩個 page的情況而導致效能下降,就好比是原本一隻手就能辦到的事情,卻刻意要用兩隻手來辦。因此分割硬碟的時候將磁區的起始點設定為 4的倍數,而將分割區設定為 4可以整除的數字開始,就稱為「對齊」。

更簡單說:「SSD若沒有 4K對齊,速度會比較慢!」

「如何4K對齊呢?」

關鍵其實不在於分割磁碟,而在於格式化。如果你買來一顆全新的 SSD,只要在安裝新系統前利用安裝光碟來格式化並對齊它就可以。但是 SSD若是已經安裝系統或是有重要資料在上頭的話就必須要借助知名的 AOMEI Partition Assistant來處理。

(當然,這是因為我安裝了 WIN 10出包以後才會這麼問!只是 4K對齊不是我的根本問題。)

你應該還有興趣:

令人傻眼的微軟 Windows 10 系統凍結問題

「我該換 WIN 10嗎?」

windows-apartment

如果你現在 WIN 7(甚至是XP)用得好好的,改成 WIN 10肯定會讓你不習慣一陣子的,尤其是當你發現有系統凍結(freeze)問題的時候,一定會後悔太早當白老鼠...

當然, WIN 7再好用,也不可能一直用下去,只能說多用一年算一年。畢竟時間是最大的敵人,WIN 7早晚會像是 XP那般,官方透過各種卑劣手段不再提供後續安全性更新,然後逐步被一一汰換。

本月手癢之餘,趁著多年來的重整,將原本的用得好好的 WIN 7一口氣升上去 WIN10,原本是存放在 HDD上安然無恙,但轉移至 SSD後就整個悲劇了...。網路上所謂的「凍結」在我電腦上看來,大概就是滑鼠正常運作,但無法做任何點擊,或是螢幕會突然閃爍變黑、畫面整個靜止不動,每隔一小時甚至半小時發作一回。

本以為是 SSD 4K對齊或是韌體問題,卻萬萬沒想到根源來自於偉大的微軟作業系統!

微軟表示「我們目前收到部分用戶回報安裝 Windows 10 年度更新後出現當機情形。這情形發生在將系統安裝在 SSD 固態硬碟,而其他程式和資料儲存在另一硬碟的電腦上。在安全模式中開啟 Windows 10 則無此狀況。若您碰到這項問題,請耐心等待我們進一步調查,並隨時查看這條討論串的更新。

只能說人品不好,啥事情都會遇上的!(哭哭)

接下來,就只能見招拆招。而根據微軟的說法以及網路相關討論,一種方式是退回 Build 10586版本,可惜我沒這機會嘗試。

再來就只能降低效能去換取穩定性,把內建 App Readiness Service服務關閉或者到 BIOS調整 onChip SATA Type為 AHCI。(後者不建議,等於是閹割 SSD)另外其他方式還有嘗試關閉 SuperFetch、Prefetch以及家用群組 HomeGroup 服務。

現在是透過 Disable MSI for the controller in the registry處理方式後,看來正常運作中,後續只能再觀察...(希望不要人品再爆發了!)

你還想要知道:

C# 操作Excel的注意事項

當透過定期排程執行開啟 Office Excel進行相關作業時,通常會遇到一些莫名的錯誤,導致作業系統留下一堆無主的 EXCEL.EXE。這些背景 EXCEL.EXE看似無害,放著不管可是會逐步吃著記憶體,一點一滴霸佔著 CPU的。


按照 MSDN Code Sample的解釋,Excel是屬於 Unmanaged的程式,所佔用的相關資源是不會在一般所撰寫的程式結束時自動回收:
Step9. Clean up the unmanaged COM resource. To get Excel terminated rightly,we need to call Marshal.FinalReleaseComObject() on each COM object we used. We can either explicitly call Marshal.FinalReleaseComObject on all accessor objects:
因此,要確保任何情況下能夠確實釋放資源,程式需要加入 finally區段明確清理並依序關閉 Excel COM+物件,也就是說,在程式中曾經使用的 WorkbookWorksheetRangeCell,結束前都要使用 Marshal.FinalReleaseComObject()清掉以確保Excel程式能順利關閉。

連Range/Cell都要清除,還可真是挺麻煩的!你可能還想要知道:

C# 如何偵測特定檔案是否為 Lock狀態

要怎樣才能有效在 Windows平台上偵測出檔案是被 Lock呢?


這樣的問題常常會在整合 Office時遇到,像是要依照排程開啟 EXCEL檔案,並透過內含的 VBA運算產出報表。但若是中途發生異常或是中斷,會讓 EXCEL檔案開啟著而導致下次排程無法正常開啟檔案。

為了解決此問題,網路上多半的解法都是先試圖去開檔案,當檔案無法正常開啟時就視同檔案被 Lock住。但是這樣的作法不算精確,因為有很多情況下都會發生開檔錯誤,不一定是因為檔案已被開啟的關係

依照 MSDN,找到一個比較正確的方式,是透過 Mashal.GetHRForException方法取得 HRESULT,接著將 HRESULT跟 65535做 AND運算取得對應 error code,這樣就可正確得知檔案狀態。

若 error code為 32或 33則表示檔案被Lock住,反之則是正常狀態。(HRESULT的定義前面十六個 bits為 error code,取得之 HRESULT 結果還要與 65535做 AND運算才能取出error code)
  • ERROR_SHARING_VIOLATION (error code 32)
  • ERROR_LOCK_VIOLATION(error code 33)
你可能還有興趣知道:

「專業」就是連麻瓜都聽得懂的話術

 『 麻瓜 (英語:Muggle),在J·K·羅琳的《哈利波特》系列小說及電影中是泛指沒有任何魔法能力的人,也不是出生於魔法家庭的人。麻瓜也可以被描述為體內沒有任何魔法血統的人。』 Photo by Vitolda Klein on Unsplash 「你不是工程師,我很難跟你...

最近三十天熱門文章