관련된 게시물

  • hdd와 ssd의 차이 키워드-hdd편

    참고자료물

  • ssd의 물리적 작동원리

    SSD의 작동원리

    우선 ssd는 반도체의 일종으로 아주 간단하게 설명하자면 usb를 보조 저장장치화 한 것으로 생각하면 된다.
    이때 하드디스크의 섹터와 같은 물리적 최소 저장단위는 이며, 논리적 저장단위로는 블록과 페이지가 있다.

    물리적 작동원리

    ssd는 전기신호를 활용하여 작동을하는데, 이때 논리적인 인터페이스로는 nvme 물리적인 인터페이스로는 pcie가 사용된다.
    cpu와 직접 통신 가능한 하드웨어(ex.ssd/그래픽카드)를 장착하는 일종의 확장 슬롯이며, nvme는 그 과정에서 데이터를 어떻게 나를 것인가에 대한 프로토콜을 의미한다.
    또한 하드디스크와 달리 ssd는 전기적인 방식을 사용하여 데이터의 읽기와 쓰기를 실행하기 때문에 물리적인 동작이 없고 그 덕분에 빠른 속도를 지원할 수 있다.

    정통적 처리방식

    기존의 sata방식 하드디스크 혹은 ssd의 경우 가장 최신의 sata도 하드디스크의 최대 속도와 거의 비슷하기 때문에 ssd는 제 성능을 내기 어렵다.
    하드-디스크컨트롤러-cpu 순서의 작동 처리 방식에서는 저 과정 하나하나에 I/O버스의 성능과 사우스 브릿지 등의 성능에 영향을 받게 된다.
    즉 ssd임에도 sata3의 최대성능(하드의 최대 성능과 유사)정도 밖에 뽑지 못한다는 것이다.
    그래서 ssd를 위해 pcie버스 nvme전송 프로토콜 등의 방식이 생긴 것이다.

    단위의 구분

    하드디스크의 섹터는 논리적 단위이자 물리적 단위이다.
    그러나 ssd의 경우 물리적 단위인 셀과 논리적 단위인 블록과 페이지가 다르게 나누어져있다.
    그 이유는 하드디스크는 기본적으로 레코드판처럼 돌아가는 하드웨어적인 공간과 읽어올 공간이 함께 있는 데에 비해, ssd는 반도체이기 때문에 물리적인 공간과 논리적 공간이 분리되어있기 때문이 크다.
    또한 블록과 페이지를 구분하는 이유는 NAND방식의 플래시 메모리가 읽기와 쓰기/삭제를 다른 방식으로 다루기 때문이다.

    읽기와 쓰기

    Nand방식의 경우 페이지(통상적으로 4kb/8kb정도)단위로 읽기와 쓰기를 진행한다.
    이는 ssd가 가로로 셀이 쭉 이어진채로 직렬 연결(우리의 배열과 유사하게)시켜 한꺼번에 전기적인 신호를 전달하는 방식으로 작동하기 때문이다.

    읽기의 작동원리

    위에서 설명했다시피 기본적으로 페이지 단위의 읽기를 실행한다.
    만약 내가 원하는 정보의 양이 페이지보다 작다면, 전체 페이지를 불러온 뒤에 ssd는 불필요한 부분을 버려내는 작업을 진행하여야 한다.

    읽기 작업의 상세 단계

  • 1.명령의 수신과 해석
    • cpu나 os에서 NVME프로토콜 혹은 ahci프로토콜을 이용하여 수행하고자 하는 명령을 ssd내에 있는 컨트롤러에게 전송한다.
    • 읽기 작업의 경우 물리적 주소 중 페이지 주소만 알면 되는데, 이는 읽기 작업이 해당 페이지만을 필요로하기 때문이다.
  • 2.캐시 조사
    • cpu뿐만 아니라, 캐시는 어디에든 존재 가능한데 그중 한 곳이 ssd이다. 컴퓨터는 명령이 처음왔을 때에 정보가 어디에 있는지 모르므로 우선 캐시를 확인한다.
    • 캐시에 요청된 데이터가 있는 경우 ssd에서는 읽기 명령을 실행한다.
    • 캐시에 요청된 데이터가 없는 경우(캐시 미스) NAND 메모리 내에 데이터가 위치한 것이므로, NAND에서 1에서 받은 주소를 찾아야한다.
  • 3.물리적인 주소(페이지 주소)로 매핑
    • 캐시 히트가 이루어진 경우 3의 단계는 생략된다.(바로 값을 반환하기 때문)
    • 캐시 미스가 발생한 경우에만, 1단계에서 받은 주소를 물리적인 페이지 주소로 매핑을 실시한다.

      쓰기의 작동원리

      쓰기 역시 읽기와 동일하게 페이지 단위로 진행되지만, 기존의 페이지에 있는 데이터를 수정 후 더 커진 데이터를 저장하기 위해서는 독특한 과정을 거친다.
      원론적으로는 전체 블록 데이터를 삭제한 후, 수정본을 다른 페이지(내가 원하는 크기에 맞게 할당)에 저장하는 작업이 있다고 이해하면 된다.
      물론 중간 단계에서ssd의 쓰기 성능을 최적화하기 위한 몇 개의 단계가 추가되는데, 이는 뒤쪽에서 알아보도록 하자.

      쓰기(새 데이터)의 상세 단계

  • 1.명령의 수신과 해석
    • 이는 읽기와 동일하게 cpu나 os에서 NVME프로토콜 혹은 ahci프로토콜을 이용해 수행하고자하는 명령을 ssd컨트롤러가 전송받는다.
    • 쓰기 작업의 경우 읽기와 동일하게 페이지 단위의 작업을 하는데, 쓰기 속도 최적화를 위한 단계 몇가지가 추가된다.
  • 2.페이지 찾기
    • ssd의 셀은 처음부터 사용 횟수(수명)이 정해져서 나온다.
    • 따라서 ssd컨트롤러는 쓰기 횟수가 적은 셀을 골라 플래시 셀의 수명이 균일하게 유지되도록 한다.
  • 3.페이지 크기 조정
    • 쓰려는 데이터의 크기가 지나치게 작다면 여유공간(패딩)을 만들어서 페이지의 크기와 동일하도록 맟준다.
    • 만약 쓰려는 데이터의 크기가 1페이지의 크기를 넘는다면, 여러개의 페이지에 거쳐 쓰기 작업을 진행한다.
      • 이때 페이지들은 순차적으로 저장을 진행하는데, 페이지의 크기(4kb/8kb)로 딱 나누어떨이지지 않는 경우 패딩을 사용하여 남은 공간을 채운다.
      • 패딩을 사용하는 이유는 페이지가 일정한 크기를 유지하여야, 파일시스템에서 파일을 가져올 때에 최적화가 간편하기 때문이다.
      • 만약 데이터가 페이지를 여러개 사용하면, 쓰기 증폭이라는 실제 데이터보다 차지하는 데이터 상의 공간이 큰 문제가 나타날 수 있는데 이는 뒤에서 알아보도록 하자
  • 4.DRAM의 캐시에 저장
    • 이는 SSD의 빠른 성능을 고려한 것으로, SSD컨트롤러가 빠르게 데이터를 처리한 뒤 여러개의 쓰기 요청을 병합하여 CPU가 실행할 수 있도록 해주는 단계이다.
  • 5.페이지 기록
    • DRAM의 임시캐시로부터 데이터를 가져와서 실질적인 쓰기 작업을 실행한다.
    • 이 단계에서 쓰기 증폭을 막기 위한 최적화가 일어난다.
  • 6.기록 확인
    • SSD컨트롤러가 에러검증 코드 등을 통하여 정상적인 쓰기 작업이 완료되었는지 확인하는 단계이다.
  • 7.쓰기에 대한 최적화
    • 가비지 콜렉션을 활용하여 유효하지 않은 페이지들을 정리 및 최적화를 진행한다.
    • 이 외에도 몇가지 최적화 및 최적화를 위한 명령들이 있는데, 생각보다 게시물이 길어진 관계로 다음 게시물에서 알아보도록 하자.

댓글남기기