최대 처리량과 지연 시간을 원하는 두 개의 장치가 있습니다 ( 예 : MIDI 드럼 및 MIDI 키보드).
허브를 통해 동일한 USB 포트에 모두 연결하면 최대 데이터 전송 속도가 각각의 1/2로 효과적으로 제한됩니까?
예라고 가정하고 있지만 USB 허브에 핸드 셰이 킹 및 우선 순위 프로토콜을 사용할 수 있는지 여부는 알 수 없었습니다 (예 : 더 긴 데이터 버퍼를 가진 장치가 먼저 통신하도록).
최대 처리량과 지연 시간을 원하는 두 개의 장치가 있습니다 ( 예 : MIDI 드럼 및 MIDI 키보드).
허브를 통해 동일한 USB 포트에 모두 연결하면 최대 데이터 전송 속도가 각각의 1/2로 효과적으로 제한됩니까?
예라고 가정하고 있지만 USB 허브에 핸드 셰이 킹 및 우선 순위 프로토콜을 사용할 수 있는지 여부는 알 수 없었습니다 (예 : 더 긴 데이터 버퍼를 가진 장치가 먼저 통신하도록).
답변:
예. USB 허브를 통해 연결된 모든 장치는 해당 허브에 사용 가능한 대역폭을 공유합니다. 구체적으로 각각 50 %는 아닙니다. 컴퓨터에서 USB 2.0 허브 당 480Mbit / s를 사용할 수 있습니다 . 그게 무슨 소리 야? 컴퓨터에는 USB 허브가 내장되어 있습니다. 예, 모든 포트가 개별 엔티티는 아닙니다. 대부분의 경우 두 개의 USB 포트가 서로 겹쳐져있는 경우 내부적으로 허브에 있습니다.
이는 랩톱에서 두 개의 포트를 나란히 적용 할 수도 있습니다. 따라서 두 개의 허브를 나란히있는 USB 포트에 꽂을 수 있고 USB 포트가 많아서 높은 데이터 전송 속도 장치를 꽂을 수 있다고 생각하지 마십시오.
실제로해야 할 일은 연결하려는 장치의 예상 데이터 전송 속도를 확인하는 것입니다. MIDI 드럼은 낮은 전송 속도로 간주되고 키보드는 낮은 전송 속도 또는 중간 전송 속도로 간주됩니다. 이것은 USB 사운드 카드와 비교할 수 있습니다. 허브와 다른 것을 공유하고 싶지 않습니다.
전원이 공급되는 허브를 사용하면 각 장치에 필요한 전원이 공급되고 전원이 공급되지 않는 허브가 있으면 모든 장치가 호스트 USB 포트가 출력 할 수있는 전원을 공유합니다. 따라서 고려해야 할 사항이 있습니다.
대부분의 경우 이미 알고 있지만 대기 시간 문제의 경우 ASIO4ALL 드라이버가 모든 잠재적 문제는 아니지만 대부분을 치료합니다. 저기 그냥 넣어.
사실, 나는 첫 번째 답변이 진술을 뒷받침하는 사실없이 받아 들여지고 찬성되는 것에 놀랐습니다. MIDI 드럼과 MIDI 키보드는 거의 확실히 저속 장치이므로 고속 허브에서 최대 1 % 미만의 대역폭을 소비합니다 (2 * 1 Mbit / s / 480 Mbit / s * 100 % = 0.4 % ).
실제로, 허브의 존재는 지연 허브를 야기 할 것이며, 이는 저속 허브 의 경우 수십 마이크로 초 또는 고속 허브의 경우 수백 나노초 이다. 후자의 경우, MIDI 소프트웨어가 도입 한 대기 시간을 추가하면이 대기 시간이 사라집니다.
또한 USB 프로토콜은 전송 우선 순위 ( 인터럽트 전송 참조)를 지원하므로 전송 속도 나 대기 시간에 큰 영향을주지 않고 MIDI 장치가 동일한 버스의 하드 드라이브 나 스캐너와 공존 할 수 있습니다. 그러나 특히 MIDI 장치에 익숙하지 않기 때문에 아무런 언급도하지 않습니다.
짧은 대답은 당신이 정말 가능성이 12 메가 비트 / 초이다 2 개 이상의 USB 장치의 응용 프로그램에 대한 다중 TT 허브를합니다. 이러한 허브를 찾으려면 Amazon, Newegg 또는 기타 사이트에서 "Multi-TT"를 검색하십시오.
불행히도이 중요한 기술적 인 세부 사항은 거의 언급되지 않습니다. 대부분의 허브는 더 저렴한 Single-TT 디자인을 사용합니다. 좋은 다중 TT는 패키지에 표시되지 않은이 기능을 갖는 것으로 거의 광고되지 않습니다. 안타깝게도 대부분의 사람들은 아마도 TT를 들어 본 적이 없기 때문에 마케팅 담당자는 허브가 사용하는 디자인을 알려주지 않을 것입니다.
Windows 장치 관리자를 사용하여 허브에이 기능이 있는지 확인할 수 있습니다. 고급 탭에서 "허브에 여러 TT가 있습니다"라는 단어를 찾으십시오.
Linux에서 허브 유형은 "lsusb -v | grep TT"로 확인할 수 있습니다. Apple이 Xcode 개발 도구에 게시하는 "USB Prober"유틸리티를 제외하고 Macintosh에서 확인하는 간단한 방법을 모릅니다.
TT는 Transaction Translator의 약자입니다. 자세한 내용은 복잡하고 USB 사양 11 장에 자세히 설명되어 있으며 www.usb.org에서 무료로 다운로드 할 수 있습니다. 그러나 간단히 말해서 TT는 PC에서 초당 480MBit / s의 느린 12 또는 1.5MBit / sec 속도로 변환합니다.
일반적으로 이러한 악기를 연주 할 때 컨트롤러는 MIDI 메시지를 생성 한 다음 메모리 버퍼에 압축하여 PC가 데이터를 요청하는 순간을 기다립니다. PC가 직접 연결되면 IN 토큰이라는 메시지가 계측기에 전송됩니다. 계측기는 DATA 패킷 또는 NAK 토큰 중 두 가지 방식으로 IN 토큰에 응답하여 데이터가 없음을 나타냅니다. PC는 이러한 IN 토큰을 매우 빠르게 전송하므로 결과적으로 음악 이벤트가 MIDI 메시지로 거의 즉시 전달됩니다.
그러나 12MBit / sec MIDI 장치가 USB 2.0 허브를 통해 연결되면 480MBit / sec로 매우 다른 통신이 발생합니다. PC는 실제로 허브의 Transaction Translator와 통신합니다. 2 개의 메시지를 보냅니다. 먼저 SSPLIT (분할 트랜잭션 시작) 메시지가 TT로 전송됩니다. TT가 사용 중이 아닌 경우승인을 보냅니다. 그런 다음 TT는 12MBit / s의 느린 속도로 IN 토큰을 MIDI 키보드로 전송합니다. 한편, PC는 480Mbit / sec로 다른 장치와 통신 할 수 있습니다. IN 토큰이 PC 또는 허브의 TT에서 직접 온 것인지 MIDI 키보드에서 알 수 없습니다. PC에 연결된 것과 정확히 동일합니다. 허브 내부의 TT는 NAK 또는 DATA 응답을받습니다. 이 작업이 진행되는 동안 PC는 CSPLIT (Complete Split Transaction) 메시지를 허브의 TT로 보내기 시작합니다. TT가 특수 NYET 토큰으로 응답하면 TT가 여전히 12Mbit / sec 또는 키보드에서 NAK 또는 DATA로 통신 중입니다.
MIDI 키보드와 MIDI 드럼이 모두 연결된 경우 PC에서 SSPLIT 메시지를 보내 TT가 드럼과 통신하도록 요청하지만 TT가 이미 키보드와 통신 중이면 어떻게됩니까? 단일 TT 만 있으면 허브는 12MBit / sec로 IN + DATA를 수행하는 중이므로 새로운 SSPLIT 요청에 NYET을 회신 할 수 있습니다. 당신은 확실히 그 시나리오를 원하지 않습니다!
여러 TT 허브에는 모든 다운 스트림 포트 (장치를 연결)에 전용 TT가 있습니다. 여러 TT를 사용하면 허브는 다른 TT가 다른 다운 스트림 장치와 통신 중일 때도 항상 SSPLIT 요청을 수락 할 수 있습니다. 허브에는 여러 가지 속도 사이에서 한 번에 하나 이상의 메시지를 변환하는 기능이 제한되어 있기 때문에 단일 TT 만 있으면 480MBit / sec의 대역폭이 충분하더라도 PC가 대기 상태가 될 수 있습니다.
이 설명에서는 TT가 처리하는 많은 중요한 USB 타이밍 문제에 대해 설명했지만 중요한 점은 USB 2.0 허브가 서로 다른 두 가지 디자인을 사용할 수 있다는 것입니다. 더 저렴한 Single-TT 허브를 피하고 싶을 것입니다.
이 답변의 다른 곳에서는 USB 3.0 및 3.1 속도가 언급되었습니다. 그러나 허브의 TT는 5 또는 10 기가비트 속도와 480, 12 또는 1.5 속도 사이에서 절대 변환되지 않습니다. 대신, USB 3.0 및 3.1 허브는 한 쌍의 허브로 작동합니다. 기가비트 신호에는 최신 USB 커넥터에 5 또는 10Gbit / sec 속도로만 실행되는 허브에 연결되는 전용 핀이 있습니다. 원래 핀에서 동시 480Mbit / sec 통신이 발생하므로 12 및 1.5MBit / sec 장치는 TT에 의해 480Mbit / sec로 변환되지만 5 또는 10Gbit / sec로 변환되지는 않습니다.
기술적으로 USB 전문 용어에서는 1.5Mbit / sec를 의미하지만 일반적인 대화에서는 1.5 또는 12Mbit / sec를 의미 할 수있는 "저속"도 언급됩니다. USB 용어에서는 12Mbit / sec를 "최대 속도"라고합니다. 기술적으로 "오디오 클래스 사양"의 일부인 USB MIDI 프로토콜은 "대량"프로토콜을 사용합니다 ( 다른 답변에서 주장하는 인터럽트 프로토콜이 아님 ). USB 사양에서는 1.5Mbit / sec 속도의 벌크 전송 프로토콜이 허용되지 않습니다. 따라서 USB MIDI 장치가 USB 속도를 크게 위반하지 않는 한 항상 최소 12Mbit / sec 속도입니다. USB MIDI는 480Mbit / sec 속도 일 수 있으며,이 경우 TT는 적용되지 않습니다. 그러나 오늘날 대부분의 USB MIDI 제품은 여전히 12Mbit / sec 속도입니다.
당신이 그래서 정말 있는지 확인하려면 성능을 극대화 할 계획 경우 USB 허브, 멀티 TT 유형입니다.
실제로 허브를 사용하여 하나의 USB 포트를 공유하여 연결하는 장치 수를 확장하는 것은 동시에 연결된 모든 장치를 사용하더라도 너무 중요하지 않을 것입니다. 대부분의 장치는 한 번에 많은 양의 데이터 전송을 사용하지 않습니다. 각각 2.0보다 10 배와 20 배 빠른 USB 3.0 또는 3.1 포트를 사용하고 있지만 동시에 데이터를주고받을 수 있고 더 많은 전력을 공급할 수 있으며 2.0과 함께 작동 할 경우 걱정할 필요가 없습니다. 장치.
언급 한 바와 같이 포트에 연결된 모든 장치를 통해 충분한 전원이 공급되는 한 아무런 문제가 발생하지 않습니다.
하나 이상의 장치가 연결되어 있으면 USB 3.0 허브의 속도가 느려지는 예를 들어 보겠습니다.
480GB SSD의 SataIII-USB3.1 Gen2 Type C 인클로저 두 세트가 있습니다.
SSD를 SataIII 포트에 넣으면 Linux dd 명령이 500MiB / s 이상을 읽습니다.
SSD를 SataIII-USB 3.1 Gen2 Type C 인클로저에 넣으면 Linux dd 명령은 내가 사용하는 두 세트 중 하나에 상관없이 413MiB / s 근처에서 읽습니다.
이상한 점은 USB 3.0 두 인클로저 모두에 꽂고 Linux에서 LVM 스트라이프, RAID0 또는 두 개의 동시 dd 명령에 관계없이 두 가지 모두를 읽도록 요청할 때 2x150 = 300 MiB / s에서만 읽습니다.
따라서 둘 다 연결되면 413-300 = 113MiB / s 속도 근처에서 느슨해집니다.
다른 말로:
문제가 두 드라이브 모두에 데이터 대역을 번갈아 가도록 USB 3 Hub 프로토콜에 있다고 생각하기 시작하면 엄청난 오버 헤드가 추가됩니다.
따라서 두 대 이상의 USB가 동시에 연결된 경우 내 손에있는 USB 3 허브를 사용하여 하나의 SSD가 최대 대역폭보다 훨씬 느려집니다.
또한 하나의 SSD와 매우 느린 (50MiB / s 미만) USB 3.0 스틱으로 테스트 한 결과, USB Hub 3 결합 읽기 속도가 263MiB / s로 낮아 지므로 결합 된 읽기 풀림이 100MiB / s 인 경우 확인할 수 있습니다 다른 USB 저장 장치를 연결합니다.
그리고 더, 그리고 최악의 경우, 나는 마우스 (또는 키보드)를 연결하고 SSD 읽기 속도도 313MiB / s에 가깝습니다. 마우스 / 키보드를 분리하면 SSD 읽기 속도가 413MiB / s로 돌아가므로 100MiB / 마우스가 연결되어 사용 중이기 때문에 읽기 속도가 손실됩니다. 마우스를 움직이지 않으면 읽기 속도가 413MiB / s로 돌아갑니다.
따라서 허브는 연결된 다른 종류의 장치에 관계없이 하나의 장치 만 연결되어 있고 사용 중일 때 결합 전송 속도에서 (100MiB / s 부근) 대규모 읽기 속도 저하를 발생시킵니다. 그것은 동시에 하나 이상의 작업을 가지고 있으며, smae 시간에 단 하나의 장치 만 사용할 때보 다 100MiB / s에 가까운 결합 된 읽기 속도를 얻습니다.
나는 또한 SSD + 마우스 + 키보드의 세 가지 장치로 테스트했습니다. 나는 여전히 같은 속도, 약 100MiB / s에 가깝습니다.
하나의 SSD에서만 읽을 수 있지만 둘 다 연결된 경우 413MiB / s에 가깝습니다.
USB 3.0 허브 가격은 저렴한 가격이 아니라 20 유로였습니다.
결론 : USB HUB 3.0은 동시에 둘 이상의 장치가 연결 (및 전송) 될 때 많은 MiB / s 전송 속도를 느슨하게합니다. 시간 전송을 장치 수 (quite wearg)로 나누거나 사이클링 장치 등에 엄청난 오버 헤드가 있기 때문일 수 있습니다.
이것이 문제를 식별하는 누군가에게 도움이되기를 바랍니다. 모든 테스트는 Linux Live SystemRescueCD (마지막 버전)에서 dd 명령을 status = progress, 블록 크기는 1 메가 바이트, 1,000 (총 1GiB 읽기), 대상 장치 / dev / null.
나는 또 다른 USB 3.x 허브를 구입할 계획이다 (부자가 될 때). 이번에는 3.1 Gen 2가 동일한 지 또는 펌웨어 알고리즘이 나쁜 브랜드인지 확인하기 위해.
750GB 5400rpm 하드 드라이브가있는 랩톱 컴퓨터와 8GB 외장 하드 드라이브간에 직접 연결을 사용하면 실제로 USB 허브를 사용할 때보 다 전송 속도가 훨씬 느립니다. 예를 들어, 최근에 최대 120GB의 데이터를 추가하는 4 개의 동영상을 복사하여 붙여 넣었습니다. 여기에 일어난 일이 있습니다.
먼저 랩톱 하드 드라이브에 최대 120GB의 데이터를 추가하는 4 개의 동영상을 복사 한 다음 8GB 외장 하드 드라이브 1 개에 붙여 넣었습니다. 데이터 전송 속도는 약 30MB에 불과하므로 전송하는 데 약 80 분이 걸렸습니다. 데이터 전송 속도는 20MB에서 35MB 범위의 급상승을 나타 냈습니다.
그런 다음 정확히 같은 모델 인 다른 8GB 외장 하드 드라이브를 연결했습니다. 이번에는 4 포트 USB 3.0 허브를 사용했습니다. 이번에는 데이터 전송 속도가 90MB 이상으로 훨씬 빨라졌습니다. 데이터 전송 속도는 50MB에서 90MB를 초과하는 스파이크를 나타 냈습니다. 데이터를 전송하는 데 30 분 밖에 걸리지 않았습니다.
셋째, 실험으로 USB 3.0 허브를 통해 두 개의 8GB 외장 하드 드라이브를 동시에 연결했습니다. 한 하드 드라이브에서 다른 하드 드라이브로 120GB의 데이터가 포함 된 4 개의 동영상을 모두 복사했습니다. 이번에는 이전보다 훨씬 빨랐습니다. 데이터 전송 속도는 약 150MB였으며 전송 속도에는 스파이크가 전혀 없었습니다. 전체 시간 동안 150mbs의 안정적인 회선이었습니다.
다른 대용량 데이터 전송으로 실험했습니다. 어떤 이유로 외부 하드 드라이브에 대한 직접 USB 3.0 연결은 USB 3.0 허브가 관련된 경우보다 훨씬 느립니다. ...이 이유를 아는 사람이 있습니까?