-
실습과 그림으로 배우는 리눅스 구조 8장 정리운영체제 2022. 11. 13. 17:49
저장 장치
HDD
- 데이터를 자기 정보로 변환하여 자기 장치에 기록한다.
- 바이트 단위가 아닌 섹터 단위(512Byte or 4096KB)로 읽고 쓴다.
- 데이터를 읽고 쓸 때, 스윙암의 동작과 플래터의 회전이 필요한데 이는 전기적 동작이 아닌 기계적 동작이기 때문에 느릴 수 밖에 없다.
HDD의 성능(I/O 지원 기능을 사용하지 않았을 때)
- 연속하는 섹터의 경우 한번의 접근 요청으로 데이터를 읽을 수 있으며, 여러 번 접근하는 방식보다 빠르다.
- 시퀀셜 접근한 경우
- I/O 사이즈가 증가함에 따라 스루풋이 증가한다.
- 랜덤으로 접근한 경우
- I/O 사이즈가 증가함에 따라 스루풋이 증가한다.
- 시퀀셜 접근은 한 번의 접근으로 처리할 수 있기 때문에 랜덤 접근 보다 빠르다.
블록 장치 계층
- 블록 장치는 디바이스 파일(/dev)을 통해서 특수하게 접근하거나 그 위에 구축된 파일 시스템을 통해서 간접적으로 접근할 수 있다. (대부분은 파일시스템을 통해서 접근한다)
- 커널의 블록 장치 계층에서 I/O 스케줄러 기능과 미리 읽기 기능을 통해 성능을 향상 시킬 수 있다.
- I/O 스케줄러 기능
- 블록 장치에 접근하려는 요청을 모아 놓은 후 가공하여 디바이스 드라이버에 요청을 함으로써 I/O 성능을 높일 수 있다.
- 가공 방식
- 병합: 여러 개의 연속된 섹터에 대한 I/O 요청을 하나로 모은다.
- 정렬: 여러 개의 불연속적인 요청을 섹터 번호 순서대로 정렬한다.
- 정렬과 병합을 통해서 I/O 성능을 향상 시킬 수 있다.
- 미리 읽기 기능
- 공간의 국소성을 이용한 데이터 접근 방식
- 연속되는 영역에 접근할 가능성이 크다는 점을 예측해서 미리 읽어두는 기능이다.
- 랜덤한 경우, 미리 읽게 되면 데이터를 버리게 된다.
HDD의 성능(I/O 지원 기능을 사용했을 때)
- 시퀀셜 접근한 경우
- 읽기
- I/O 사이즈와 무관하게 스루풋이 잘 나온다.
- 시퀀셜하게 접근하기 때문에 미리 읽기의 효과를 볼 수 있다.
- 병합 처리는 거의 발생하지 않는다. (I/O 스케줄러가 거의 동작하지 않는다)
- 쓰기
- I/O 사이즈와 무관하게 스루풋이 잘 나온다.
- I/O 스케줄러의 병합 처리로 인해 스루풋이 높다.
- 읽기
- 랜덤으로 접근한 경우
- 읽기
- I/O 사이즈가 증가함에 따라 스루풋이 증가한다.
- 시퀀셜하게 접근한 경우에 비해 성능이 낮다.
- I/O 지원 기능을 사용하지 않았을 때와 비슷하다.
- I/O 스케줄러는 동작하지 않고, 시퀀셜한 접근이 되지 않으므로 미리 읽기한 데이터는 버려진다.
- 쓰기
- I/O 사이즈가 증가함에 따라 스루풋이 증가한다.
- 시퀀셜하게 접근한 경우에 비해 성능이 낮다.
- I/O 지원 기능을 사용하지 않았을 때와 비슷하다.
- 조금 효과는 있지만 낮은 I/O 사이즈에서 유리하다.
- 읽기
SSD
- 기계적 동작이 아닌 전기적 동작으로만 이루어지기 때문에 HDD 보다 빠르다.
- 하지만 HDD 보다 용량대비 가격이 비싸다.
- 시퀀셜 접근, 랜덤 접근 모두 HDD보다 빠르다.
- I/O 지원 기능을 사용하지 않았을 때
- I/O 사이즈가 증가함에 따라 스루풋이 증가한다.
- 랜덤 접근의 경우 SSD가 HDD 보다 더 큰 폭으로 성능이 좋다.
- 시퀀셜 접근이 랜덤 접근에 비해서 빠르지만, HDD 보다는 그 차이가 적다.
- I/O 지원 기능을 사용했을 때
- I/O 사이즈와 무관하게 스루풋이 잘 나온다.
- HDD보다 더 높은 스루풋을 낸다.
- 시퀀셜의 경우 읽기 성능이 잘 나오는 이유는 미리 읽기 기능 덕분이다.
- 쓰기의 경우, I/O 지원 기능을 사용했을 때가 오히려 스루풋 성능이 낮다.
- SSD의 경우 여러 개의 I/O 요청을 모아둔 후, 한번에 처리하는 오버헤드가 크기 때문이다.
소프트웨어를 만들 때 주의할 점
- 파일 안에 데이터가 연속되도록 혹은 가까운 영역에 배치한다.
- 연속된 영역에서의 접근은 여러 번 나누기 보다 한 번에 처리한다.
- 파일에는 되도록 큰 사이즈로 시퀀셜하게 접근한다.
Reference
실습과 그림으로 배우는 리눅스 구조
반응형'운영체제' 카테고리의 다른 글
실습과 그림으로 배우는 리눅스 구조 7장 정리 (2) 2022.11.10 실습과 그림으로 배우는 리눅스 구조 6장 정리 (0) 2022.11.06 실습과 그림으로 배우는 리눅스 구조 5장 정리 (0) 2022.11.06 실습과 그림으로 배우는 리눅스 구조 4장 정리 (2) 2022.10.30 실습과 그림으로 배우는 리눅스 구조 3장 정리 (0) 2022.10.30