읽기 캐시 : 데이터를 읽어올 때, 일단 캐시에서 확인하고 없으면 디스크에서 다시 캐시에 갖다놓고, 메모리로 가져간다.

데이터를 쓸 때는 디스크에 곧바로 쓴다.

-> 데이터가 순차적으로 저장되어 있을 때 유리하다. (random i/o인 경우는 오히려 불리하다. 계속 캐시에 갖다놓는데 갖다 놓은 데이터가 locality가 보장 안되니까 그런듯?)

예를 들면, 용량이 큰 영상이나 사진 파일등..?

Q) 근데 random i/o 사용하는 운영체제에서는 locality 적극 사용하지 않나? 이해가 안가네?

ㄴ OS는 특이케이스인거지.

일반적인 large files들은 순차적으로 저장되어 있어야만 spatial locality로 이득을 보는데,

OS같은 경우는 데이터가 흩뿌려져있어도 loop문이 많이 쓰이니까 temporal locality로 이득을 볼 수 있잖아.

그리고 OS에서는 array가 많이 쓰이니까 spatial locality로도 이득을 볼 수 있고.

그러니까 다르다고 볼 수 있지.

 

그리고 read and write cache의 경우 OS가 언제 cache에 있는 data를 disk에 내릴지 handling할 수 있는데

단순 data disk는 그런 것도 애매하잖아.... 한번 읽은게 다시 쓰일 확률이 낮으니까 (특히 대용량 파일의 순차 읽기 할 때는)

얼마나 오래 cache가 data를 갖고 있어야 하는지가 애매하니깐...

 

[22.07.26]

https://docs.microsoft.com/en-us/learn/modules/caching-and-performance-azure-storage-and-disks/3-enable-and-configure-azure-vm-disk-cache-by-using-the-azure-portal

 

Enable and configure Azure VM disk cache with the Azure portal - Learn

Enable and configure Azure VM disk cache with the Azure portal

docs.microsoft.com

 

읽기/쓰기 캐시 : 데이터를 읽어올 때 캐시에서 확인하고 없으면 디스크에서 다시 캐시에 갖다놓고, 메모리로 가져간다.

데이터를 쓸 때도 마찬가지로 캐시에 먼저 쓴다. 그리고 캐시에서 할당 해제 할 때 디스크에 저장한다.

-> random i/o를 할 때 유리하다. 예를 들면, 운영체제.

 

생각해봐.

주상 책임님이 알려주셨는데... 일단 내가 이번에 배운 지식 정리해본다.

1. HDD는 플래터가 빙빙 도니까, 순차적인 데이터는 한번 돌았을 때 읽을 수 있는데

분산되어있는 데이터는 여러 번 돌아서 읽어야 한다.

2. SSD는 낸드 컨트롤러가 한번에 접근하니까 순차 접근이든 랜덤 접근이든 시간 차이가 안난다.

3. 그런데! 왜 USB에 큰 데이터를 한번에 넣을 때랑, 작은 데이터 여러 개 넣을 때 시간 차이가 현격하게 나지?

즉, Sequential access가 더 빠르고, Random access가 더 느린데, 왜 그러지?

 

https://prolite.tistory.com/967

위 벤치마크를 보면

① Seq Q32 T1 : 초당 최대 읽기와 쓰기 속도입니다.

② 4K Q32T1 : 묶음 전송 속도입니다. (초당 랜덤 읽기, 쓰기)

③ Seq : 순차 평균 읽기 쓰기 최고 속도입니다.

④ 4K : 저용량의 파일 읽기 쓰기 속도입니다. (이것도 랜덤이겠지?)

 

랜덤한게 속도가 더 떨어진다. 왜 그럴까?

https://tech.kakao.com/2016/07/17/coding-for-ssd-part-5/

 

개발자를 위한 SSD (Coding for SSD) - Part 5 : 접근 방법과 시스템 최적화

지금까지 SSD 드라이브의 내부적인 작동 방식에 대해서 살펴 보았다.또한 SSD를 접근할 때 어떤 방식이 사용되어야 하며, 그리고 그 접근 방법이 다른 방법보다 왜 나은지 등의 이해를 돕는 자료

tech.kakao.com

ㄴ 이 부분인 아주 아주 전문적인 내용이다. 솔직히 다 이해를 못했다.

하지만 읽어볼 가치가 충분한 글이다. 랜덤한게 속도가 왜 떨어지는지 써있다.

 

 

어쨌든 결론적으로,

VM의 disk caching 옵션은, SSD든 HDD든 상관없이

랜덤 엑세스를 위한 캐싱 옵션(read/write), 순차 엑세스를 위한 캐싱 옵션(read only), 그리고 쓰기만을 위한 옵션(none)으로 나뉘어져있다.

이게 핵심이다.

내부적으로 어떤 방식으로 캐시를 쓰는지는 나도 모르겠다. 뭔 알고리즘이 있겠지...

