일반 파일 시스템 대신 tmpfs + / tmp에 대한 매우 큰 스왑 파티션을 사용합니까?


8

Linux 서버가 있고 여분의 500GB 디스크 파티션이 있습니다. 형식을 지정하고 / tmp에 사용하고 싶었습니다. 서버는 때때로 큰 데이터 처리 작업을 실행하여 / tmp가 GB의 임시 데이터를 보유 할 수 있습니다.

그런 다음 대신 스왑 파티션으로 추가하고 / tmp를 tmpfs에 마운트 할 수 있다는 아이디어를 얻었습니다. 이 아이디어는 합리적입니까?

서버에는 6GB의 RAM이 있으므로 대부분의 경우 / tmp의 데이터는 RAM에만 있으며 속도 이점이 뛰어납니다. 문제는 / tmp에 10-20GB의 데이터가 있다고 가정하면 시스템은 어떻게 작동합니까? 단순히 / tmp를 ext4 파티션에 마운트 한 것과 비교하여 성능은 어떻습니까? 도와 주셔서 감사합니다.

편집 : tmpfs 사용이 RAM 제한에 도달하면 시스템이 메모리 스왑 아웃을 시작한다는 것이 분명합니다. 그러나 리눅스는 tmpfs 데이터를 바꾸고 RAM에 "일반적인"데이터를 유지하기에 충분히 똑똑합니까? 그렇다면 합리적으로 행동 할 수 있다고 생각합니다. 그렇지 않은 경우 전체 시스템이 심각하게 영향을받습니다.


zram을 잊지 마십시오.
Ken Sharp

답변:


12

이것은 좋은 생각이 아닙니다 TM .

당신은 큰과 괜찮을거야 /tmp파티션, (당신의에서이 같이 장착 /etc/fstab)

tmpfs  /dev/tmp  tmpfs  defaults,nosuid,nodev,noexec,noatime,nodiratime,size=6000M 0 0

그리고 외부 드라이브를 거대한 스왑 파티션으로 추가 할 수 있습니다

/dev/sdb1  swap  swap  defaults  0 0

그것이 한계에 도달하면 머신은 RAM에서 디스크로 페이지를 교환하기 시작합니다.이 시점에서로드 평균이 지붕을 통과하고 머신이 정지합니다.

어떤 식 으로든 SWAP에 의존하는 것은 나쁜 생각입니다. 500GB 드라이브를 판매하고 더 많은 RAM을 구입하는 것이 좋습니다 .

요약하자면

실제로 500GB 디스크를 사용하려면 /tmpatime 및 diratime을 비활성화 한 비 저널 파일 시스템으로 500GB 디스크를 마운트 할 수 있습니다 (예 :) ext2. 즉 기계를 다루는 것보다 실질적으로 더 빠른 것 SWAP보내고


1
이것은 끔찍한 생각입니다. tmpfs를 사용하고 아이디어와 같은 소리를 교환하기 위해 그것을 사용하는 것에 의존합니다 ...하지만 실제로는 시스템이 tmpfs를 물리적 RAM에 유지하는 대신에 잘못된 것을 교환하기 위해 잘못된 것을 밀어 넣을 수 있습니다. 500gb 파티션을 / tmp에 마운트하고 완료하는 것이 좋습니다. xfs의 riserfs와 같은 초경량 파일 시스템을 사용하는 것이 좋습니다 ... 시작시 또는 필요할 때마다 신속하게 다시 포맷 할 수 있으므로 모든 고급 기능이 필요하지는 않습니다. ext2 / 3 / 4 등.
TheCompWiz

3
왜 공감해야합니까? 나는이 행동을 용납하지 않았지만 어떻게해야하는지에 대한 수단을 제공했다. 문제는 그것이 가능한지 아닌지에 대한 방법이었습니다. 좋은 아이디어인지 아닌지에 대한 것이 었습니다. 나는 이것이 나쁜 생각이라고 명시 적으로 언급했다. 실제 솔루션은 더 빠른 tmp액세스가 필요한 경우 더 많은 RAM을 구입하는 것 입니다.
Fran

1
이것은 덕트 테이프 및 버블 껌 솔루션이 아닌 좋은 아이디어를 위한 장소입니다 . 사람들은 도움을 얻기 위해 여기에옵니다 ... 그리고 삶을 지옥으로 만드는 방법에 대한 아이디어가 아닙니다.
TheCompWiz

귀하의 의견에 감사드립니다. 귀하의 의견에 감사드립니다
Fran

