많은 파일 압축 작업을 수행하는 서버가 있습니다. 이는 또한 모든 파일을 압축하여 원격으로 업로드하거나 클라이언트에 원격으로 스트리밍하기 전에 먼저 원격으로 다운로드해야 함을 의미합니다.
기존 서버를 업그레이드하거나 새 서버를 구입할 수 있는 옵션이 있습니다.
이전 서버 사양은 대략 3.1 GHz
대역폭 평균 입니다 100 Mbps
. 새로운 서버 사양은 약 2.4 GHz
이며 대역폭은 1000 Mbps up to 2000 Mbps
. 메모리 사용량은 새 반복에서 동일하게 유지되거나 감소되어야 합니다.
이 시점에서 RAM 및 디스크 사용량을 파악했습니다. 그것은 문제가 되지 않습니다. 문제는 CPU 속도와 대역폭이 스트리밍 다운로드에 어떤 영향을 미치는지에 달려 있습니다.
이것이 내 선택입니다.
내 사용 사례에는 어떤 옵션이 더 좋나요?
답변1
현재 서버에서 "압축 작업"을 수행할 때 CPU 및 대역폭 사용량을 추적해야 합니다.
CPU를 100% 사용하는 경우 더 빠른 CPU를 선택하세요. 100% 대역폭을 사용하는 경우 더 높은 대역폭을 선택하세요.
또한, 최신 CPU는 공칭 GHz 값에 관계없이 이전 CPU보다 훨씬 더 빠를 수 있습니다. CPU 코어 수도 관련이 있습니다("압축 작업"이 다중 스레드 및/또는 병렬로 실행된다고 가정).
답변2
"최적의" 솔루션을 찾으려면 얼마나 많은 데이터가 데이터 버스를 통과할 수 있는지 알아내야 합니다. 최적의 방법은 데이터가 일부 넷카드에 도착하여 CPU에서 읽혀지고 메모리에 직접 압축되는 것입니다. 넷카드에서.
당신이 가지고 있다고 가정하자
- 2(보내고 받는 데 혼동되지 않도록) PCI Express 4의 각 8레인이 포함된 10GB 이더넷 카드(각각 15GB/s)(이를 지원하는 MB를 얻을 수 있다고 가정).
- 실제로 이를 지원할 수 있는 일부 CPU+MB, RyZen 5950X+x570에 투자합니다.
그런 다음 메모리 처리량이 있습니다.
- 그만큼~ 위에시스템은 약 54GB/s 읽기/쓰기 또는 48GB/s 복사 속도를 제공합니다.
- 이더넷 드라이브는 수신된 데이터를 RAM에 복사할 수 있습니다(캐시를 통하든 안 하든)
- 아마도 당신은 아직 그 혜택을 누리지 못했을 것입니다.제로 카피 전송하지만가능성이 더 높음전송하면 3~6개의 사본이 생성됩니다.
- 수신과 동일할 가능성이 높지만 CPU는 압축하기 위해 적어도 한 번 읽어야 합니다. 운이 좋으면 캐시에서 직접, 메모리에서가 아니라면 캐시에 압축할 때도 동일하면 NIC가 직접 복사할 수 있습니다. 내부 송신 버퍼로.
따라서 최상의 NIC, 사용자 수준 드라이버를 사용하는 경우 항상 캐시에 적중됩니다.
- RAM에 다시 쓰지 않고 NIC에서 캐시로 복사
- 캐시에서 캐시로 zip
- 캐시에서 NIC로 복사
- 32개의 스레드가 이를 공급할 수 있다고 가정하면 10GB/s의 처리량을 얻을 수 있습니다.
이 행운의 시나리오에 액세스할 수 없다면 다음과 같이 메모리 대역폭이 제한될 가능성이 높습니다.
- 데이터를 애플리케이션으로 이동하기 위해 3개의 복사본을 가정함
- zip에 로드하고 결과를 저장할 사본 2개
- 보낼 사본 3개
- 어둠 속에서 모든 것을 묶기 위한 많은 캐시 쓰기 저장
7번의 읽기와 7번의 쓰기를 가정하면 최대 제한은 약 54GB/s / 14 = 3.85GB/s가 되어야 합니다. 읽기/쓰기 횟수가 줄어들면 NIC 최대 속도에 빠르게 도달합니다.
따라서 예산이나 요구 사항이 충족될 때까지 여기에서 사양을 줄일 수 있습니다.
메모리 내 다중 스레드 압축에 대한 데이터를 찾을 수 없습니다.