DB System Concepts 7th

[DB] Chapter 12-3. Magnetic Disks

patrick-star 2023. 6. 7. 00:01
728x90

자기 디스크(Magnetic Disks)는 현대 컴퓨터 시스템에서 secondary storage의 대부분을 제공한다.
자기 디스크의 용량은 해마다 점차 증가하고 있지만
거대한 응용 프로그램이 요구하는 용량은 더 빠르게 증가하고 있어서 어쩔 때는 디스크의 용량을 앞지를 때도 있다.

최근에 SSD 저장장치의 용량이 빠르게 증가했고 비용도 감소하고 있다. SSD가 속도와 용량이 같이 늘어나면서 자기 디스크의 경쟁자가 되었다.

하지만, SSD의 바이트 당 비용이 자기 디스크의 바이트당 비용보다 6~8배 비싸다는 사실 때문에 자기 디스크가 여전히 선택받고 있다. 물론 점차적으로 기업용 데이터에서 SSD도 선택받고 있다.

1. Physical Characteristics of Disks

12.2는 자기 디스크의 전체적인 그림을 보여준다. 12.3은 실제 자기 디스크의 내부를 보여준다.

  • 플래터(platter)
    • 각 디스크의 플래터(platter)는 평평하고 원형 모양
    • 플래터의 두 개의 표면은 자기 성질로 덮여 있고 정보들은 표면에 저장된다.
    • 플래터는 rigid metal 또는 glass로 만들어졌다.
  • 드라이브 모터
    • 디스크를 사용할 때 드라이브 모터는 일정하게 고속으로 회전한다.
    • 보통 1분당 5400 ~ 10000회 회전한다.
  • track & sector
    • 디스크의 표면은 논리적으로 track으로 나뉘어진다. tracksector로 나뉘어진다.
    • sector란 디스크에서 읽어오거나 작성될 수 있는 정보의 가장 작은 단위
    • sector의 크기는 보통 512바이트이고 지금 나오는 디스크는 20억 ~ 240억개의 섹터를 갖고 있다.
    • spindle과 가까이에 있는 inner trackouter track보다 길이가 더 작고 트랙의 개수도 적다.
  • read-writer 헤더
    • 플래터의 표면 위에 있다.
    • 자기 재료의 자화 방향의 반전시켜서 sector에 대한 정보를 자기적으로 저장
    • 플래터를 가로지르면서 움직인다. 왜냐하면, 플래터의 각 면은 다른 트랙에 접근하고 싶기 때문이다.
  • disk arm
    • 대부분의 디스크는 여러 개의 플래터를 갖고 있고 모든 트랙의 read-write 헤더는 disk arm이라고 불리는 단일 어셈블리에 장착되어 함께 이동
    • spindle에 장착된 플래터디스크 암에 장착된 헤드head-disk assemblies라고도 알려져 있습니다.
  • cylinder
    플래터 위에 있는 헤드i번째 트랙에 있을 때
    다른 플래터 위에 있는 모든 헤드들이 같이 움직이기 때문에 다른 플래터 위에 있는 헤드들도 각각의 플래터의 i번째 트랙에 위치하게 된다. 그래서 모든 플래터의 i번째 트랙은 i번째 cylinder라고 불린다.

read-write 헤더recording density를 증가시키기 위해서 최대한 표면과 가까이 있도록 유지된다. 헤드는 일반적으로 디스크 표면으로부터 마이크론(micron) 단위로 떠있거나 날라다닌다. 디스크의 회전으로 인해 작은 바람이 생성되며, 헤드 어셈블리는 바람이 헤드를 디스크 표면 바로 위로 떠있을 수 있도록 만들었다. 헤드가 표면과 굉장히 가까이 붙어 있기 때문에 플래터는 굉장히 평평하게 만들어져야 한다.

  • head crash
    • 만약에 헤드가 디스크 표면에 닿는다면, 헤더가 디스크의 기록 매체를 긁어내면서 거기에 저장되어 있던 데이터를 파괴시킴
    • 요즘에는 저장 매체로 얇은 자기 철을 사용해서 디스크를 고장낼 확률이 굉장히 낮아졌다.
  • Disk Controller
    • 디스크 컨트롤러는 컴퓨터 시스템과 디스크 드라이브의 실제 HW 사이의 인터페이스 역할
    • 현대의 디스크 시스템에서는 디스크 컨트롤러가 디스크 드라이브 유닛 내부에 구현되어 있음
    • 디스크 컨트롤러고수준의 명령들을 입력받는다.
    • ex) 섹터를 읽고 쓰거나 액션(ex. 디스크 암을 오른쪽 트랙으로 이동시키기)을 초기화 하는 등의 명령
    • 기록된 각 섹터에 체크섬을 첨부한다. 체크섬은 섹터에 기록된 데이터로부터 계산된다.
      • 섹터를 다시 읽어들였을 때, 컨트롤러가 불러왔던 데이터로 부터 체크섬을 다시 계산해서 기존 데이터와 바뀐점이 있는지 비교하기 위해서 사용한다.
      • 데이터가 바뀌었다면 높은 확률로 새롭게 계산된 체크섬이 저장된 데이터와 맞지 않다는 뜻이다.
      • 오류가 발생했다면 계속해서 읽기를 재시도할 거고 이게 계속되면 읽기 실패(read failure)라는 사인을 전달한다.
    • 디스크 컨트롤러나쁜 섹터들을 다시 매핑하는 역할도 수행
      • 디스크 컨트롤러가 디스크를 처음으로 포맷하거나 섹터를 기록(write)하려고 할 때
      • 섹터가 망가졌다는 걸 발견했다면 논리적으로 해당 섹터다른 물리적 위치와 매핑시킨다. (이를 위해 별도로 할당된 여분의 섹터 풀에서 할당된다)
      • 디스크에서 다시 매핑하는 건 비휘발성 메모리이고 write는 새로운 물리적 위치에서 수행된다.

