(본 글의 모든 저작권은 하제소프트가 가지고 있습니다)

근래 USB(Universal Serial Bus)버스를 사용하는 모습을 주변에서 흔하게 볼 수 있지만, 여기에 해당하는 것들은 USB메모리(사실 USB이동식디스크가 맞는 표현), USB프린터, USB마우스, USB키보드 그리고 USB카메라등이 대부분일것으로 여겨진다.

USB메모리는 저장공간의 크기도 크기이지만, 억세스(Access) 속도도 중요한 요소로 여겨진다.

USB버스의 발전과정을 보면, 과거 USB 1.0이 처음 소개되었던 1996년부터 지금 USB 3.1(Super Speed Plus)까지 어언 20년가까이 흘렀다. 무엇보다 데이터전송량과 속도가 무척 빨라진 것이 사실이다. 최근 USB 3.1의 경우, 최대 전송속도가 이론상 10Gbps 라고 하니까, 2GBytes 영화파일하나를 전송하는데 2초정도면 전송이 가능하다는 이야기이다. 꿈과 같은 속도이다. USB메모리의 경우, 이와 같이 USB 3.1을 사용한다고 하더라도 현실속에서 파일복사속도는 이런 속도가 나오지 않는다. 여러가지 이유가 있다. 메모리칩의 접근속도와 프로토콜이 가지는 오버헤드(Overhead)가 문제이다. 메모리칩의 접근속도 역시 TCL, MLC, SLM등의 속성과 기술에 따라 점점 빨라지고 있기 때문에, 남아있는 속도지연 요소는 USB버스를 사용하는 프로토콜이 아닌가 생각된다.

USB메모리가 사용하는 프로토콜의 대명사는 뭐니뭐니해도 BOT 프로토콜(Bulk Only Transfer Protocol)이라고 할 수 있다.

BOT프로토콜 1.0이 나올 무렵에 한창 사용되던 USB 전송속도는 1.1 이었다. BOT 프로토콜은 USB 1.1까지에 적합한 프로토콜성능을 가지고 있다. 그런데, 이후 USB 2.0이 소개되었을 때 USB버스의 속도는 빨라졌지만, 여전히 BOT는 1.0에서 머물러있었다. 지금 USB 3.1이 소개되고 있는 현시점에서도 여전히 BOT는 1.0에 머물러 있다.

BOT 프로토콜의 단점은 크게 2가지로 설명될 수 있다.

  • 동기적(Synchronous)인 명령처리방식에 적합하다

  • 한번에 하나씩의 명령어만 처리가 가능하다

  • 벌크 파이프가 명령어전달, 데이터전달, 상태값보고등의 다용도로 혼용해서 사용된다

이와 같은 문제를 해결하기 위해서 새로운 프로토콜이 소개되었으며, 이것이 UASP(USB Attached SCSI Protocol) 이다. 다른 말로 UAS 프로토콜이다.

UAS 프로토콜은 비동기(Asynchronous)적인 명령처리와 동시에 여러 개의 명령어를 처리 할 수 있도록 고안된 새로운 스토리지(Storage)를 위한 프로토콜이라고 볼 수 있다.

하나의 명령어, 예를 들어 디스크로부터 섹터데이타를 읽어오는 명령어의 경우, 크게 3부분으로 이 과정을 나누어 소개할 수 있다.

  • 섹터읽기명령어전달과정

  • 섹터데이타읽기과정

  • 명령처리결과보고과정

이와 같은 3가지의 과정을 수행하는데 각각 별도의 파이프를 사용하면서, 동시에 여러 개의 명령어를 수행할 수 있도록 하기 위해서 이들은 내부적으로 Tag(태그)의 의미로 Stream ID라는 변수를 사용한다.

Stream ID는 Stream을 구분하는 구분자이다. Stream은 같은 명령어의 종속을 가지는 연결된 집합체를 구분하는 개념이다. 여기서는 섹터읽기명령어, 데이터읽기과정, 명령처리결과보고과정 이렇게 3가지 과정이 동일한 Stream으로 간주된다. 따라서, 복수개의 명령어를 처리하는 과정중에는 복수개의 Stream이 사용되기 때문에 이들을 구분하는 Stream ID가 사용될 수 있다.

UAS프로토콜은 현재 USB 2.0버스에서부터 사용이 가능하도록 설계되어 있다. 마이크로소프트 윈도우 8 에는 UAS프로토콜 드라이버가 내장되어 있기 때문에 사용자는 UAS를 지원하는 USB메모리를 언제든지 사용할 수 있다.

같은 USB 2.0버스아래에서 BOT프로토콜보다 UAS프로토콜의 성능이 뛰어난 것은 당연한 결과라고 보인다. 문제는 USB 3.0(USB 3.1)버스에서 UAS프로토콜의 성능문제라고 볼 수 있다.

USB 2.0보다 USB 3.0은 훨씬 빨라진 버스속도를 가지고 있다. UAS프로토콜이 내부적으로 사용하는 Stream 개념에 있어서, USB 2.0과 3.0은 큰 차이가 있다.

