後面是驗證程式,自行編成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 ?!
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;
}