2012-10-24 11 views
2

주 메모리보다 큰 데이터 세트가 있습니다. 압축 후 메모리에 저장됩니다. 그러나 메모리 내 압축 해제는 일종의 연산 집약적 인 작업입니다. 하드 드라이브의 압축되지 않은 데이터에 액세스하는 것과 비교할 때 메모리 내 압축 해제는 완료까지는 어떤 이점이 있습니까? HDD로부터의 데이터가 전체적으로 메모리에로드된다고 가정한다 (즉, 처리 중에 HDD에 임의로 액세스하지 않음). 누구나 전에 벤치 마크를 해왔습니다. 감사.더 빠릅니다 : 메모리 내 압축 해제 또는 HDD의 비 압축 데이터 액세스

+0

다릅니다. 어떤 종류의 압축? 예를 들어, LZO는 매우 빠르지 만 bzip은 실제로 상당히 계산 집약적입니다. – harold

답변

2

적어도 HDD가 데이터를 읽는 속도만큼 압축을 풀고 디스크 읽기와 병렬로 압축을 풀면 압축 된 데이터 읽기가 거의 항상 빠릅니다 (작은 파일 읽기가 더 빨리 완료되고 압축 해제가 추가됩니다 마지막 블록의 레이턴시 만).

에 따르면 pretty weak CPU은 60MB/s 이상에서 gzip을 압축 해제 할 수 있습니다.

1

이것은 데이터, 처리 방법 및 컴퓨터 사양에 따라 다릅니다. 정확한 시나리오를 프로파일 링하지 않으면 거의 불가능 해 보이는 몇 가지 고려 사항 :

  • 얼마나 좋은 압축입니까? 서로 다른 압축 알고리즘은 서로 다른 양의 CPU를 사용합니다.
  • 데이터는 어떻게 사용됩니까? 처리하기 전에 버퍼링해야하는 데이터의 양은 압축 풀기와 처리 사이에 멀티 스레드 할 수있는 양에 영향을 미치므로 응답에 막대한 영향을줍니다.
  • 귀하의 환경은 무엇입니까? 처리 할 1TB의 데이터를 가진 16 코어 서버는 1GB의 데이터를 가진 화려한 전화기와는 매우 다르지만, 귀하가 다루고있는 질문에서 명확하지 않습니다 (HDD는 적어도 전화가 아닌 컴퓨터를 제안하지만 서버 데스크톱은 여전히 ​​관련이 있습니다).
  • 일단 데이터가로드되면 얼마나 많은 랜덤 액세스를하고 있습니까? 로드 후 HDD에 임의 액세스 할 수는 없지만 전체 압축 데이터를로드하고 한 번에 한 부분의 데이터 만 압축하면 데이터에 대한 액세스 패턴이 중요합니다. 압축 해제했을 수 있습니다 모든 것을 두 번 (또는 그 이상) 처리해야합니다.

궁극적으로이 질문은 대단히 주관적이며 성능 차이가 중요하다고 생각되면 몇 가지 기본 테스트 시나리오와 프로필을 많이 만드는 것이 좋습니다.

보다 구체적인 예를 들면, 오디오 또는 시각적 처리가 강력하다면 프로세스는 CPU를 많이 사용하지만 일반적으로 데이터 스트림을 받아들입니다. 이 시나리오에서는 병목 현상이 CPU가되므로 압축하면 속도가 느려질 수 있습니다.

파일에서 10 억 줄의 텍스트를 읽고 각 모음의 총 수를 계산할 경우 디스크 IO가 병목 현상이 될 수 있으므로 디스크 IO를 줄이고 파일을 압축 해제하면 CPU가 더 힘들어집니다.

4

먼저 데이터는 압축 가능해야합니다. 압축이 없다면 분명히 HDD로 압축하고 다시 압축을 풀면 속도가 느려집니다. HDD에있는 많은 파일은 이미 압축되어 있으므로 압축 할 수 없습니다. 이미지 파일, 비디오 파일, 오디오 파일 및 zip 또는 .tar.gz 파일과 같은 무손실 압축 아카이브가 있습니다.

압축 가능한 경우 zlib 압축 해제가 HDD 읽기보다 빠르며 lz4 압축 해제가 더 빠를 가능성이 큽니다.

"이것은 상황에 따라 적절하게 측정해야합니다."라는 질문에만 올바르게 대답 할 수있는 고전적인 질문입니다.