3
여기의 모든 사람들은 이것이 나쁜 생각이라는 데 동의하는 것 같습니다. 그러나 커널 문서의 tmpfs.txt는 이것을 tmpfs의 사용 사례 중 하나로 나열합니다. @Fran, 스 래싱을 일으킬 것이라는 무서운 주장을 뒷받침 할 데이터가 있습니까? 분명히 이것은 / tmp에 어떤 일이 일어날 지에 달려 있습니다.
migle

1

이것은 합리적인 아이디어 일 수 있습니다.

파일 시스템이 시스템 장애시 디스크의 데이터가 손상되지 않도록하기 위해 실제 파일 시스템을 / tmp에 배치하면 오버 헤드가 발생합니다. 부팅 할 때 정리 된 / tmp의 경우 분명히 오버 헤드입니다. tmpfs를 사용하면 오버 헤드를 피할 수 있습니다.

반면에 파일 시스템은 파일이 액세스 시간을 최적화하는 방식으로 디스크에 정리되어 있는지 확인합니다. 즉, 조각화를 피할 수 있습니다. 일반적인 순차 파일 액세스는 (주로) 순차 디스크 액세스를 발생 시키며 이는 임의 액세스보다 효율적입니다. 이 효과는 SSD보다 하드 디스크 회전에 더 두드러집니다. swap은 어떤 메모리가 어떤 파일에 속하는지, tmpfs가 페이지가 실제 메모리 또는 디스크에 어떻게 매핑되는지를 인식하지 못하기 때문에 swap + tmpfs 조합은이를 쉽게 수행 할 수 없습니다. 그러나 큰 파일의 경우 tmpfs와 swap이 모두 인접한 경우에 일관되게 유지하기 때문에 제대로 작동해야합니다. 적어도 스왑에 여유 공간이 많으면 (그렇지 않으면 조각화가 시작되고) 쓰기가 스왑 아웃 될 가능성이있을 정도로 느리게 발생합니다.

결론은 다음과 같습니다. 상황에 따라 두 옵션을 모두 사용하여 가장 적합한 옵션을 확인해야합니다.

tmpfs를 마운트 할 때 크기를 명시 적으로 설정해야합니다. 기본값은 물리적 RAM의 절반이므로 3GB입니다.


— 합리적인 답변 (다른 것보다 아이러니하게 깊은 곳)
poige

1

일반적으로의 데이터가 많지 /tmp않지만 제한된 기간 동안 무한한 기가 바이트를 소비하는 경우 실제로 좋습니다 . 문제는 리눅스 스왑 시스템이 유스 케이스에 대해 제대로 알지 못한다는 것입니다. 일반적으로 프로그램 페이지보다 캐시 덤프 또는 스왑을 우선시하지만 실제로 도움이되지는 않습니다. cgroup을 사용하여 목표를 달성하는 것이 가능할 수 있습니다. 스크래치 데이터가 프로그램 메모리에 저장되어있을 때이지만이 경우 cgroup을 구성하는 방법을 모르겠습니다 (FUSE tmpfs를 사용할 수 있다고 가정합니다 ...) . 다행히도 필요하지 않습니다. zram 및 백업 장치를 사용하여 원하는 동작을 얻을 수 있습니다.

zram-init압축 램 블록 장치 인 zram 설정을 자동화하는 프로그램입니다. 일반적으로 zram-init구성에 /tmpzram으로 마운트하기위한 예제가 있습니다. 다음과 같습니다.

type0=/tmp
flag0= 
size0=524288 # 500G of logical space
mlim0=2G # 2G of memory
back0=/dev/loop0 # (or /dev/sdxN, your large slow drive)
notr0= 
maxs0=4 # maximum number of parallel processes for this device
algo0=zstd 
labl0=tmp # the label name
uuid0= 
args0= 

이것은 / tmp에 쓰여진 것을 압축하여 메모리에 저장합니다. 일반적인 압축은 약 50 % 정도입니다. 최대 2G의 실제 메모리를 소비합니다. 실제 메모리가 부족하면 가장 오래된 파일을 가져 와서 백업 장치로 밀어 넣고 여전히 압축합니다. 파일을 압축 및 압축 해제하는 데 약간의 CPU 오버 헤드가 발생하지만 이는 일반적으로 감소 된 IO에 의해 상쇄됩니다.

cgroup과 함께 유사한 설정을 사용하여 전체 시스템 성능에 영향을 미치지 않으면 서 특정 프로세스를 교환 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.