SFTP를 통해 암호화/암호 해독 프로세스를 여러 코어에 분할할 수 있는 방법이 있습니까?

SFTP를 통해 암호화/암호 해독 프로세스를 여러 코어에 분할할 수 있는 방법이 있습니까?

SFTP 전송의 암호화 프로세스가 CPU 코어를 차지하는 상황이 발생했습니다. 그러나 내 IO 대역폭(디스크, 버스 및 네트워크)은 최대치에 도달하지 못했습니다.

즉, 문제의 시스템에는 다중 코어가 있습니다. 암호화/암호 해독 프로세스 중에 이를 활용하고 싶습니다.

그게 가능합니까? 그렇다면 어떻게 해야 할까요?

참고: 가능하다면 업스트림에 포함할 만큼 크지 않은 수정된 패치 세트를 피하고 싶습니다 OpenSSH.

답변1

습관. SFTP 프로토콜은 병렬화할 수 있는 기회를 많이 남기지 않습니다. 이것원래 계약패킷 내에서 병렬화할 수 없는 암호화 및 MAC 알고리즘이 필요합니다. 오픈SSH 지원가스 크로마토그래피, 병렬화할 수 있지만 OpenSSH는 패킷 내에서 병렬화를 시도하지 않습니다. 프로토콜은 연속 패킷의 병렬 처리를 허용하지만 OpenSSH는 이를 수행하지 않습니다.

OpenSSH가 병렬화되지 않는 이유는 무엇입니까? 병렬화는 올바르게 수행하기가 복잡하고 특정 시나리오에서만 성능에 도움이 되기 때문입니다.

  • 대부분의 경우 네트워크에 병목 현상이 발생하므로 CPU 시간을 최적화할 필요가 없습니다.
  • 시스템이 여러 SSH 연결을 병렬로 처리하는 등 다른 작업을 수행하는 경우 병렬 SSH 처리는 다른 프로세스의 성능을 저하시킬 수 있습니다.
  • 병렬화에는 비용이 듭니다. 작업 부하를 참여 프로세서로 전송해야 하며 모든 프로세서가 완료된 후 데이터를 조립해야 합니다. 동기화는 비용이 상당히 많이 들기 때문에 병렬화는 각 작업 항목이 충분히 큰 경우에만 유용합니다. SSH의 경우 패킷 내 병렬화가 도움이 될 가능성이 낮습니다.
  • 여러 패킷을 병렬로 처리하는 것이 가능하지만 이는 소프트웨어 설계에 큰 영향을 미칩니다. 단순한 데이터 흐름이 아닌 데이터 계층과 암호화 계층 사이에 복잡한 인터페이스가 있어야 합니다.

OpenSSH는 보안을 염두에 두고 설계되었으며 복잡성은 보안의 적이므로 병렬화를 고려하는 것조차 매우 이례적입니다. 그러나 어떤 사람들은 이렇게 합니다.HPN-SSH병렬 처리를 허용하는 OpenSSH 패치 세트입니다. 현재까지도 유지되고 있습니다.

ARMv8에는 AES, SHA-1 및 SHA-256의 하드웨어 가속이 도입되었습니다. ARMv8 보드(32비트 또는 64비트 시스템 실행 여부)가 있는 경우 암호화 라이브러리(OpenSSH용 OpenSSL)가 ARMv8 가속으로 컴파일되었는지 확인하세요. 일부 ARMv8 이전 버전에는 독점적인 암호화 가속 기능이 있습니다.Linux 커널에 의해 노출됨, 그러나 OpenSSL은 기본적으로 지원되지 않습니다(커널 및 OpenSSL 패치가 있지만 중단된 이력이 있습니다).

HPN 패치를 사용하지 않으려면 SSH 계층 위에서 병렬화할 수 있습니다. 전송할 작은 파일이 많은 경우 일괄적으로 복사하고 일괄 처리를 병렬화하세요. 전송할 대용량 파일이 있는 경우 해당 파일을 청크로 복사하고 청크를 병렬화하세요.

관련 정보