SFTP를 사용하여 다중 코어에서 암호화/암호 해독 프로세스를 분할하는 방법이 있습니까?

SFTP를 사용하여 다중 코어에서 암호화/암호 해독 프로세스를 분할하는 방법이 있습니까?

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

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

그게 가능합니까? 그렇다면 어떻게?

주의: 가능하다면 업스트림에 포함될 만큼 충분하지 않은 것으로 간주되는 수정이 포함된 패치 세트는 피하고 싶습니다 OpenSSH.

답변1

아니요. SFTP 프로토콜은 병렬화할 수 있는 기회를 많이 남기지 않습니다. 그만큼원래 프로토콜패킷 내에서 병렬화할 수 없는 암호 및 MAC 알고리즘이 필요합니다. OpenSSH 지원GCM, 병렬화할 수 있지만 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 계층 위에서 병렬화할 수 있습니다. 전송할 작은 파일이 많은 경우 일괄적으로 복사하고 일괄 처리를 병렬화하세요. 전송할 대용량 파일이 있는 경우 해당 파일을 청크로 복사하고 청크를 병렬화하세요.

관련 정보