성능을 위해 파티션과 파일을 바꾸시겠습니까?


62

성능이 더 좋은 것은 무엇입니까? 디스크 내부에 가까운 파티션은 액세스 시간이 느려질 수 있으므로 드라이브가 OS와 스왑 파티션간에 전환 될 때까지 기다려야합니다.

반면, 스왑 파티션은 모든 파일 시스템을 우회하여 디스크에 직접 쓸 수 있으므로 파일보다 빠릅니다.

성능 트레이드 오프 란 무엇입니까?

고정 된 크기의 스왑 파일을 갖는 것이 얼마나 큰 차이가 있습니까?

스왑 파티션으로 변경하는 것이 더 길지만 스왑 파일을 사용하는 경우 스왑 파일을 사용하는 경우 스왑 파티션에있을 때 성능이 더 좋아 집니까?


그냥 호기심. 커널 버전, RAM, 파티션 및 파일 시스템 구성표와 같은 시스템 정보를 제공 할 수 있습니까?
Viky

찾고있는 OS는 무엇입니까?
Mathieu Chateau

4
리눅스 정보는 lkml.org/lkml/2005/7/7/326
Adam Monsen

질문에 대한 업데이트가 있습니까?
kokbira

답변:


29
  1. 하드 디스크의 경우 데이터는 실린더 당 더 많은 섹터를 갖는 디스크의 외부 영역에 더 가깝게 저장되기 때문에 처리량과 탐색이 디스크의 시작 부분에 비해 더 빠릅니다. 따라서 디스크 시작 부분에 스왑을 만들면 성능이 향상 될 수 있습니다.

  2. 2.6 Linux 커널의 경우 스왑 파티션과 조각화되지 않은 스왑 파일 간에 성능 차이가 없습니다 . swapon에 의해 스왑 파티션 / 파일이 활성화 되면 2.6 커널은 스왑 파일이 저장된 디스크 블록을 찾아서 스왑 할 때 파일 시스템을 전혀 처리 할 필요가 없습니다.

따라서 스왑 파일이 조각화되지 않은 경우 동일한 위치에 스왑 파티션이있는 것과 같습니다. 또는 다른 방법으로 스왑 파티션 원시를 사용하거나 파일 시스템으로 포맷 한 다음 모든 공간을 채우는 스왑 파일을 만들면 동일한 성능을 얻을 수 있습니다. 디스크의 어느 쪽이든 스왑에 사용되는 연속 영역이 있기 때문입니다. 커널이 직접 사용합니다.

따라서 파일 시스템이 최신 상태 일 때 스왑 파일을 만들면 (그래서 조각화되지 않고 볼륨의 시작 부분에 있는지 확인) 성능은 볼륨 바로 전에 스왑 파티션을 갖는 것과 동일해야합니다. 또한 볼륨 중간에 스왑 파일을 만든 경우 양쪽에 파일이 있으면 스왑을 원치 않기 때문에 성능이 향상 될 수 있습니다.

Linux에서 스왑 파일이 조각화되지 않고 만들어지고 확장되지 않으면 최소한 ext3 / 4와 같은 일반 파일 시스템에서는 조각화 될 수 없습니다. 항상 동일한 디스크 블록을 사용하며 이는 연속적입니다.

전용 스왑 파티션의 유일한 장점은 확장해야 할 때 조각 모음이 보장된다는 것입니다. 스왑이 확장되지 않으면 새로운 파일 시스템에서 생성 된 파일에는 추가 파티션이 필요하지 않습니다.


5
여기에 추가 할 수있는 유일한 것은 머신이 "디스크에 일시 중단"되도록 구성된 경우 실제로 발생하는 것은 메모리의 내용이 스왑되도록 작성된다는 것입니다. 이것이 작동하려면 스왑이 활성 파일 시스템에있을 수 없으므로 스왑이 자체 파티션에 있어야합니다. 따라서 서버가있는 경우이 기능을 사용하지 않고 스왑 파일을 행복하게 사용할 수 있습니다. 랩톱을 사용하는 경우 스왑 파티션이 필요하므로 최대 절전 모드로 "파일에 일시 중단"할 수 있습니다.
Nathan S. Watson-Haigh

@ NathanS.Watson-Haigh 이미 교환 된 데이터는 어떻게됩니까? 버릴 수 없습니다.
XTF

