2016年4月18日 星期一

Intel SSD 535 (240G) 寫入放大 10倍 變成 1.5倍 的方法

如果 0.5秒就去讀取一下 SSD, 就能避免大量 Total NAND Writes(F9)
後面是驗證程式,自行編成exe之後,放到系統啟動時自動執行。
此程式僅會增加 SSD 1KB/sec 的讀取,對系統影響非常小。
希望 Intel 能提供韌體徹底解決。

  1. 先解決 wfpdiag.etl 頻繁寫入的問題: netsh wfp set options netevents = off
  2. 如果可以, 把 swap file 移到傳統 HDD
  3. 其他SSD優化設定...自行 google...
  4. 底下是驗證結果:
  5. SMART: Total NAND Writes(F9), Total LBAs Read(F2), Written(F1)
  6. 2016/4/13-16:00     749G(F9)           83.75G(F2)   76.09G(F1)
  7. 2016/4/18-20:47     781G              141.84G       96.59G
  8. 5天增加               32G               58.09G       20.5G
  9. 這5天的寫入放大僅1.5, 執行此程式之前竟然會接近10 ?!
2016/08/04 已將底下程式 source & exe 放到 github:
https://github.com/fonwin/issd-rx
最近觀察寫入放大約2倍左右

#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
   int sleepms = 500;
   if(argc > 1)
      sleepms = atoi(argv[1]);
   printf("SSD read interval: %d ms\n", sleepms);

   DWORD DesiredAccess = GENERIC_READ|GENERIC_WRITE;
   DWORD ShareMode = FILE_SHARE_READ;
   DWORD CreationDistribution = OPEN_ALWAYS;
   DWORD FlagsAndAttributes = FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING;
   HANDLE FD_ = CreateFileA("./dummy", DesiredAccess, ShareMode, NULL, CreationDistribution, FlagsAndAttributes, 0);

   DWORD rsz = 0, wsz = 0;
   char  buf[1024] = { 0 };
   if(::GetFileSize(FD_, NULL) < sizeof(buf))
      WriteFile(FD_, buf, sizeof(buf), &wsz, 0);
   __int64 tms = 0;
   __int64 totalrx = 0;
   for(;;) {
      SetFilePointer(FD_, 0, 0, FILE_BEGIN);
      ReadFile(FD_, buf, 512, &rsz, 0);
      if(rsz == 0)
         printf("[fd=%p, r=%d,w=%d]", FD_, rsz, wsz);
      totalrx += rsz;
      SleepEx(sleepms, TRUE);
      if((tms += sleepms) % (1000*10) == 0) {
         __int64 secs = tms / 1000;
         printf("\r[Spent time: %lld:%02d:%02d][Read %lld bytes]"
                , secs/60/60, (int)(secs/60)%60, (int)(secs%60)
                , totalrx);
      }
   }
   CloseHandle(FD_);
   return 0;
}

9 意見 :

風人 提到...

在 for 迴圈裡面並沒有寫的動作, 你可能要再檢查一下!

Unknown 提到...

板主,你好
是否可以借分享該文章到PCDVD網站呢?
謝謝

風人 提到...

OK, 註明出處即可

Unknown 提到...

Re: 風人 <1766290013889251019>

多謝板主分享
PO文時會註明出處
謝謝

winchen 提到...

可以幫我做個 exe 檔嗎?
要 XP 以上可以跑得
我現在 2000hr
健康度已經 97%
寫入放大達到 39倍
救命喔!~

風人 提到...

Re: Win Chen <7422761630053307299>
已放上 github:
https://github.com/fonwin/issd-rx
但 XP 不支援

Unknown 提到...

風人兄你好
感謝你的分享
但請問為何WIN10在CMD設定ISSD-RX背景執行時
顯示使用者帳戶一定要設定為密碼登入才可成功在背景執行呢?
剛看工作管理員反覆試了幾遍
若沒用密碼登入就不會執行
有設密碼登入則有,謝謝!

Chiron 提到...

您好
不好意思,我想請問如果兩顆535,
是否只要把exe放在系統碟上執行就好?

風人 提到...

Re: Chiron <6339997892913434774>
每顆 SSD 都要執行一份