Tistory View

반응형

쓸데없는 서론

SSD가 나온지 이제 꽤 시간이 지났다. 기본 부팅시스템은 SSD를 대부분 사용하고 있는 상황이고, 여유가 되는 사람들은 SSD로 데이터 저장공간으로 사용한다. 나스 등의 대용량이 필요한 사람의 경우 여전히 HDD를 추가로 사용하지만 SSD가격이 점점 낮아지며, 빠르게 HDD를 대체하고 있는 것은 사실이다.

 

나에게 신세경을 맛보게 해준 첫 SSD 삼성 830/128G

SSD 속도가 느려짐

SSD를 처음 사와서 속도 측정을 해 보면 정말 아름다운 속도를 보여준다. 심지어는 USB로 연결할 경우 버스속도의 최대치를 뽑아 주는 녀석이다. 이 것은 SSD가 버스속도보다 빨라서 제한에 걸리는 상황이다. 이런 SSD를 계속사용하다보면 느려지는 것을 느끼게 되는 데, 필자의 경우 연속전송속도가 50MiB/s 밖에 안나오는 것을 경험하는 일이 잦아 졌다. 하지만 SSD의 구조상 오래 쓴다고 해서 이렇게 급격하게 느려지는 것은 말이 되지를 않는다. 뭔가 잘 못되었거나, 아니면 이 것이 정상일 수있다. 특히 오랜동안 사용한 SSD의 경우라도 정상인 경우가 대부분이다. 필자가 5년넘게 쓴 SSD가 이런 현상이 발생하여(이미 이전부터 시작된 증상이다) 짱구를 떼굴떼굴 굴리기로 했다. 오래쓴다고 느려질리는 없으니...

 

SSD의 Wear-Leveling

SSD의 칩의 셀은 수명이 그리 좋지 않다. 쓰는 횟수가 정해져 있기에, 이 쓴 횟수가 되면, SSD의 Controller는 이 셀을 잠궈버리고, 한번 더 쓰면 더 이상 사용하지 못하게 표시를 한 후 죽여 버린다. 저장하려는 데이터는 다른 셀에 써버리면 그만 이다. 물론 더이상 쓸 공간이 없다면 전체 SSD가 잠기면서 읽기만 가능한 상태로 바꿔버린다. MLC셀을 사용한다고 해도 1만번정도 밖에 되지 않기 때문에 쓰기작업을 하면 가장 쓰기가 덜될 셀에 쓰게 되고, 셀을 계속 바꿔가면 작업을 하도록 하는 것이 Wear-Leveling이다. 즉 전체셀을 순환하는 방식을 써서 Lock이 되는 것을 최대한 방지하고, 수명을 늘리는 방식이다.

이 Wear-Leveling의 알고리즘을 얼마나 잘 만드느냐에 따라 수명은 천차만별이 되고, 제조사마다 더 오래쓸 수 있게 계속 이 알고리즘을 개발/수정하고 있다. 참고로 너무 오래전의 USB메모리가 아니면, USB메모리도 이 Wear-Leveling 기능을 이미 수행하고 있다. SSD만의 고유한 특징이 아니라는 것이다. 간단히 말하면 TLC(약1000회 쓰기)가 판을 치는 세상에 USB나 sdcard에 이 기능이 없다면 한달도 못쓰고 잠겨 버릴 수 밖에 없다. 혹시나 USB Stick이나 SD카드에 이 기능이 없다고 생각하는 사람들이 있을 까봐 적어 둔다.

 

속도가 느려지는 이유

SSD는 데이터를 써야 할 때, 이미 깨끗이 지워진 셀이 있으면 바로 지워져 있는 셀에 써야 하지만, 이런 셀이 없다면, 셀을 지우고 써야 한다. 지우는 과정과 쓰는 과정이 모두 느린 작업으로, 그 과정은 다음과 같이 좀 복잡해서 현격한 속도 저하가 발생하게 된다.

 

1. 써야하는 셀의 데이터를 캐쉬로 읽어 저장해둔다.

2. 셀을 지운다.(느림)

3. 캐쉬했던 데이터와 써야할 데이터를 쓴다.(느림) [대부분의 상황에선 다른 셀에 쓰고 이 부분은 trim처리한다.]

 

