본문으로 건너뛰기

© 2026 Molayo

Phoronix헤드라인2026. 05. 25. 19:55

Intel, Linux를 위한 USB4STREAM 프로토콜 도입 - USB4의 유용한 활용 가능성 확대

요약

Intel이 Linux 커널에 USB4STREAM 프로토콜 지원을 도입합니다. 이를 통해 네트워크 스택을 거치지 않고 Thunderbolt/USB4 케이블로 연결된 호스트 간에 캐릭터 디바이스를 통해 직접 데이터를 전송할 수 있습니다.

핵심 포인트

  • USB4/Thunderbolt 케이블을 통한 호스트 간 직접 데이터 전송 지원
  • 네트워크 스택 없이 /dev/tbstreamX 장치를 통한 고속 데이터 전송 가능
  • ConfigFS 인터페이스를 통한 스트림 구성 및 양방향 트래픽 지원
  • initramfs 환경에서 네트워크 설정 없이 디스크 백업 등 활용 가능

Intel, Linux를 위한 USB4STREAM 프로토콜 도입 - USB4의 유용한 활용 가능성 확대

INTEL

Intel Thunderbolt 유지 관리자인 Mika Westerberg는 thunderbolt_stream 드라이버를 통해 USB4STREAM 지원 작업을 진행해 왔으며, 이는 다음 달 Linux 7.2 머지 윈도우(merge window)에 맞춰 모든 준비가 완료된 것으로 보입니다.

thunderbolt_stream 드라이버는 직접 연결된 USB4/Thunderbolt 케이블의 각 호스트에

/dev/tbstreamX

장치를 노출합니다. 이를 통해 일반적인 파일 시스템 작업(file-system operations)을 사용하여 데이터를 전송할 수 있습니다. 예를 들어, 한 시스템에서 다른 시스템으로

dd

또는

cat

과 같은 명령어를 사용할 수 있습니다.

Westerberg는 Linux 커널에 USB4STREAM 지원을 도입하는 패치에 대해 몇 가지 추가적인 사용 사례와 예시를 들어 상세히 설명했습니다:

"USB4STREAM 프로토콜과 Linux 구현을 도입합니다. 이를 통해 두 개(또는 그 이상)의 호스트가 네트워크 스택(network stack)을 거칠 필요 없이 Thunderbolt/USB4 케이블을 통해 캐릭터 디바이스(character device)를 사용하여 직접 데이터를 전송할 수 있습니다.

어떤 형태든 read(2) 및 write(2)를 지원하는 애플리케이션이라면 변경 없이 이 장치를 사용할 수 있어야 합니다. 데이터는 Thunderbolt/USB4 패브릭(fabric) 내부의 터널을 통해 반대편으로 전송됩니다. 캐릭터 디바이스는 /dev/tbstreamX로 호출되며, 여기서 X는 0부터 시작하는 마이너 번호(minor number)입니다.

모든 스트림 장치는 먼저 구성되어야 합니다. 이는 ConfigFS 인터페이스를 통해 수행됩니다. 동시에 여러 개의 스트림이 존재할 수 있으며(이는 DMA 링(rings)의 수와 사용 가능한 HopID에 따라 달라짐), 단일 스트림은 양방향 트래픽을 지원합니다. 예를 들어, 하나의 스트림을 제어 채널(control channel)로 사용하고 다른 스트림을 양방향 데이터 채널(bi-directional data channel)로 사용하는 애플리케이션이 있을 수 있습니다.

이것의 실제 사용 사례는 복구 initramfs 툴링의 일부로 백업을 수행하는 것입니다(initramfs의 일부로 네트워킹을 설정하거나 ssh 또는 유사한 툴을 갖출 필요가 없습니다). 예를 들어 host1의 디스크를 host2로 백업하고 싶다고 가정해 봅시다. 먼저 호스트 간에 Thunderbolt/USB4 케이블이 연결되면(중간에 장치가 있을 수도 있음), 수신 측에서 스트림을 구성합니다:"

host2 # mkdir /sys/kernel/config/thunderbolt/stream/0-1.0

host2 # mkdir /sys/kernel/config/thunderbolt/stream/0-1.0/backup

host2 # echo -1 > /sys/kernel/config/thunderbolt/stream/0-1.0/backup/in_hopid

host2 # echo -1 > /sys/kernel/config/thunderbolt/stream/0-1.0/backup/out_hopid

단순함을 위해 자동 HopID 할당(HopID에 -1을 기록)을 사용합니다. 이 시점부터 /dev/tbstream0는 일반적인 파일처럼 거의 그대로 사용할 수 있습니다:

host2 # dd if=/dev/tbstream0 of=/tmp/host1.nvme0n1.backup-$(date +%F)

그다음 백업 대상이 되는 호스트가 그에 맞춰 스트림을 구성합니다:

host1 # mkdir /sys/kernel/config/thunderbolt/stream/0-503.0

host1 # mkdir /sys/kernel/config/thunderbolt/stream/0-503.0/backup

여기서는 host2가 XDomain 속성을 통해 활성 스트림을 알린다는 점을 활용하므로, "backup"이라는 이름이 우리에게 HopID를 제공합니다. host2에서 했던 것과 동일한 방식으로 수동으로 구성하는 것도 가능합니다.

그 후에는 단순히 데이터를 복사하기만 하면 됩니다:

host1 # dd if=/dev/nvme0n1 of=/dev/tbstream0 bs=256k

마찬가지로 파일 시스템의 일부를 전송하는 것도 가능합니다. 예를 들어 mydir의 내용을 host2로 복사해 보겠습니다:

host2 # gunzip < /dev/tbstream0 | tar xf -

host1 # tar cf - mydir | gzip > /dev/tbstream0

이 활용 사례의 반대편 사례는 노트북(host1)의 카메라를 데스크톱(host2)에서 "빌려 쓰는" 것입니다:

host2 # gst-launch-1.0 filesrc location=/dev/tbstream0 ! jpegdec ! videoconvert ! autovideosink

host1 # gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1920,height=1080 ! jpegenc quality=90 ! filesink location=/dev/tbstream0

스트림이 더 이상 필요하지 않으면 제거할 수 있습니다:

host1 # cd /sys/kernel/config/thunderbolt/stream/

host1 # rmdir -p 0-503.0/backup

host2 # cd /sys/kernel/config/thunderbolt/stream

host2 # rmdir -p 0-1.0/backup

해당 패치는 Thunderbolt.git의 "next" 브랜치에 포함되어 있습니다. 이 패치들이 "next" 브랜치에 포함됨에 따라, 6월 중순 Linux 7.2 병합 윈도우(merge window) 이전에 USB/Thunderbolt Git 트리 본체에 제때 제출된다는 가정하에, 이 유용한 프로토콜은 Linux 7.2 커널에 포함될 것으로 보입니다.

또한 USB4STREAM과 그 혁신적인 기능들을 어떻게 활용할 수 있는지 상세히 설명하는 문서 패치도 함께 포함되어 있습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Phoronix의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0