3
@ NathanS.Watson-Haigh 소스를 연결할 수 있습니까? 우분투 17.04는 기본적으로 스왑 파일을 사용합니다. "디스크에 일시 중단"할 수 없다면 놀랍습니다.
Matthias Weiler

22

실제로 스파 스 파일을 사용하지 않는 한 큰 차이는 없습니다 .

dd를 사용하여 "정상"파일을 작성하면 단일 실행으로 파일이 할당되며 (가능한 경우) 스파 스 파일을 작성하면 10GB 파일이 있지만 실제로 모든 공간을 사용하지는 않습니다. mkswap이 어쨌든 공간을 할당하지는 않지만 확실하게 스왑 파일이 시간이 지남에 따라 디스크의 일부와 같이 연속 섹터를 할당하지 않고 필요에 따라 블록을 할당합니다. 시간에 따른 조각화 (물론 디스크 사용량에 따라 다름)

내부적으로 리눅스 커널은 스왑 파일의 기본 블록에 어느 정도 직접 액세스 할 것입니다-지금 당장 발생하는 링크를 찾을 수 없습니다. 누군가 더 공식적인 것을 찾지 않으면이 링크를 믿어야합니다. 지금 당장 내가 할 수있는 것은 :

이 모든 것은 2.6 라인의 Linux 커널에만 적용됩니다.

최적의 성능을 원한다면 (그리고 실제로 무엇입니까? ... 스와핑이 느리고 기간이 짧습니다. 최상의 성능을 위해 스왑하지 않도록 RAM을 늘리십시오 ) 파티션을 사용하고 싶을 것입니다.


18
최신 버전의 스왑은 파일에 구멍이 있음을 언급하면서 스왑 형식의 스파 스 파일에 대한 작업을 거부합니다.
Tim Post

3

이것은 흥미로운 질문이며 이것에 대해 많은 것을 읽었습니다. 일반적으로 스왑 파티션은 기본 파일 시스템으로 인해 파일보다 낫습니다. 그러나 항상 스왑 크기를 늘려야하는 경우 파일이 더 좋습니다. 커널 2.4까지는 스왑 파티션이 파일보다 빠르다고 생각되었지만 커널 2.6의 개선으로 성능은 거의 동일합니다.

내가 인터넷에서 찾은 것.

http://www.go2linux.org/swap-file-vs-swap-partition

http://www.sunmanagers.org/pipermail/summaries/2005-November/006913.html


그러나 이러한 링크 중 어느 것도 그들의 결정 뒤에 이유를 설명하지 않습니다.
Bill Gray

그 이유는 파일에 기본 파일 시스템 과부하가 있기 때문입니다. 파일을 작성하면 조각화 될 수 있습니다. 스왑시 캐시되는 파일에 따라 스왑 파일 시스템 자체 인 전체 파티션에 비해 읽기 속도가 느려질 수 있습니다.
Viky

더 깊이 파고 들어 위키에서 관련 기사를 찾았습니다. 확인을 위해 스왑 튜닝 매개 변수가 거의 없습니다. 또한 Linux 구현에서 설명을 확인하십시오. 도움이 될 수 있습니다. en.wikipedia.org/wiki/Paging
Viky

위에서 언급 한 위키 링크에서 인용 한 내용 중 하나를 따랐으며 동일한 문제에 대한 흥미로운 주제를 발견했습니다. 확인하고 싶을 수도 있습니다. lkml.org/lkml/2005/6/28/427
Viky

내 질문에 파일 시스템 과부하를 언급했지만 내부 디스크 근처에 파티션을 갖는 것만 큼 성능 블록은 아닙니다. 이러한 지연은 파일 시스템 오버 헤드보다 큽니다.
Bill Gray

2

스왑이 일시 중지 / 슬립 상태 일 때 스왑에 데이터를 기록하는 구성으로 랩톱을 실행하지 않는 한 지금은 현재 단계에 있다고 생각합니다. 스왑은 실제로 "마지막 수단"으로 간주해야합니다. 가장 좋은 방법은 디스크에 페이징되지 않도록 충분한 RAM을 상자에 넣는 것입니다.

즉, 파일이 더 유연하지만 파티션이 성능면에서 더 좋은 방법 일 것입니다. 7200+ RPM 스핀들에 있는지 확인하십시오.


