Tistory View

반응형

윈도우는 SSD를 인식하면 보통 특별한 설정을 하지 않은 경우 일정 주기마다 trim을 수행해 준다. 이 글만 보는 독자를 위해 좀 TRIM을 설명하면, 윈도우의 TRIM은 일정한 시간마다(보통 주단위) 전체 TRIM을 수행하고, 파일이 삭제되거나 내용이 지워지면 그 때 그 때 OS는 TRIM을 SSD로 보내게 된다. 솔직히 TRIM을 지속적으로 보내는 것도 리소스를 잡아 먹는 것이라 용량이 많이 남아있는 상태에서는 삭제시마다 전송하는 지속적인 TRIM은 그리 좋은 방법은 아니다. 어쨋든 이 작업을 OS와 SSD가 유기적으로 동작하도록 되어있다. 또한 OS는 TRIM을 SSD에 알릴 뿐 SSD가 실제 TRIM작업을 즉시 수행하는 것은 아니다. 심지어는 무시해버리기도 한다. 좀 더 정확한 개념은 필자의 다음글을 한번 대충 보기를 바란다.

 

https://jamssoft.tistory.com/278

 

SSD를 오래 썼더니 느려지네.. TRIM과 GC

쓸데없는 서론 SSD가 나온지 이제 꽤 시간이 지났다. 기본 부팅시스템은 SSD를 대부분 사용하고 있는 상황이고, 여유가 되는 사람들은 SSD로 데이터 저장공간으로 사용한다. 나스 등의 대용량이 필

jamssoft.tistory.com

 

윈도우 또한 TRIM명령을 삭제시마다 지속적으로 보낼지는 윈도우가 판단해서 보낸다. 늘 보내지 않을 수 있다는 것이다. 실제 윈도우에서 볼륨속성을 보면 일정기간마다 전체 TRIM을 보내기 때문에 실제 삭제시마다 일어나는 지속적인 TRIM은 아직 빈공간이 많이 남아있는 상태에서는 큰 효과를 보지 못할 가능성이 높다.

이 내용은 SSD제조사와 OS의 행동방식이 지속적으로 개선되기에 "꼭 이렇게 동작한다"라고 말할 수 없는 부분이다.

 

TRIM은 "짤라버린다"는 뜻이다. SSD에서는 다른 의미일수도...

리눅스에서 TRIM하기

데비안 계열의 리눅스는 다음의 명령으로 TRIM ssd 로 보낼 수 있다.

user17@server01:~$ sudo fstrim -v /mnt/win2
[sudo] password for user17:
/mnt/win2: 37.7 GiB (40478253056 bytes) trimmed

fstrim명령으로 trim을 날리면 위와같이 전체 빈공간을 trim한다. 여기서 "아니 왜 전체를 다하고 있지?"라는 의문이 들 수 있다. 이유는 간단하다 OS가 어디가 TRIM될지 모르니, 그냥 남아있는 빈공간 전체가 TRIM되도록 명령을 날리는 것이다. 명령을 날릴 뿐 실제 TRIM이 되어야 하는 위치는 SSD가 잘 알고 있으니, SSD가 멍청하게 빈공간 전체를 실제 지우는 작업을 하지 않는다. 걱정을 할 필요가 없다.

 

다시 한번 fstrim을 날리면

user17@server01:~$ sudo fstrim -v /mnt/win2
/mnt/win2: 0 B (0 bytes) trimmed
user17@server01:~$

삭제된 공간이 없기에 아무 곳도 trim을 하지 않고 있음을 알고 있다.

 

언마운트하고 다시 마운트해서 명령을 날리면

user17@server01:~$ sudo umount /mnt/win2
user17@server01:~$ sudo mount /mnt/win2
user17@server01:~$ sudo fstrim -v /mnt/win2
/mnt/win2: 37.7 GiB (40478253056 bytes) trimmed

