• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
Linux

Linux 에서 램디스크(RAM Disk) 만들기 및 벤치마크.

달소 달소 1666

4

17

 

안녕하세요. 달소입니다.

 

이번글에서는 Linux에서 자원이 남는다면 활용하시기 좋은 램디스크를 만들어서 사용하는 방법입니다!

 

램디스크(RAM Disk)란?

램디스크란 이름 그대로 시스템이 사용가능한 램 가용량의 범위내에서 램을 디스크처럼 사용하는 것을 의미합니다.

https://namu.wiki/w/%EB%9E%A8%20%EB%94%94%EC%8A%A4%ED%81%AC

램디스크의 장점

 

램디스크의 장점은 당연히(?) 속도 때문인데요. SSD와 비교해도 압도적인 속도를 가지고있어 캐시데이터를 보관하거나 plex에서 트랜스코딩에 사용하는 방식등으로 많이 사용됩니다.

당연히(?) RAM은 휘발성 데이터이므로 재부팅을하게되거나 램을 비워지면 날아가기 때문에 일반적인 저장용도로는 사용되지않습니다.

 

리눅스에서는 tmpfs의 파일시스템으로 램디스크를 많이 구축합니다.

 

램디스크 만들기

먼저 free -h 명령어로사용가능한 램의 용량을 확인해줍니다.

여유용량이 7.3G 정도 되는군요.

 

image.png.jpg

여기서는 2G만 써보도록하겠습니다.

 

램디스크도 결국 마운트할 디렉터리가 있어야되기때문에 디렉터리를 하나 만들어주세요.

그리고 mount 명령어로 tmpfs 로 2G 사이즈를 해당 디렉터리에 마운트해주면 완성입니다.

 

mkdir -p /dev/ramdisk

mount -t tmpfs -o size=2G tmpfs /dev/ramdisk

 

그리고 df -h 로 램디스크로 마운트 된것을 확인할 수 있습니다.

image.png.jpg

 

이렇게 마운트를 하면 램디스크의 사용이 가능하지만 재부팅을 하게되면 설정값이 날아갑니다.

vi /etc/fstab으로 설정값이 들어가도록 아래 명령어를 입력해주세요.

 

echo "tmpfs /dev/ramdisk tmpfs defaults,size=2G 0 0" >> /etc/fstab

 

image.png.jpg

 

이렇게 들어가있으면 재부팅을해도 램디스크가 그대로 유지됩니다.

image.png.jpg

Nvme VS Ramdisk 벤치마크

 

디스크 i/o 벤치마크를 할텐데 sysbench를 사용해서 진행해보겠습니다.

파일은 1G 기준으로 했으며 나오는 결과의 Throughput은 아래를 참고했습니다.

image.png.jpg

 

차트로 해볼려고했는데.. 차트 너무 어렵네요.. 저는 문서작업에 소질이없나봅니다.

nvme ssd는 쓰기속도가 왜이렇게 느린지..(?) 모르겠네요;; 

램디스크가 짱입니다

 

image.png.jpg

 

※주의할점

본문에서도 미리 말씀드렸지만 램디스크는 휘발성이기 때문에 재부팅하면 다날아갑니다.. 데이터는 절대넣지말고 캐시정도로 사용이 적당합니다.

 

image.png.jpg

 

다음편에서는 이렇게 만든 램디스크를 Docker의 MariaDB에 붙여서 사용해보도록하겠습니다.

 

 

신고공유스크랩
17
4명이 추천
1등
th20ry 2022.05.12. 02:31

우분투 도커에 Plex 트랜스코딩용으로 램디스크 2GB 설정했는데 충분하려나요?

이번에 램을 48GB로 업글해서 충분해지긴했는데, 램 보릿고개(?)를 겪고 나니 VM에 램 주기가 싫어서요 ㅜ.ㅜ

KelvinKang 2022.05.12. 10:22
th20ry

그래서 Docker를 더 써야 합니다.

VM으로 나누면, 나눠준 램은 VM이 계속 가지고 있는데...

Docker는 프로세스로 돌기 때문에 도는데 필요한 만큼만 램을 사용합니다.

profile image
달소 글쓴이 2022.05.12. 10:30
KelvinKang

오호.. 그렇군요..

제가 생각하는걸로는 VM에 램디스크를 만들고 docker container에 해당 램디스크를 매핑시켜서 사용하려고하는데 효과적일까요??

KelvinKang 2022.05.12. 10:41
달소

제 기준에는 뭔가 안맞는 느낌 이랄까요...?

 

