瀏覽單個文章
jjkkll
Basic Member
 

加入日期: Feb 2003
文章: 23
引用:
作者jjkkll
純分享530,不知道這顆能不能撐到5年

http://i.imgur.com/n5j28I0.png


以下提供寫入放大的解決方法,已徵得該文作者同意轉載分享到PCDVD
該文章網址出處如下
https://fonwin.blogspot.tw/2016/04/...-535-10-15.html

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

先解決 wfpdiag.etl 頻繁寫入的問題: netsh wfp set options netevents = off
如果可以, 把 swap file 移到傳統 HDD
其他SSD優化設定...自行 google...
底下是驗證結果:
SMART: Total NAND Writes(F9), Total LBAs Read(F2), Written(F1)
2016/4/13-16:00 749G(F9) 83.75G(F2) 76.09G(F1)
2016/4/18-20:47 781G 141.84G 96.59G
5天增加 32G 58.09G 20.5G
這5天的寫入放大僅1.5, 執行此程式之前竟然會接近10 ?!



#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;
}
     
      
舊 2016-05-20, 09:28 PM #181
回應時引用此文章
jjkkll離線中