이 작업은 이미 깨끗이 지워진 셀이 없을 때 발생하기 때문에, 쓰는 데이터마다 이 작업이 지속적으로 일어나게 된다(깨끗한 셀이 전혀 없으니.. ). 이 과정은 중국산 꾸진 SSD의 경우 거의 1~10초 멈춤 현상까지도 발생시킨다. 이 속도 저하를 방지하기 위해 TRIM기능이 추가되게 된다.

TRIM

TRIM은 데이터가 지워지면 OS가 "나 여기여기 지웠어"라고 SSD에 알려주는 기능이다. 여기서 알려주는 주체는 "OS"라는 것이 중요한 데, OS는 처음 부팅직후에는 지워진 파일이 없으니(물론 전혀 없지는 않을 것이다.), 삭제가 시작된 시점부터 이 명령을 삭제가 발생할 때마다 혹은 한번에 몰아서 보내게 된다. 여기서 원래 존재하면 파일에 덮어 쓰는 것도 실제는 [삭제후 쓰기]가 되니, 해당위치에 TRIM명령을 SSD로 전송하게 된다.

중요한 것은 TRIM명령은 "여기가 지워졌어"라는 명령을 받은 SSD가 이 셀을 바로 지우지는 않는 다는 것이다. 지워졌다는 것만을 표시해두고, 나중에 아무런 작업이 없을 때, 슬~슬~(이게 중요) 지우게 된다. 슬~슬~ 지우기 때문에 지우는 작업은 꽤 시간이 필요하다. 왜 "슬슬" 지우는 지는 이 후에 내용과 접목되는 부분이다. 여기서 말하고 싶은 것은 바로 지우는 것이 아니며, OS와 의 지속적인 커뮤니케이션이 있어야 한다는 것이다. OS가 지워진 부분에 대한 TRIM을 보내지 못하면, 그 셀은 쓰기 작업이 발생하면 속도 저하가 일어나 버리게 된다.

 

왜 슬~슬~ 지워 그냥 할 일 없을 때 쭉~쭉~ 지우면 되지?

NTFS파일시스템의 경우 4KiB를 섹터 크기를 주로 사용된다(당연히 포맷할 때 변경이 가능하다.). 1바이트짜리 파일을 저장해도 4KiB의 크기를 잡아 먹는다는 뜻이다. SSD는 내부에 Page라는 녀석의 크기는 4KiB정도로 잡혀있어서 4KiB의 NTFS와 궁합이 잘 맞게 되어있다. 하지만 SSD의 "지우기"는 128K~1M[이 수치는 시간이 지날 수록 계속 변하게 될 것이다.]단위로만 이루어 진다.

즉, 1page만 TRIM명령이 발생한 BLOCK의 다른 PAGE에 데이터가 있다면, 이 것은 "지우기"를 할 수 없다. 다른 곳으로 옮기고 지우기를 할 수 있지만, 다른 곳의 수명을 갉아 먹는 "쓰기"는 오히려 전체 수명을 줄여버리기 때문에 함부로 할 수가 없다.

이러다 보니, TRIM명령이 와도 지우지 않고 애매하게 남아 있는 block들이 쓰면 쓸수록 많아지게 된다. 아무리 윈도우의 드라이브 속성에서 [최적화]버튼을 눌러대도 이 상황은 그대로 남게 된다. 따라서 지우기 작업은 block내의 모든 page가 TRIM된 경우 수행 되며, 이 것도 아무런 할일이 없을 때나 수행되게 된다. 따라서 쓰기작업이 다시 시작되면 위의 느려지는 이유에 해당되어 속도 저하가 발생하게 된다. 게다가 "지우기"는 block의 크기 만큼 일어나기 때문에 "지우기"작업 중에 다른 작업이 들어와 버리면 속도가 떨어질 것이기 때문에, 슬~쓸~ 지우기가 발생하게 된다.

 

 

"지우기"작업을 할 수 있는 시간을 줘야 한다.[이 글의 핵심]

SSD가 "이제 할 일도 없는 데 슬슬 청소나 할까?"하는 생각이 들 때 까지, 아무 작업이 없어야 한다. 그리고 어떤 읽기/쓰기 들의 명령이 오는 순간부터 이 작업은 바로 중지 되기 때문에, 위의 "애매한 블록"은 그대로 남게 된다. 따라서 이 상황을 강제로 연출 시켜야 한다. 마이크론이 제시하는 방법은 다음과 같다. 좀 어처구니가 없지만 느려진 SSD를 다시 우리가 생각하는 최고의 속도까지는 아니라도 일정수준으로 다시 끌어 올리려면 이 어처구니가 없는 작업이 필요한다.

 