일단 램디스크의 활용 목적이 뭘까요.?

제가 이해하기로는 남는 램을 느린 디스크 대신 사용 하는 용도로 알고 있습니다.

그래서 가장 효과를 보는것이 하드디스크의 캐시를 램디스크로 생성하고 캐시를 램디스크로 활용하면 효과를 많이 본다고 이해하고 있습니다.

(체감하기 가장 좋은 방법은 브라우저의 캐시 폴더를 램디스크로 활용하는 방법 입니다. 날아가도 문제없고, 브라우징 속도가 어마무시하게 빨라 집니다.)

 

그리고, Docker container를 램디스크에 매핑하면 하는건 위험하다고 저는 생각합니다.

램디스크의 최대 단점은 전원이 갑자기 상실되는 경우 데이터가 바로 날아 가게 됩니다.

(물론 방지 하는 기능도 탑재되어 있지만 결국 디스크에 뭔가를 다시 저장하게 되고, 그과정에서 전원이 완전히 나가면 데이터는 유실됩니다.)

불의의 사고로 컴퓨터가 꺼지면 Container가 망가지지 않을까요.?

profile image
달소 글쓴이 2022.05.12. 11:01
KelvinKang

Conatiner에서도 데이터를 저장하는 장소가 아닌 /tmp (기존 램디스크)에 매핑할 예정입니다.

mariadb의 docker의 경우에는 /tmp 파일이 임시디렉터리로 사용되나 일반디스크 입니다.

 

그래서 VM에서 램디스크를 만들어준뒤 컨테이너의 램디스크(/dev/shm)에 매핑해준다음 해당 디렉터리를 db의 임시디렉터리로 사용하게되면 효율적이지않을까... 생각해보고있습니다.

 

KelvinKang 2022.05.13. 09:48
달소

날라가도 되는 tmp 폴더를 매핑 하고,

캐시파일이 쌓이도록 하는건 좋은 생각 같습니다.

 

실제 효율은... 아마도 운영을 해보며 결과치를 보는것 밖에는 답이 없지 않을까 싶습니다.

예를 하드로 했을때 응답률이 10ms 인데, 램디스크로 하면 1ms 라고 하면

단순히 수치 상으로는 빨라 보이나 Request가 그만큼 많지 않으면 결국 10ms 로 받으나, 1ms 로 받으나 거기서 거기가 될수도 있거든요.. 괜히 운영만 복잡해 지게 될수도 있죠...

th20ry 2022.05.12. 12:23
KelvinKang

댓글 감사합니다.

우분투에 총 4GB 할당하고 docker로 plex 올리고 그 중에서 2GB를 램디스크로 /mnt/ramdisk에 마운트 및 plex의 /transcode 폴더만 램디스크에 마운트했습니다.

도커는 잘 사용중입니다.

profile image
달소 글쓴이 2022.05.12. 13:08
th20ry

저도 딱 이렇게 사용할까.. 생각중입니다 ㅎㅎ 선구자가 계셨군요!

profile image 2등
달소 글쓴이 2022.05.12. 09:06

48G 정도시면...ㅎㅎ 4기가 정도는 주셔도 되지않을까요? ㅎ

물론 2G 정도면 충분할거같긴합니다

3등
neidn 2022.05.12. 11:18

db에서 로컬이 아닌 메모리를 저장소로 쓰는거 같은 느낌이네요

잘쓰면 정말 유용하겠어요

profile image
달소 글쓴이 2022.05.12. 11:23
neidn

구글링해보니 그렇게 사용하는 경우도 실제로 있더군요..

그렇게 됐을때 전원문제로 재부팅되거나 하면 데이터가 모두 날아가버리니.. 저는 무서워서 그렇게는 못쓰고 tmp 용도로만 마운트해서 사용해볼까합니다

profile image
달소 글쓴이 2022.05.13. 10:00
KelvinKang

UPS.. 명목상으로 존재는하고있지만 ㅎㅎ 셋팅을 안해서.. 다죽을겁니다~~

profile image
ExpBox 2022.05.17. 17:47

남아도는 오라클 클라우드 메모리에 올려서 써야겠네요. 감사합니다 ㅎㅎ

profile image
달소 글쓴이 2022.05.17. 17:54
ExpBox

헐 그러네요.. 생각해보니 오라클클라우드는 램이 어마어마하게 남는군요..

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story

본 게시판은 서버구축 게시판과 통합되었습니다.

서버구축 게시판 이동하기