ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 실습과 그림으로 배우는 리눅스 구조 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

    실습과 그림으로 배우는 리눅스 구조 

    반응형

    댓글

Designed by Tistory.