[펌] SSD 프리징 관련 최적화
Tip 2012. 1. 20. 10:19[원본링크] http://cafe.naver.com/notevaio/410172 (카페 가입 필요)
먼저 프리징의 원인에 대해 알아보고, 그 해결 방안을 말씀드리겠습니다.
물론 이것으로 완벽하게 프리징이 해결될지는 미지수 입니다.
아주 간단하게는 FAT32로 포맷하고 포함된 레지스트리 추가해주면 끝납니다. [FAT32은 선택이지만...]
1. 프리징은 왜 일어나는 걸까요??
대체적으로 프리징 문제는 쓰기에서 일어납니다.
어떤 데이터를 쓰려면 SSD는 플레쉬의 특성상 한번 지우고 나야 데이터를 쓸 수 있습니다.
게다가 써야할 데이터 보다 큰 공간을 지워야하죠.
-----------------------------------------------------------------------------------------------------
* 그 이유는 아래와 같습니다. [ 관심있는분만 보셔요. 이 글은 제 추측도 조금 들어간 부분도 있습니다.ㅎㅎ;]
먼저 이 것은 페이지에 관한 것입니다.
운영체제에서는 SSD든 하드디스크든 파일시스템이라는 것을 이용해서 데이터를 읽고 씁니다.
이 파일 시스템은 하드디스크를 1byte나 1bit 단위(아주 작은 단위)로 이용하는 것이 아니고,
NTFS는 페이지 단위로 읽고 쓰게 됩니다. 이 페이지의 크기는 포맷을 할 때 정해 줄 수 있습니다.
NTFS의 경우(보통 윈도우 설치할 때 포맷 형식) 기본적으로 4096바이트죠. 아래와 같습니다.
정말로 4096바이트씩 읽고 쓰는 것일까요??
그건 알기 쉽습니다. 그냥 파일 하나를 간단히 만들어 봅니다.
텍스트 문서를 새로 만들고 1이라는 숫자를 하나 써서 저장해 보겠습니다.
그리고 그 파일의 속성을 보면 아래와 같습니다.
원래 크기는 1바이트인데, 실제로 할당되는 공간은 4096바이트죠.
파일시스템은 이와 같이 한번에 쓰고 지우는 단위가 있습니다.
근데 플레쉬는 4KB(4096바이트)씩 읽고 쓰지 않습니다.
플레쉬에서는 블럭이라는 단위로 읽고 쓰는 것을 수행하는데요. 그건 아래서 살펴보죠
* NAND플레쉬에서 블럭
말씀드린 것처럼 플레쉬에서는 블럭이라는 단위로 읽고 쓴다고 했습니다.
그런데, wikipidia에서 보면 아래와 같은 것이 보통 쓰인다 합니다.
* 32 pages of 512 bytes each for a block size of 16 KB
* 64 pages of 2,048 bytes each for a block size of 128 KB
* 64 pages of 4,096 bytes each for a block size of 256 KB
* 128 pages of 4,096 bytes each for a block size of 512 KB
아까 윈도우에서 NTFS는 4096바이트를 페이지로 쓴다고 했죠.
그럼 한번에 읽고 쓰는 블럭의 단위가 512KB가 됩니다. [256KB도 있지만, 대용량은 512KB를 쓰는 모양입니다.]
즉, 아까 메모장에서 겨우 1이라는 숫자를 하나 써서 1바이트를 저장하려 했는데, 실제로 써지는 부분은
블록 단위이기 때문에, 512KB인 무려 524288바이트를 써야하죠.
이래서 써야할 데이터(한 페이지인 4KB) 보다 더 큰 공간(512KB)을 접근하는 것이죠.
---------------------------------------------------------------------------------------------------
(여기까지 했습니다 -> "게다가 써야할 데이터 보다 큰 공간을 지워야하죠.")
문제는 이 써야할 데이터 보다 큰 공간을 지워야 한다는 점입니다.
플레쉬 특성상 써야할 데이터가 있는 곳은 지워져야한다고 설명 드렸죠.
그런데 더 큰 문제는 써야할 데이터보다 더 큰 공간을 쓰는데, 원래 있던 데이터가 문제가 됩니다.
원래 데이터보다 많은 공간을 지우는 만큼, 자신이 쓰여질 곳이 아닌 곳의 데이터도 함께 지월질 판이죠.
그래서.. 정말정말 SSD 만드는 기술이 없는 곳은 아주 원시적인 알고리즘을 씁니다.
먼저 원래 있던 데이터를 메모리에 저장합니다 [캐쉬같은] 그리고 블록을 지우고 원래 데이터가지 함께 쓰는 것이죠.
그런데 문제는 이 메모리를 저장하는 부분에서 발생합니다. 바로 캐쉬의 크기인데요. 정말 후진 어떤 SSD의 경우
비공식적으로 16KB의 캐쉬를 가지고 있다고 합니다. 512KB를 써야할 판에 16KB를 가지고 있는 것이죠 [...]
인텔의 경우 128G에 32MB SRAM(램중 가장 비싸고 가장 빠르죠 CPU 캐쉬에도 씁니다.)을 쓰고 있습니다.
이러한 캐쉬의 문제와 기타 여러가지 데이터를 지울때 비효율적인 알고리즘이 프리징에 원인이 되죠.
이런 문제는 하드웨어적으로 캐쉬를 크게 하고 알고리즘을 개선하면 충분히 개선되기 때문에
제조사별로 속도 및 프리징 현상이 다른것이죠. 그렇다고 만들어져서 나온 SSD를 어찌 해볼 수는 없는 것 아니겠습니까?
그럼 어쩔 수 없죠. 소프트웨어적으로 이를 개선 해야죠.
2. 프리징을 해결해보자.
글을 들어가기에 앞서 저도 많이 아는게 아니고 다른 방법도 충분히 많다는 것을 알려 드립니다.
- 파일 시스템을 변경하자.
프리징이 심하면 FAT32로 바꾸라는 분들이 계십니다. 이렇게 된 이유가 위에서 언급한 NAND 플레쉬에서 블럭크기
때문이라고 추측하는데요, FAT의 경우 Sector라는 기준으로 파일에 접근하며, 이러한 Sector의 크기는 512Byte입니다.
따라서 블럭의 크기도 16KB뿐이 안되기에 아주 좋죠.
NTFS도 Page 크기를 포맷시 줄일 수 있으므로 그걸 줄이는 것도 좋은 방법입니다. 하지만 윈도우 CD를 넣고서 하는
설치는 기본값으로만 되어 있기에 설치 전에 포맷을 해야하는 어려움이 있죠. 또한 설치가 제대로 될지도 모르겠군요.
또한 FAT32의 경우 NTFS에서의 보안과 같은 기능이 없기 때문에 파일을 읽어들일 경우 속도는 향상됩니다.
NTFS에는 NT계열에서 쓰는 파일시스템(FS)이기 때문에 서버용으로, 속도보다는 안정성과 보안 등을 위주로 되어
있습니다. 따라서 사용자별로 권한이 다르고, 파일을 읽기 위해서는 그 권한을 하나하나 살펴봐야하지요.
전체적인 파일 읽기 속도가 늘어가는건 당연합니다. [프리징과는 관계 없을 것 같군요.]
[ 대부분 디지털 카메라와 같은 임베디드 환경에서는 FAT32를 사용합니다.]
하지만 안정성(파일 오류)을 어느정도 포기하며 여러가지 기능들을 못 사용할 수 있으니
주의를 하시길 바랍니다.
- Prefetch를 불가능하게 하자.
Prefetch라는 것은, 윈도우가 부팅하는 동안 자주 쓰이는 프로그램 같은 것을 미리 로드해오는 것입니다.
이 것을 켜 놓으면, 프로그램이 실행될때마다 Windows폴더 안에 Prefetch 폴더가 있는데 여기에 파일이 추가되며,
이 파일들을 윈도우 부팅중에 로드하게 됩니다. 그런데, 이게 문제가 됩니다. 프로그램이 실행될때 마다 파일을 생성하며
정보를 저장하기 때문에 쓰기가 발생합니다. 애초에 SSD는 접근성이 좋기 때문에, 굳이 이 기능을 쓸 필요가 없으며
제가 비교 사용해본 결과 오히려 끄는게 부팅도 빠르고 속도도 빨랐습니다.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\
Memory Management\PrefetchParameters]
여기에서 EnablePrefetcher라는 값을 0으로, 비스타와 windows7의 경우EnableSuperfetch도 0으로 합니다.
- 파일 시스템을 수정하자.
제목을 보니 정말 거창해 보이는군요. 별거 없습니다. 레지스트리 몇개 추가해 주면 됩니다.
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\FileSystem] 여기에 모든 것이 있습니다.
(없으면 추가해주면 됩니다.)
1. NtfsDisableLastAccessUpdate의 수정
NTFS의 경우 파일을 읽거나 쓰는 등의 접근을 하게 되면 그 시간을 기록하는 기능이 있습니다.
파일 속성에 가보면 액세스한 날짜라고 있을 겁니다. 하지만 정작 보는 사람은 드물 겁니다. [전 여태 본적이 없군요.]
이 것도 역시 파일을 열 때마다 디스크 쓰기 작업을 동반하므로, 불가능하게해줍니다.
NtfsDisableLastAccessUpdate를 1로 합니다. [윈도우 7의 경우 기본 1이군요. 비스타는 모르겠고 XP는 항목이
없으니 만들어야합니다. (레지스트리 파일 실행하면 자동입니다.)]
2. NtfsDisable8dot3NameCreation를 불가능하게 하자.
NTFS에서 긴 이름의 파일을 만들 경우, 이름 8글자, 확장명 3글자의 이름을 따로 저장하는 것 같습니다.
이 또한 필요없으므로 없앱니다.
NtfsDisable8dot3NameCreation를 1로 합니다. 윈도우7에서는 2도 추가 되었는데 이 경우 불륨마다 다른 것을 적용하는
것으로, 1로 하여 Globlal Disable을 해줍니다.
3. NtfsMemoryUsage의 수정
NTFS에 할당되는 메모리의 제한을 늘려줍니다. 단순히 RAM을 늘린다고 이 용량이 늘어나지 않기 때문에
이 것을 늘려주는 역활을 합니다. 다만 RAM 용량이 작은 경우 전체적인 시스템 성능 저하가 있을 수 있습니다.
NtfsMemoryUsage를 2로 해줍니다.
- 여러가지 하드를 위한 기능을 끄자
1. BootOptimizeFunction
부팅을 최적화 해주기 위해서 하는 조각모음입니다. SSD의 경우 조각모음을 하는 것이 수명에 좋지 않다는
말이 있으며 (플레쉬는 같은 곳을 여러번 쓰고 지우다보면 그 곳은 못쓰게 됩니다. 그래서 wearing 기술 같은게 있죠.)
또한 SSD는 접근성이 좋기에 조각모음을 하지 않아도 큰 성능 향상이 없습니다. (약간은 향상 된다고 합니다.)
쓰지 않도록 합니다.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Dfrg\BootOptimizeFunction]에서
Enable을 N로 합니다.
2. OptimalLayout
OptimalLayout 또한 마찬가지로 마이크로소프트에서는 조각모음으로 분류하고 있습니다.
역시 꺼줍니다. [추측하기로는 부팅 향상을 위해 하드디스크의 회전을 고려해서 파일의 위치를 바꾸는 것 같습니다.]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OptimalLayout]
EnableAutoLayout 항목을 0으로 합니다.
- SSD에 쓰는 작업을 아예 없애자. [이 것은 정말 극단의 방법으로 파일을 쓸 때 극한의 귀찮음을 동반합니다.]
성능 향상은 엄청나지만, 이 방법을 쓰려면 일단 RAM이 커야하며, 컴퓨터를 켠채로 아주 긴 시간 동안 쓰진 못합니다.
Enhanced Write Filter라는 것인데.. 원래 윈도우 Embedded에서 사용되는 기술입니다.
디스크에 쓰는 것을 전부 없애고, 쓰게되면 일단 RAM으로 저장하는 방식이고, 역시 휘발성으로 재부팅시 변경 데이터는
손실됩니다. 다만, 변경 된 내용을 저장하고 싶은 경우 저장할 수 있습니다.
이를 하기 위해서는 조금 복잡하므로.. 또한 XP에서만 되는 거로 알고 있으므로..(부트로더를 ntdlr을 쓰기에..)
일단은 설명은 생략합니다. 관심있는 분은 찾아 보시길 바랍니다. 단순히 정보 제공을 목적으로 썼습니다.
'Tip' 카테고리의 다른 글
기업에서 사용 가능한 무료 프로그램 정리 (0) | 2014.09.05 |
---|---|
비주얼스튜디오(Visual Studio) 2010 설치 후 2008 설치 시 (0) | 2014.08.25 |
우분투 14.04 한글이 ???로 보이는 현상 (0) | 2014.05.28 |
Windows7 C드라이브 용량 최적화 (폴더 이동 후 심볼릭 링크 연결) (1) | 2014.05.27 |
윈도우7 설치 드라이브 용량 최적화 TIP (0) | 2012.01.17 |