첫번째 방법

1. 컴퓨터를 재부팅하거나 켜서 바이오스에 들어간다.

2. 그냥 8시간 켜 둔다.

         여기서 아무런 작업이 발생하지 않으니 "지우기"작업이 발생하기 된다. 얼마나 슬~슬~ 지우는 지 알 수 있다.

 

두번째 방법

이 방법은 컴퓨터를 끌 수 없을 때 쓰는 방법이다. 우낀건 절전모드를 이용하게 때문에 컴터를 사용중에는 의미가 없게 된다.

1. 제어판 -> 하드웨어 및 소리(Window버전마다 다를 수도) -> 전원옵션[이걸 찾아야 된다] -> 내부의 어딘가에 -> 하드디스크 절전(사용안함)

2. 절전되기를 기다리고 8시간 동안 난 잠이나 잔다(여기서 실제 "지우기"작업)

 

이렇게 하라고 되어 있다. 전원이 공급이 되어야 "지우기"가 가능하니, 켜둬야하고 아무 작업이 일어나지 않는 상황을 연출하기 위해 이 방법을 제시하고 있다. 솔직히 현재는 이 방법외에는 다른 방법은 없다. 빨리 좋은 알고리즘이 나오기를 기다리는 수 밖에..

 

이렇게 하지 않으면 다시 속도가 빨리지기를 기대할 수가 없다. 또한, 이 작업을 한다고 해도 "애매한 block"의 존재로 처음의 신세경을 볼 수는 없다.

 

포맷하고 다시 깔면 모든 block이 지워질 수는 있기에 GC가 끝나면, 다시 처음의 속도를 즐길 수는 있다. 하지만 5~9년정도에 한번 까는 필자는 새로운 SSD를 산 다음에나 할 듯 하다.

 

여기까지가 결론이다.

 

 

추가로 GC는 뭐야?

이 "지우기"작업이 일어나는 실제 작업을 "GC"라고 한다(꼭 그런것은 아니다). 컴퓨터를 사용하고 있어도 중간중간 이 것으로 "지우기"작업이 일어나지만, 위에서 말한 듯, "쳐 놀때" 잘 시작되기 때문에 강제로 아무일도 하지 않게 해야 한다.

SSD가 TRIM 기능이 없다면

오래된 SSD라서 TRIM기능이 없으면, 셀에 저장이 일어날 때마다 빈 셀인지 검사하고 빈 셀이 아니면 속도가 떨어지게 된다. TRIM기능이 없어도 쓰기가 발생하면 다른 셀에 저장하고 이 셀을 삭제됨이라고 표시하면 되기 때문에 이 후 "지우기"작업을 수행할 수 있게 된다.

SSD가 TRIM기능이 있어도 못쓰는 경우

OS의 제어권이 없는 경우다. 대표적으로 NAS나 DAS같이 그 중에서도 RAID같은 것으로 묶여있는 것은 OS가 어찌 할 방법이 없어서 TRIM신호가 의미가 없어진다. 이런 상황에서의 속도 저하를 막기위해 있는 것이 "능동형 GC"다. SSD의 상품정보에 있는 "GC"가 이 능동형 GC를 말한다. 그냥 GC기능은 당연히 SSD라면 있는 것이다. 이 "능동형 GC"가 되는 것을 상품정보에 표시해 둔 것이다. 그리고 위에 8시간동안 놀게하는 것이 이 "능동형 GC"를 시작되게 하는 것이다

이런 NAS, DAS 등에서 지우기 작업은 이 "능동형 GC"가 없으면 정말 속도저하가 있는 상태로 동작하게 된다. 하지만 워낙 작업량이 많은 NAS,DAS라 얼마나 잘 동작될지는 SSD제조사가 잘 만들어 놓았기를 기대하는 수밖에 없다.

 

 

마지막으로 이 정보가 100%옭다고는 할 자신은 없다.

 

 

 

 

반응형
Replies
NOTICE
RECENT ARTICLES
RECENT REPLIES
Total
Today
Yesterday
LINK
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Article Box