랜덤 엑세스에 최적화된 방식과 순차 엑세스에 최적화된 방식이... 

ㄴ한번 추론해보자.)

왜 캐시에 read/write를 하면 랜덤 i/o에 최적화된거고, 왜 캐시에 read만 하면 순차 i/o에만 최적화된걸까?

 

일단 read only 캐싱 옵션부터 생각해보자.

(read할 때만 cache를 쓰고, write를 할 때는 디스크에 바로 쓰는 방식)

 

데이터가 sequential하게 저장되어 있을 때 :

캐시를 최적으로 이용할 수 있다. 한 block으로 데이터를 가져오면, spatial locality를 충족시킬 것이기 때문에 효율적이다.

temporal locality는 충족시키지 못할듯.

데이터가 random하게 분포되어 있을 때 :

예를 들어서, 영상 데이터만 저장을 해놨다고 하자. 그러면 한번 가져온 데이터가 다음에 쓰일 가능성이 낮다.

(□ ■ □) (□ □ ■ ) (□ □ □) (■ □ □)

검은 네모가 영상 데이터이고, 이 데이터들이 분산되어 저장되어 있다고 하자. 그리고 ( ) 이 괄호가 캐시에 가져오는 block이라고 하자.

그럼 캐시에 가져와봤자, 다음에 또 쓰일 가능성이 낮다. 운이 좋다면 쓰이겠지만, 영상 파일은 1초 1초 단위로 다음에 실행할 데이터가 달라지니까... 캐시 자체가 별 의미 없어지는 것이다.

 

-> 그러면 빈번히 write를 하는 것 자체가 파일의 파편화를 불러오니까 안좋고, write를 했으면 디스크 조각모음을 해줘야하겠다.

웬만하면 한번 데이터를 넣고, 그 다음부터는 read만 하는 경우가 이 옵션을 쓰기에 가장 좋지 않을까 한다.

 

-> (추론) 그러면 read only 옵션은 꾸준히 디스크 조각모음등으로 계속 데이터들이 흩어져있지 않고 끼리 끼리 뭉쳐 있도록 구성하지 않았을까?

생각해보니 이것도 말이 안된다. 조각 모음을 한다는 뜻은 캐시가 아니라 디스크의 조각 모음을 한다는건데

그거 하면 속도 느려져서 안된다. 아니면 디스크 안쓸 때 하나? ㅋ 모르겠다. 안할거같음.

 

이번엔 read/write 캐싱 옵션을 생각해보자

read를 하든 write를 하든 캐시를 다 거치는 옵션이다.

 

데이터가 sequential하게 저장되어 있을 때 :

Q) 아무래도 read only 옵션을 선택하는 것보다는 더 느려야 말이 될 것 같은데...

안그러면 굳이 read only를 왜 쓰겠어?

-> 근데 느릴 이유가 없어보여. ㅡㅡ..

아니면 read/write cache는 캐시에 write를 하니까, 혹시라도 데이터를 잃어버릴 수 있잖아.

데이터가 자주 갱신도 안되고, 데이터 없어질 리스크 감당하기 싫을 때 쓰는건가???

아직도 잘 모르겠다.

 

데이터가 random하게 분포되어 있을 때 :

OS는 temporal/spatial locality를 적극적으로 활용하니까 의미가 있을 것 같다.

 

read only cache

데이터의 주도권이 디스크에 있다.

캐시의 내용이 바뀌면 안된다.

read-write cache

데이터의 주도권이 캐시에 있다.

캐시의 내용이 바뀔 수 있다.

 

-> 한마디로 데이터의 워크 로드에 따라 디스크 캐싱 옵션을 다르게 설정해야 한다.

 

 

좀 헷갈렸는데,

캐시 메모리 : cpu - ram 사이에 존재하는 캐시.

디스크 캐시 : ram - disk 사이에 존재하는 캐시.

https://velog.io/@woga1999/%EB%94%94%EC%8A%A4%EC%BA%90-%EC%BA%90%EC%8B%9C%EC%99%80-%EC%BA%90%EC%8B%9C-%EB%A9%94%EB%AA%A8%EB%A6%AC

 

디스캐 캐시와 캐시 메모리

디스크 캐시는 디스크로부터 읽은 내용을 일부 보존해두는 메모리 영역을 말한다. 나중에 같은 데이터를 읽어야 할 경우가 생기면 실제 디스크에서 읽는 게 아니라 디스크 캐시에서 빠르게 읽

velog.io

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=hajunggu&logNo=150053693860 

 

읽기 캐시와 쓰기 캐시

읽기 캐시와 쓰기 캐시 읽기 캐시(Read cache)란 디스크에서 정보를 가져올 때만 작용하는 것이며, 쓰기 ...

blog.naver.com

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">
  1. thumbnail
    스티브잡스
    2022.07.21 13:19

    와 정말 아름다운 글이네요! 랜덤 Access가 왜 느린지 저도 고민을 더 해봐야겠습니다. 정말 신기하군요.