다시 빈공간 전체에 TRIM명령이 날아간다. 이 것은 unmount시에 OS는 trim정보를 다 지워버리게 되고, 이 현상의 주된 이유는 다른 드라이브가 마운트 되었다고 판단하기 때문에, 빈공간 전체에 TRIM을 보내게 된다. 이 빈공간 전체를 TRIM한 이후부터 지속적인 TRIM이 전달되게 된다[discard가 설정된 경우]. 따라서 부팅시부터 TRIM을 지속적으로 처리하려면 rc.local과 같은 위치에서 위의 fstrim명령을 한번 날려주어 이후 알아서 TRIM명령을 보내게 해야한다.

 

 

파일 몇 개를 지우고 다시 fstrim을 날리면 지워진 파일의 크기 정도만큼만 trim예약 되는 것을 알 수 있다.

 

지속적으로 TRIM해 줄까?

하지만.. 하루 이틀 지나고 다시 TRIM명령을 날려 보자. 더 긴 시간도 상관없다.

user17@server01:~$ sudo fstrim -v /mnt/win2
[sudo] password for user17:
/mnt/win2: 37.7 GiB (40478253056 bytes) trimmed

결과는 어의가 없게도 전체 빈공간을 TRIM한다. 이 것은 버그도 아니고 당신의 SSD가 꾸져서도 아니다. 망가진 것은 더더욱 아니니 걱정하지 말라.

TRIM이 쉬운게 아니다.

OS는 파일이 삭제될 때마다 그 위치를 파악하고 SSD로 TRIM을 날려야 한다. 이 작업은 최대로  볼륨의 1/512만큼의 메모리를 잡아 먹는 작업이다. 또한 지속적으로 CPU를 사용하여 연산을 해야한다. 따라서 어찌보면 안하는 것이 더 좋은 방법이기도 하다.

윈도우도 마찬가지다. TRIM을 잘 처리할 듯하지만, 리눅스든 윈도우든 실제 TRIM명령 전송은 일정기간마다 하도록 되어있다. 리눅스는 cron으로 따로 등록해야 하며, 윈도우는 볼륨속성에서 주기를 지정해야 한다.(윈도우는 기본적으로 한달 또는 7일로 되어있다)

TRIM작업은 OS보다 SSD의 고유 영역에 더 가깝기 때문에, SSD의 TRIM알고리즘에 큰 영향을 받는다. 하지만 많은 공간이 삭제되면 일부러 TRIM명령을 보낼 필요가 있다.

선택할 수 있는 3가지 옵션

1.부팅 후 전체 TRIM해서 OS에 의한 지속적인 TRIM이 되도록 하는 방법

2. 일정기간마다 TRIM하는 방법

3. 그냥 안함

1의 경우 fstab에 discard를 옵션에 추가해야 한다.

3번의 방법을 써도 큰 문제는 없다. 요즘의(이미 한참전) SSD는 "능동형" GC기능이 대부분 탑재되어 있기 때문에 TRIM명령을 받지 않아도 특정공간에 다시 쓰기 작업시 데이터가 있다면, 이미 있던 그 데이터가 지워진 것을 판단할 수 있으니, Wear-Leveling기술을 통해 속도 저하없이 쓰기가 가능해지고, 이 block은 TRIM예약이 된다. SSD가 알아서 빈공간을 판단할 수 있다는 뜻이다.

 

어떻하라고~요?

필자는 2번 방법을 추천한다. crontab에 fstrim명령을 주기적으로 날리도록 하는 방식이 가장 부담이 덜하며 성능저하도 거의 없기 때문이다. 이 때 주기설정은 어떤 용도인지에 따라 정해진다. 데이터를 쌓아 두기만하는 볼륨(영화나 잔뜩 넣어두는)은 한달 정도로 잡고, 자주 지워지는 곳은 일주일이면 충분하다. 동영상 편집같이 큰 용량이 자주 삭제될 때는  3일정도면 아주 충분하다.

 

결론

사실상 윈도우에서는 할일이 거의 없으며, 리눅스는 crontab에 한줄 추가하는 것으로 현실적인 trim 작업을 설정하면 된다는 것이다. 글이 용두사미가 되었지만, 알고 있으면 마음이 편하다.

반응형

'리눅스' 카테고리의 다른 글

fork() 사용법과 주의 사항  (0) 2023.05.29
개 느린 복사 cp, 좀 빠르게 해보자.  (4) 2022.07.25
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