본문 바로가기
공부/OS

[운영체제] SSD (Solid State Drive)

by algosketch 2021. 6. 7.

 SSD 는 SamSung Drive 의 약자이다. 구라다. Solid State Drive 인데, HDD 가 Disk 여서 끝에 D 를 Disk 로 오해하는 경우가 있다. 하지만 SSD 에는 disk 가 없다. HDD 의 기계적인 부품들 때문에 고장이 잦고, 느리고, 전력 소모가 심하다. 모바일 환경에선 배터리 소모율에도 영향이 있기 때문에 부적합하다. 하드디스크의 물리적인 부분을 제거하면 전력 문제와 속도 문제를 해결할 수 있지 않을까? 이것이 SSD 이다.

NOR flash memory : ram 처럼 random access 가 가능하다. 주로 bios 에 사용된다.
NAND flash memory : disk 처럼 block 단위로 접근할 수 있다. HDD 대신 사용된다.

SSD 에는 Disk 가 없고 chip 만 존재한다.

 물리적으로 움직이는 부품이 없기 때문에 물리적인 충격이나 온도 변화에도 강하다. 전력을 아낄 수 있으며 NAND flash 의 경우 ram 보다도 전력 소모가 적다. 이론적으로 HDD 보다 훨씬 빠르지만 기계적인 부품이 없는 것을 고려하면 그렇게 빨라지지는 않는다.

 HDD 는 overwrite 가 가능한데, SSD 는 write 하려면 반드시 지우고 써야한다. random access 의 경우 seek time 이나 rotation latency 가 없기 때문에 더 빨라진다. 물론 sequential 이 locality 를 이용한 cache 를 이용할 수 있기 때문에 더 빠르긴 하지만 random access 의 속도가 많이 떨어지지는 않는다.

 SSD 에 사용하는 NAND flash memory 는 페이지(4~16 kb) 단위로 read&write 해야 한다. byte 단위로는 불가능하다. 지울 때는 block 단위(128~256 kb)로 지워야 한다. 따라서 내용을 수정하려면 block 을 통째로 지워야 하고, 지우는 속도는 write 속도보다 느리다.
 그래서 SSD 에서는 update 할 때 지우지 않고 다른 페이지에 write 한다. 이전 page 는 invalid 로 표시해 둔다. 이렇게 처리하면 block 내부에서 어떤 페이지는 valid 하고, 어떤 페이지는 invalid 한 단편화 문제가 발생하여 나중에 compation 해 줘야 한다. 성능을 크게 저하시키는 문제이다. 이 문제를 write amplification problem 이라고 한다.
 두 번째 문제는 SSD 수명 문제이다. flash memory 는 지울 수 있는 횟수가 정해져 있는데, 대략 3~5000 회 지우면 해당 block 은 사용할 수 없다. SSD 에서 데이터를 지우려면 고압의 전류를 가해야 한다. 지울수록 저항이 증가하여 block 을 read&write 하는데 필요한 전력이 커진다. 더 이상 접근하지 못 하게될 수도 있다. 만약 한 block 을 자주 사용하면 SSD 수명을 짧아질 것이다.
 보통 wear leveling 이라는 메커니즘을 갖는다. 한 군데만 닳게하지 않고 골고루 닳게하는 방법이다.

Write amplification

어떤 block 에서 쓴 뒤 업데이트하면 지우는 것이 아니라 새 페이지에 쓰게 된다. compaction 할 때 지울 block 에 valid page 가 있다면 이 페이지를 다른 block 으로 옮겨야 한다. write 한 번 하면 write 가 엄청 많이 발생하게 된다. SSD 가 거의 다 사용될 때쯤이면 이런 문제가 심해질 것이다.
 이 현상을 해결하려면 garbage collection 이 잘 되어야 한다. 항상 사용할 수 있는 block 이 남아 있어야 한다.

Garbage collection

 현대의 SSD 는 garbage collection 을 위해 over-provision 한다. 실제로 저장할 수 있는 용량은 더 크지만 SSD 용량의 일부를 garbage collection 을 위한 공간을 두어, 일부 공간은 사용하지 못 하게 막는다. SSD 가 꽉 찼을 때 들어온 request 는 여분의 공간에 작성하고, 다른 작업이 없을 때 garbage collector 가 동작한다.

The ambiguity of delete

 주의하지 않으면 올바르게 garbage collector 가 동작하지 않을 수 있다. 일반적인 운영체제에서는 파일을 지울 때 실제로 파일을 지우는 것이 아니라 지워진 파일이라고 메타 데이터로 표시할 뿐이다. SSD garbage collector 의 입장에서 이 파일이 지워지지 않은 파일이라고 인식할 가능성이 있다.
 현대에는 SSD 를 지원하기 위해 SATA 나 스커지에 trim 이라는 명령어를 도입했다. OS 가 파일을 지울 때 SSD 에 명령을 보낼 수 있다. 어떤 blocks 를 invalid 표시하라는 명령들이다. 이것은 OS 에서 지원해야 한다.

Wear leveling

 write 를 골고루 하여 SSD 의 수명을 늘린다. 일반적으로 5년 이상의 수명을 기대한다. wear leveling 에는 dynamic wear leveling 과 static wear leveling 두 가지 방법이 있다.

dynamic wear leveling : 지금까지 설명했던, 지우고 다시 쓰는 게 아닌 새로운 페이지에 내용을 작성하는 방법이다. 이 방법의 문제점은 업데이트가 안 되면 계속 남아있게 되어 wear leveling 이 전체적으로 이루어지지 않는다.

static wear leveling : 위와 같이 작동하지만 특정 주기를 갖고 block 을 교체한다. block 이 지워진 횟수를 기억하고, 많이 사용된 block 과 적게 사용된 block 을 교체해야 한다.

SSD Controller

 위 같은 문제점들을 해결하는 controller 가 있다. LDA(logacall address) 를 wear leveling 을 고려하여 pysical address 로 바꾸고 free 인 page, garbage collection 이 얼마나 됐는 지 확인한다. 아무 일도 안 하고 있다면 garbage collector 를 작동시킨다. static wear leveling 을 위해 rotation 도 한다.
 controller 에 소프트웨어가 들어가기 때문에 SSD performance 를 좌우하게 된다. 그래서인지 삼성전자의 반도체 분야에 SW 엔지니어 숫자가 많아졌다고 한다.

 Flavers of NAND flash memory

 처음에는 다 SLC 로 나왔지만 지금 PC 에서는 MLC 를 사용한다. flash memory 는 cell 이라는 단위를 사용한다. 어떤 전자를 가둬 0과 1을 표시한다. SLC 는 single level cell 이고 MLC 는 multi level cell 로, 한 셀에 표시할 수 있는 bit 수가 다르다.
 비트 표시는 전압을 이용하는데 여러 bit 를 표시하는 건 전압 차이가 커진다. 전력도 많이 소비하게 된다. 이것을 극복하기 위해 전압 차이를 줄이면 에러가 발생하고, 또 에러를 처리하기 위해 correction code 를 써 줘야 해서 오버헤드가 커지고 성능도 떨어지게 된다. 게다가 수명도 줄어든다. 용량당 가격이 싸기 때문에 PC 에는 MLC 를 사용하지만 기업에서는 SLC 를 선호한다.

'공부 > OS' 카테고리의 다른 글

[운영체제] 후기  (0) 2021.06.24
[운영체제] RAID  (0) 2021.06.07
[운영체제] 하드디스크 (Hard Disk)  (0) 2021.06.07
[운영체제] Free space  (0) 2021.06.07
[운영체제] 데드락 (Deadlock)  (0) 2021.06.02