2. Performace Measures of Disks

디스크의 품질을 결정하는 요소는 용량, 접근 시간, 데이터 전송 속도, 신뢰성이다.

Access time (접근 시간) : 읽기/쓰기 요청이 발생하고나서 데이터 전송을 시작할 때 까지 걸린 시간

디스크의 주어진 섹터에 있는 데이터에 접근하기 위해서
disk arm은 올바른 트랙으로 위치하기 위해서
먼저 이동하고 나서 디스크가 회전함에 따라 섹터disk arm 아래로 나타날 때 까지 대기한다.

Seek time : disk arm이 재위치하는 시간

당연히 움직이는 거리만큼 seek time은 증가할 것이다.
대부분 seek time은 움직은 거리에 따라서 2 ~ 20밀리초가 소요된다.

평균 Seek Time

만약, 모든 트랙이 똑같은 개수의 섹터를 갖고 움직임을 시작하거나 멈추기 위해서 헤드에 필요한 시간을 고려하지 않는다면
평균적인 seek time최악의 seek time의 1/3임을 볼 수 있다.
이를 통해 평균적인 seek time최대 seek time의 절반 가량의 시간이라고 할 수 있다. 현재는 4 ~ 10 밀리초가 걸린다.

Rotational Latency Time : 헤드가 원하는 트랙에 도착하고 헤드 아래에 접근하고자 한 섹터가 나타날 때 까지 대기한 시간

디스크의 회전 속도는 1분에 5400번 ~ 15000번이다. 평균적으로 원하는 섹터의 시작(beginning)이 헤드 아래에 나타나기 위해 디스크 회전의 절반이 필요하다. 그러므로 평균적인 지연 시간전체 회전 시간의 절반이 된다.

따라서, 접근 시간 = seek time + latency (평균적으로 5 ~ 20 밀리초가 소요된다)

Data-Transfer Rate(데이터 전송 속도)

접근하고자 한 데이터의 첫번째 섹터가 헤드 아래에 도착했다면 데이터 전송을 시작한다.

데이터 전송 속도는 데이터를 디스크에서 검색하거나 디스크에 저장하는 속도를 의미한다. (지금은 초당 50 ~ 200 MB의 속도를 지원)
전송 속도는 디스크의 내부 트랙의 최대 전송 속도보다 훨씬 낮다. 왜냐하면 내부 트랙은 섹터가 적기 때문이다.
ex) 최대 전송 속도가 초당 100 MB인 디스크는 내부 트랙에서 지속적인 전송 속도가 약 30MB/초 정도일 수 있다.

Disk Block

디스크의 입출력 요청은 대부분 파일 시스템에 의해서 만들어지지만 데이터베이스 시스템에 의해서도 만들어질 수 있다.
각 요청은 디스크에 있는 참조되어야 할 주소값을 특정한다. 그 주소는 block number라는 형식을 갖는다.

disk block스토리지 할당과 읽어오기(retreival)에 대한 논리적 단위이다. block의 크기는 대체로 4 ~ 16KB이다.
데이터는 디스크와 메인 메모리 사이에서 블록 단위로 전달된다.
비록, 상황에 따라 다른 의미를 가질 수 있지만 page(페이지)라는 용어를 block을 부를 때 종종 사용한다.

디스크에서 블록을 요청하는 순서(sequence)를 2가지로 나눌 수 있는데 이에 대해서 살펴보자.

Sequential Access Pattern(순차적 접근 패턴)

이 패턴에서는 연속된 요청연속된 블록 번호에 대한 것으로, 해당 번호들은 동일한 트랙이나 인접한 트랙에 위치해 있다.
순차적 접근에서 블록을 읽기 위해서 첫 블록에 대해서는 disk seek이 필요하지만, 그 이후의 연속된 요청들은 disk seek을 할 필요가 없다. 또는 근접한 위치에 있기 때문에 굉장히 빠른 disk seek을 할 수 있다.

때문에 순차적 접근 패턴데이터 전송 속도가 가장 빠르다. 왜냐하면, seek time이 가장 작기 때문이다.

Random Access Pattern (무작위 접근 패턴)

이 패턴에서는 연속된 요청이 디스크에 무작위로 위치한 블록에 대한 것이다. 각각의 요청은 disk seek이 필요하다.

초당 I/O 연산(I/O opertion Per Second; IOPS)의 횟수 즉, 1초에 디스크에서 이뤄지는 무작위 블록 접근 횟수는 접근 시간, 블록 사이즈, 데이터 전송 속도에 따라 달라진다. 현재 세대의 디스크는 4KB의 블록 사이즈를 갖고 있고 50 ~ 200 IOPS를 지원한다.

한 번의 disk seek 마다 작은 양의 데이터만 읽어올 수 있어서 데이터 전송 속도는 순차적 접근 패턴보다 느리다.

Mean Time To Failure(MTTF) : 디스크의 신뢰성의 척도

디스크의 MTTF는 평균적으로 우리가 시스템에 failure 없이 동작할 수 있다기대할 수 있는 시간의 총합이다.
오늘날에는 500,000 ~ 1,200,000시간 즉, 57일 ~ 136년의 범위를 나타낸다.

물론 대부분의 디스크는 5년 정도의 기대수명을 갖고 있다. 그리고 몇 년만 지나도 failure가 발생할 확률이 굉장히 높아진다.