USB 2.0은 Stream의 개념이 없기 때문에, UAS프로토콜이 이런 Stream의 개념을 숙지하고 관리해야 한다. USB 3.0은 Stream 프로토콜이 추가로 정의되어 있다.

따라서, UAS프로토콜이 사용하려는 Stream 개념은 USB 3.0버스의 Stream 프로토콜지원과 맞물려서 동작한다면, 성능은 훨씬 좋아지게 되는것이다. 물론, USB 3.0 에서 Stream 프로토콜을 지원하고 있지만, UAS프로토콜을 사용하는 USB메모리가 이런 USB 3.0 Stream 프로토콜을 사용하지 않으면 그 결과는 USB 2.0에서 동작하는 UAS프로토콜과 그 차이가 별로 없다는 것이다.

우리는 여기서 USB 3.0에서 버스가 지원하는 Stream 프로토콜을 ‘USB3 Stream’ 이라고 명명해서 부르도록 하자. 이것은 UAS프로토콜이 사용하는 Stream기능을 버스수준에서 지원한다는 의미로 사용된다. 그냥 Stream 이라고 부르면, 순수하게 UAS프로토콜이 관리하는 스트림을 의미한다.

USB3 Stream에 대한 간단한 소개

USB3 Stream은 간단하게 말해서, 호스트컨트롤러(xHCI)가 Stream 이라는 용어에 대한 의미를 알고 있으며, 이와 관련된 일련의 프로토콜을 자신이 직접 소프트웨어의 개입없이 해결한다는 것을 의미한다.

de_img1

그림에서 Endpoint 1은 현재 Bulk In Endpoint 로 사용되고 있다. 보통 USB통신이 그러하듯이 해당하는 Endpoint가 No Use Stream 방식으로 사용되는 경우에는 하나의 Endpoint가 하나의 파이프로서 역할만 수행할 수 있게 된다. 하지만, 그림처럼 Stream ID를 사용하는 경우에는 서로 다른 Stream ID값을 사용해서 하나의 Bulk In Endpoint의 기능을 분할할 수 있게 된다.

정리하면, 하나의 벌크파이프가 복수개의 서브파이프로 나뉜다고 해석될 수 있다. 이런 특징으로 인해서 xHCI는 이와 같이 해당하는 Endpoint가 USB3 Stream 프로토콜을 사용하는 경우에 한해서, Stream ID값에 따라서 여러 개의 데이터가 서로 다른 의미로 들어올 수 있다는 것을 인지하게 된다. 이것이 복수개의 명령어를 개별적으로 처리하는데 큰 잇점으로 사용되는 것이다.

UAS 프로토콜에서 Command Pipe는 No Use Stream 형태를 사용한다. 이 말은 해당하는 파이프에는 Stream ID값을 사용하지 않는다는 뜻이다. 대신, UAS프로토콜에서는 Command Pipe에 넣어주는 데이터로서 Command IU(Information Unit)값 내부에 Stream ID값을 함께 넣어서 디바이스측으로 전달한다. 이렇게 받은 Stream ID값을 Device는 다른 Endpoint(Data In, Data Out, Status)를 운영하는데 항상 파라미터로 함께 사용하게 된다.

de_img2

결론을 맺어보자.

시중에서 흔히 볼 수 있는 USB메모리는 대개 BOT프로토콜을 사용한다. 윈도우 8이상을 사용하는 사용자라면 이제 BOT보다 훨씬 빠른 전송속도를 낼 수 있는 UAS프로토콜을 사용해보자. 물론 그럴러면 시중에서 UAS프로토콜을 사용하는 USB메모리를 구매해야 한다.

또한, 같은 UAS프로토콜을 사용하는 USB메모리라고 하더라도 최대의 성능을 내기 위해서는 USB3 Stream 기능을 사용하는 USB메모리여야 한다. 이 말은 USB3 Stream 기능을 지원하지 않는 UAS 프로토콜이 가능하기 때문이다.물론 USB3 Stream 기능을 지원하지 않는 UAS프로토콜 USB메모리는 USB 2.0 과 USB 3.0모두에서 사용이 가능하다.

USB3 Stream 기능은 분명히 USB 3.0 버스를 사용하는데 있어서, 핵심기능인 Burst 통신기능과 함께 빼놓을 수 없는 중요한 기술임에는 분명하다. 개발사는 이와 같은 USB3 Stream 기능을 사용하여 효과적으로 USB버스 대역폭을 사용할 수 있기를 희망한다.

프로토콜에 따른 속도차이

BOT Protocol < UAS Protocol < USB3 Stream UAS Protocol

자! 이제 좀더 전문가답게 USB메모리를 접근해보자.

아직까지 UAS, UASP와 관련된 자료는 대부분 일반인에게 공개되어 있지 않기 때문에 공개된 몇가지 자료를 소개한다. 참고하길 바란다.

USB Attached SCSI Protocol (UASP)

SuperSpeed USB Developers Conference