1
액세스 시간이 지연의 요인이 될 수있는 경우 파티션 성능이 더 나은 이유는 무엇입니까?
Bill Gray

5
파일을 사용하면 더 많은 헤드 이동이 필요할 수 있기 때문에 데이터를 읽고 쓸 페이지를 찾을 때 파일 시스템의 어느 위치 에나있을 수 있으므로 fs 구조를 검색해야 할 수도 있고 스왑 파티션을 사용하면 각 페이지가 알려진 위치에 있습니다. 분할. 이는 대량 처리량에 따라 액세스 시간을 차별화 요소로 만듭니다.
David Spillett

2
"최대 절전 모드가 필요하지 않으면 스왑을 구성하지 마십시오"는 논란의 여지가 있습니다. 때때로 시스템의 실제 메모리 스왑이 낮은 경우 시스템을 복구 할 수 있습니다. 스왑이 없으면 메모리를 많이 할당하는 프로그램을 실행하는 데 제한이 있지만 실제로는 대부분의 메모리를 건드리지 않습니다 (예 : 특정 디버깅 도구). 점유되었지만 유휴 상태의 메모리 영역이 디스크 캐시로 사용되는 것이 좋으며, 스왑이 가능한 경우에만 트레이드 오프를 수행 할 수 있습니다. 자세한 내용은 unix.stackexchange.com/questions/2658/… 를 참조하십시오 .
Anon

1
@Anon이 말한 것. Chrome은 악명 높은 메모리 호그이며 100 개 미만의 탭으로도 메모리 사용률이 약 90 %이고 스왑 파일이 없으면 16GB 노트북이 몇 분 동안 응답하지 않습니다. 놀랍게도 Ubuntu에는 OS에 메모리가 부족함을 사용자에게 경고하는 기본 제공 메커니즘이 없습니다 .
댄 Dascalescu

2

우리의 생각은 스왑 파일이 조각화되고 조각화가 스왑 액세스를 느리게 할 수 있기 때문에 파티션이 더 나은 방법이라는 것입니다. 물론 정적 크기의 스왑 파일을 정의하는 것은 거의 같은 일이지만 주관적으로 더 깔끔한 것처럼 보입니다.

이 방법이 진정한 방법입니까? 연습이 10 년 전에 설립 되었기 때문에 아마도 아닐 것입니다. 그 사이에 드라이브 기술의 유일한 주요 변경 사항은 우리가 사용하는 RAID 컨트롤러의 복잡성입니다. 드라이브 크기가 증가하면 우리가 생성 한 스왑 파티션이 18GB 드라이브가 표준으로 출하 될 때보 다 드라이브 시작에 더 가까워 지므로 스왑 속도가 이전보다 훨씬 빨라졌습니다.

물론, ESX 기반 Windows 시스템에서 스왑 파일의 위치는 완전히, 전리품입니다. 스왑 파일과 물리적 디스크 플래터 사이에는 가상화 계층이 너무 많아 중요하지 않습니다. 그러나 우리는 표준이기 때문에 별도의 파티션에 보관합니다.


4
커널이 직접 mmap 방식을 사용하고 파일을 늘리거나 줄이지 않기 때문에 스왑 파일은 조각화되지 않습니다. 가상화에 대한 귀하의 의견은 +1입니다. 종종 중요하지 않습니다.
parasietje

0

스왑 파일을 사용하면 파일 간 메모리 변환에 약간의 추가 메모리가 사용될 수 있습니다. 우리는 1GB 스왑 당 1MB 미만의 메모리에 대해 이야기하고 있습니다. 파일 시스템 캐시는 스왑 된 데이터를 캐시하지 않고 조직 데이터 만 캐시하며, 이는 추가 메모리 요구 사항의 대부분이어야합니다.

게다가 나는 당신이 한 번의 추가 헤드 검색의 1000 배에서 한 번을 제외하고는 합리적인 성능을 잃을 것이라고 의심합니다.

재미있는 점은 zswap을 동적으로 확장되는 스왑 파일과 함께 사용하면 사용하지 않는 동안 적은 비용으로 스왑 작업의 속도를 크게 높일 수 있습니다.


1
당신의 주장에 대해 어떤 종류의 정당성을 제공 할 수 있습니까? 다소 일화적인 것 같습니다.
Austinian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.