서울대학교 컴퓨터공학과 김진수 교수님의 "고급 운영체제" 강의를 필기한 내용입니다.
다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.
간단한 역사
- 1956, RAMAC: 최초의 HDD (가격은 $10000/Mb…)
- 이전의 punch card 는 mechanical 방식
- Tape 나 HDD 는 magnetic 방식
- CD, DVD, BlueRay 가 optical 방식
- 90년대까지는 magnetic 혹은 optical 방식이었고 얘네는 전부 뭔가를 물리적으로 움직이는 것을 요했다.
- Electrical 방식은 전기가 끊어지면 없어지기 때문에 volatile (short-term) 방식으로 정보를 저장하는 것만이 가능해 보였지만
- Flash 가 electrical 방식으로 작동하며 반도체에 전자를 가두는 방식으로 long term data persistent (non-volatile) 를 일궈냈다.
HDD 구조
- Platter (Disk): 원판, 앞뒤로 기록 가능
- 여기의 한 표면을 Surface 라 부름
- Arm: 읽어들이는 팔
- 여기에 달려있는 실제로 데이터를 읽는 놈을 Head 라고 한다.
- Head 는 Surface 마다 존재 (즉, Platter 마다 두개)
- 이걸 움직이는데 시간이 오래 걸리고, 이 움직이는 시간을 Seek time 이라 부름
- 여기에 달려있는 실제로 데이터를 읽는 놈을 Head 라고 한다.
- Track: 원판의 한 원
- Sector: Track 내의 한 구역으로 데이터를 읽어들이는 단위 (1 sector = 512byte)
- Spindle: 축
- Cylinder: 같은 반지름의 Track 의 묶음 (여러 Platter 에 걸친)
- 같은 Cylinder 에 있는 데이터는 Head 를 움직이지 않아도 되기 때문에 빠르게 읽어들일 수 있다.
- FAST Filesystem 의 핵심 아이디어임: 하나의 파일 및 그의 메타데이터는 하나의 cylinder group 에 넣어서 빠르게 rw 되게 하자.
- HDD 에도 CPU 와 RAM 이 있어서 작동을 제어한다.
Addressing
CHS
- 여기서 CHS 는
- Cylinder no: 몇번째 트랙에 있냐
- Head no: 몇층에 있냐
- Sector no: 트랙에서 몇번째 sector 에 있냐
- 이렇게 3차원 정보를 가지고 HDD 내의 데이터가 어디 저장되어 있는지 (데이터의 주소) 명시
- 옛날에는 트랙 당 sector 의 개수를 같게 하고 sector 당 byte 도 같게 해서 track 의 길이가 더 길어도 같은 양의 정보를 저장하게 했는데
- 따라서 반지름이 작으면 밀도가 높아서 데이터가 깨질 확률도 커짐
- 요즘은 ZBR (Zone Bit Remapping) 이라는 기술이 나와서 track 의 밀도를 비슷하게 함
- 즉, track 의 반지름이 크면 그만큼 sector 도 많게
- 따라서 이에 따라 CHS 은 더이상 못쓰게 되었다
LBA
- CHS 의 3차원 스킴이 아니고
- 그냥 1차원 배열로 처리해서
- 모든 sector 에 sequential 하게 번호를 부여하고 그 번호를 가지고 접근
- LBA 를 가지고 HDD 의 컨트롤러 내에서 어디에 있는지 계산을 해서 데이터를 가져오는 방식을 취함
- 따라서 LBA 를 가지고는 OS 에서 데이터가 어디 있는지 알 수 없어서 (OS 는 HDD 의 컨트롤러가 뭔짓하는지 모르기 때문에) FAST Filesystem 처럼 데이터의 위치를 활용해 성능 최적화를 하는 것이 힘들어짐
- 그래서 보통 인접한 LBA 를 접근할 때에는 성능이 잘 나오게끔 HDD 를 설계하는 것이 convention 이 되었다고 한다
- 즉 data 를 sequential 하게 읽으면 성능이 최대가 됨
Metrics
- Seek time: head 를 움직이는 시간
- Average seek time은 1번 cylinder 부터 마지막 cylinder 까지 읽었을 때의 평균이고 수학적으로 max 값의 1/3 이 된다고 한다.
- Rotational delay (Rotational laytency): 돌리는 시간
- Transfer time: 읽은 정보를 host 로 보내는 시간
- 위에서 말한 것처럼, 얘네들 중에 Seek time 이 제일 오래걸린다.
HDD Interface
- SCSI 는 성능이 좋은 HDD 용 인터페이스, ATA 는 일반 사용자용
- 원래는 디스크에 parallel 하게 저장 (접근?) 하는 것이 더 빠른 줄 알았는데 나중에 보니 sequential 하게 하는 것이 더 좋아서 SCSI 는 SAS, ATA 는 SATA 로 바뀌게 된다.
NCQ
- NCQ 는 Native Command Queueing 의 약자로
- 이전에는 command 를 선입선출 방식으로 처리해서 디스크의 회전 방향과는 무관하게 처리했지만
- NCQ 는 한번에 32개의 command 를 모아서 디스크의 회전방향에 맞게 command 를 정렬해서 한번에 처리 한다
- 배민의 알뜰배달 같은 것: 목적지로 가는 경로상에 있는 배달지를 한명이 다 모아서 가면서 처리
- 다만 NCQ 가 효과가 있으려면 command 가 음청 들어와서 queue 가 꽉 차있어야 하지만 SATA 에서는 그런 경우가 그리 많지 않았고, 따라서 SATA 에서는 크게 성능 차이가 없었다고 한다.
SMR Disk
- SMR (Shingled Magnetic Recording) <-> CMR (Conventional Magnetic Recording)
- Disk 는 read 를 위해 필요한 head 의 너비에 비해 write 를 위해 필요한 head 의 너비가 더 크다.
- 그래서 일반적으로는 write 에 필요한 너비로 track 의 너비를 산출했는데
- SMR 에서는 한 트랙을 write 한 다음에 다음 track 을 write 할 때에는 이전 트랙의 read 부분만 남기고 나머지는 덮어쓰는 식으로 write 를 한다.
- 이렇게 하면 track 너비가 줄어들어 공간을 절약하게 되니까 더 많은 데이터를 저장할 수 있고
- 기존 방식대로 random read 가 가능하다.
- 하지만 write 공간을 덮어쓰는 방식으로 write 하기 때문에 in-place update 가 안되고 데이터가 변경되면 다시 overwrite 해야 한다는 단점이 있다.
- 약간 ssd 랑 특성이 비슷해졌죠