[ 저장장치 ] HDD / SSD

Do_It·2023년 12월 6일

HDD

HDD는 데이터를 자기 정보로 변환하여 그것을 플래터라고 불리는 자기 장치에 기록하는 저장 장치

  • 자기 정보로 변환된 데이터 -> 플래터(자기 장치)에 저장
  • 자기 정보로 변환된 데이터는 바이트 단위가 아닌 섹터 단위로 읽고 씀
  • 1섹터의 크기는 512바이트 혹은 4K바이트
  • 플래터에는 여러 섹터가 존재
  • 섹터는 동심원처럼 원의 중심부터 바깥 방향으로 분할되어 있으며 각각에 주소 번호가 부여되어 있음
  • 플래터의 각 섹터 데이터는 자기 헤드라는 부품에 의해 읽고 씀
  • 자기 헤드는 스윙 암이라는 부품에 달려있으며, 스윙 암이 움직임으로써 자기 헤드를 플래터의 동심원 반경 방향으로 이동시킴

HDD 데이터 전송 흐름 과정

  1. 디바이스 드라이버가 데이터의 읽고 쓰기에 필요한 정보(섹터 번호, 섹터의 개수,섹터의 종류(읽기 또는 쓰기))를 HDD에 전달 - 전기적 처리
  2. 스윙 암을 이동시키거나 플래터를 회전시켜 접근하고자 하는 섹터 위에 자기 헤드를 위치시킴 - 기계적 처리
  3. 데이터를 읽고 씀 - 기계적 처리
  4. 읽을 경우네는 HDD의 읽기 처리가 완료 - 전기적 처리

HDD의 기계적 처리로 인해 레이턴시가 커짐

HDD의 성능 특성

자기 헤드의 위치를 원하는 동심원의 위치에 맞추기만 하면 플래터를 회전시키는 것만으로 여러 개의 연속된 섹터의 데이터를 한 번에 읽어 여러 개의 섹터 데이터를 한 번의 접근 요청에 의해 함께 읽을 수 있음.
한 번에 읽을 수 있는 양은 HDD마다 제한이 있음

하지만 연속되지 않은 여러 개의 섹터에 접근 시 소요 시간이 길어짐

IO 스케쥴러

블록 장치 계층의 I/O 스케쥴러 기능은 블록 장치에 접근하려는 요청을 일정 기간 모아둔 뒤, 다음과 같은 가공을 한 다음 디바이스 드라이버에 I/O 요청을 함으로써 I/O 성능을 향상시키는 것을 목표로 함

  • 병합 : 여러 개의 연속된 섹터에 대한 I/O 요청을 하나로 모음
  • 정렬 : 여러 개의 불연속적인 섹터에 대한 I/O 요청을 섹터 번호 순서대로 정리

정렬 뒤에 병합이 발생하는 경우도 있으며 이 경우 또한 I/O 성능 향상을 기대할 수 있음.
I/O 스케쥴러 덕분에 사용자 프로그램을 만드는 사람이 블록 장치의 성능 특성에 대해 자세히 이해할 필요 없이 어느 정도 성능이 나오게 되어 있음

미리 읽기

프로그램으로부터 데이터에 접근할 때에는 공간적 국소성이라는 특징이 있음

  • 공강적 국소성이란 ? 프로그램이 특정 주소의 데이터에 접근할 때, 그 근처에 위치한 데이터에도 곧바로 접근할 가능성이 높다는 원리

이 특징을 이용하기 위해서 블록 장치 계층에는 미리 읽기 라는 기능이 있음
시퀀셜 접근의 경우 성능을 높일 수 있음
예측대로 접근하지 않았을 경우는 단순히 읽었던 데이터를 버리면 됨

SSD

SSD와 HDD의 가장 큰 차이점은 SSD의 경우는 데이터에 접근하는 것이 기계적 동작이 아닌 전기적 동작만으로 이루어진다는 것
이러한 특징으로 랜던 접근 성능도 HDD보다 빠름

스루풋(throughput) & 레이턴시(latency)

스루풋(throughput) : 단위 시간당 처리된 일의 양으로 높을수록 좋음
레이턴시(latency) : 각각의 처리가 시작부터 종료까지의 경과된 시간으로 짧을수록 좋음

소프트웨어 만들때 주의 점

  • 파일 안에 데이터가 연속되도록 혹은 가까운 영역에 배치
  • 연속된 영역에서의 접근은 여러 번으로 나누기보다는 한 번에 처리
  • 파일에는 되도록 큰 사이즈로 시퀀셜하게 접근
profile
오늘의 노력이 내일의 성장으로 이어지고 있음을

0개의 댓글