RAM이 62GB인 컴퓨터가 있고 트렁크는 7GB에 불과하므로 RAM 디스크를 만들어 거기에서 컴파일해야겠다고 생각했습니다. 저는 리눅스 전문가가 아닙니다. 온라인에서 RAM 디스크를 만드는 방법에 대한 지침을 찾았습니다.
mkfs -q /dev/ram1 8192
그런데 8192를 16777216으로 변경해서 16GB 램디스크를 할당하려고 했는데요.
다음 오류가 발생합니다.
mkfs.ext2: Filesystem larger than apparent device size.
Proceed anyway? (y,n)
그 때 나는 겁을 먹고 보석금을 냈습니다.
sudo dmidecode --type 17 | grep Size
프로그램
8x8192MB + 2048MB = 67584 MB
그러나 du
그것은 /dev
주어진다 804K
.
이것이 문제인가요? 이 사이즈를 넘을 수 있을까요 /dev
?
답변1
Linux에서 램 디스크를 만드는 가장 좋은 방법은 tmpfs입니다. RAM에 위치한 파일 시스템이므로 ext2가 필요하지 않습니다. 다음 명령을 사용하여 16GB 크기의 tmpfs를 생성할 수 있습니다.
mount -o size=16G -t tmpfs none /mnt/tmpfs
답변2
리눅스는매우효율적인 RAM 사용. 당연히 가속도를 거의 느낄 수 없습니다 tmpfs
. 메모리로 읽어오는(따라서 프로세스 속도를 늦출 수 있는) 가장 큰 부분은 도구(컴파일러, 어셈블러, 링커)입니다. 즉, make
시작 시 메모리에 로드되어 절대 떠나지 않습니다. 남은 것은 소스 코드를 읽는 것뿐입니다(메모리가 심각하게 제한되지 않는 한 결과를 작성해도 속도가 느려지지 않습니다). 마찬가지로 공통 헤더 파일은 보존되며 사용자의 소스 코드만 읽으면 됩니다. 이는 몇 메가바이트를 넘지 않을 것입니다. 큰 RAMdisk를 만들거나 너무 많이 사용하면 tmpfs
작업 속도가 상당히 느려질 수 있습니다(빌드 메모리, RAMdisk 또는 해당 파일을 제한하여).tmpfs
할 수 없다거기에서 직접 사용할 수 있습니다).
답변3
tmpfs
및 이외의 ramfs
또 다른 옵션 은 /dev/ram0
블록 장치입니다. 최신 Ubuntu 버전에서는 이 장치가 기본적으로 존재하지 않지만 modprobe brd
.
이 방법은 실제 파일 시스템을 생성하고 ext4
사용자가 지정한 제한을 절대 초과하지 않기 때문에 예측 가능성이 더 높습니다. 그러나 더 많은 설정 단계가 필요하고 RAM을 덜 효율적으로 사용합니다.
brd 커널 모듈(/dev/ram0) 사용
4GB RAM 디스크를 생성하고 초기화합니다.
mkdir /ramdisk
modprobe brd rd_nr=1 rd_size=$((4 * 1048576))
mkfs.ext4 /dev/ram0
mount /dev/ram0 /ramdisk
이 rd_nr
매개변수는 생성할 RAM 디스크 수를 지정합니다(기본적으로 16개가 생성되며 전달됨 /dev/ram0
) /dev/ram15
. 매개변수 rd_size
크기는킬로바이트. 이 $(( ... ))
구문을 사용하면 셸에서 산술 연산을 수행할 수 있습니다.
RAM 디스크를 비우려면 마운트 해제하고 brd
커널 모듈을 제거합니다.
umount /ramdisk
modprobe -r brd
내부에 블록 장치 생성ramfs
또는 다음 위치에서 블록 장치를 생성할 수 있습니다 ramfs
.
mkdir /ramdisk-storage /ramdisk
mount -t ramfs ramfs /ramdisk-storage
truncate -s 4G /ramdisk-storage/ramdisk.img
mkfs.ext4 /ramdisk-storage/ramdisk.img
mount /ramdisk-storage/ramdisk.img /ramdisk
이 truncate
명령은 요청 시 초기화(예: 메모리 소비)하기 위해 지정된 크기의 빈 파일을 만듭니다.
RAM 디스크 할당을 취소하려면 마운트 해제하고 디스크 이미지를 삭제하세요.
umount /ramdisk
rm /ramdisk-storage/ramdisk.img
tmpfs
와 비교ramfs
tmpfs
및 블록 장치를 사용하는 것보다 더 효율적 이지만 ramfs
몇 가지 단점이 있습니다.
tmpfs
디스크로 교체될 수 있습니다. 이것이 더 효율적이지만 때로는 RAM 전용 디스크가 필요할 수도 있습니다.
- 작업 중인 파일은 중요합니다(예: 암호화된 파티션의 파일).
- 성능 테스트를 수행 중이며 디스크 I/O가 요인이 되는 것을 원하지 않습니다(SSD 쓰기 시간은 크게 다를 수 있음).
- 대용량 파일의 압축을 풀고 SSD가 마모되는 것을 원하지 않습니다.
ramfs
설정이 쉽고, 파일이 삭제되면 공간을 회수하며 RAM을 보다 효율적으로 사용합니다(시스템은 파일이 RAM에 있다는 것을 알기 때문에 파일을 버퍼링하지 않습니다). 그러나 여기에는 단점과 놀라움도 있습니다.
유틸리티
df
는 공간 사용량을 보고하지 않습니다.root@cello-linux:~# df -h /ramdisk Filesystem Size Used Avail Use% Mounted on ramfs 0 0 0 - /ramdisk
크기 제한 매개변수가 없습니다. 램디스크에 너무 많은 콘텐츠를 넣으면 시스템이 중단됩니다.
희소 파일은 최소한 예상할 때 덜 희소해질 수 있습니다. 오늘 아침에 VM 이미지(150G, 디스크에서는 49G 사용)를
ramfs
(128G RAM 있음)에 복사했습니다. 작동합니다. 그런데 복사할 때~에서ramfs
목적지 에 도착한 후 시스템이 응답하지 않게 되었습니다. 이cp
유틸리티는 분명히 구멍을 메웁니다.읽다, 하지만 글을 쓸 때는 그렇지 않습니다.
tmpfs
ramfs
실제 파일 시스템과 다르게 동작할 수도 있습니다 ext4
. RAM에 블록 장치를 생성하고 초기화하면 ext4
이러한 상황을 피할 수 있습니다.
보다 심층적인 비교:https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt
답변4
ramfs
파일 시스템을 마운트하고 프로젝트를 여기에 복사한 후 거기에서 작업을 시작할 수 있습니다. 이렇게 하면 입력 파일이 RAM에 로드되고 훨씬 느린 디스크 드라이브에서 다시 읽히지 않게 됩니다. 그러나 이미 알고 있듯이 이는 일반적으로 유용한 전략이 아닙니다. 귀하는 이미 동일한 혜택을 누리고 있습니다.
Ramfs는 내보내기를 수행하는 매우 간단한 파일 시스템입니다.Linux 디스크 캐싱 메커니즘(페이지 캐시 및 디렉토리 캐시)를 동적으로 크기 조정 가능한 RAM 기반 파일 시스템으로 사용합니다.
--https://github.com/torvalds/linux/blob/v4.18/Documentation/filesystems/ramfs-rootfs-initramfs.txt
입력 파일을 처음 읽을 때 RAM에 캐시되어 있다는 것을 이미 신뢰할 수 있습니다. 출력 파일도 캐시되므로 해당 파일이 디스크에 기록될 때까지 기다릴 필요가 없습니다.
캐시할 수 있는 양, 캐시할 수 있는 기간 등에 대한 인위적인 제한은 없습니다. 메모리가 가득 찬 후에만 캐시가 삭제되기 시작합니다. 어떤 캐시를 먼저 삭제할지는 매우 복잡한 알고리즘에 의해 선택됩니다. 첫 번째 근사치로 "가장 최근에 사용된" 것으로 설명합니다. 바라보다운영 체제 파일 캐싱을 위해 Linux 커널에서 어떤 페이지 교체 알고리즘이 사용됩니까?
텍스트 편집기는 fsync()
파일을 디스크에 명시적으로 저장합니다.
프로그램과 관련된 테스트를 실행하는 경우 fsync()
파일 시스템에서 해당 테스트를 실행하면 ramfs
작업 속도가 빨라질 수 있습니다. 또 다른 전략은 를 사용 fsync()
/ eatmydata
비활성화 하는 것입니다 nosync.so
.
일부 다른 운영 체제에는 램디스크를 사용하여 우회할 수 있는 특정 제한 사항이 있을 수 있습니다. 한편으로는 부족한 부분도 있고어느파일 캐싱은 램디스크가 인기 있는 이유입니다운영 체제.
임시 파일 시스템
tmpfs
ramfs
가능한 경우 스왑 공간을 사용할 수 있다는 점을 제외하면 와 동일하게 작동합니다 . 즉, 다른 용도로 RAM이 필요한 경우 가장 최근에 사용된 알고리즘이 tmpfs에서 데이터 블록을 선택하여 디스크로 교환할 수 있습니다.
tmpfs
대부분의 사람들은 전체 크기를 제한하고 명령에 사용된 올바른 공간을 표시할 수 있기 때문에 이를 고수합니다 df
. 왜 이런 차이가 존재하는지 잘 모르겠습니다. 크기 제한은 tmpfs
실수로 전체 RAM을 채우고 기본적으로 시스템을 종료하는 것을 방지합니다. 기본값은 절반 RAM입니다.
쓰기 속도가 느린 다른 이유
위의 내용은 귀하의 상황에 따라 단순화되었습니다. 귀하의 경우 파일에 쓰는 데 디스크를 기다릴 필요가 없습니다. 그러나 이는 일부 글쓰기 상황에서는 사실입니다. 훌륭한 블로그 게시물 보기버퍼링된 쓰기가 때때로 중지되는 이유는 무엇입니까?. 가장 놀라운 사례는 Stable Page Writing이라는 Linux의 최근 변경 사항입니다.