Skip to content

E2E 테스트 결과 — 하드웨어 검증 세션

Xylolabs API — 엔드투엔드 하드웨어 테스트 결과 테스트 일자: 2026-03-27

XAP and XMBP are patent-pending technologies of Xylolabs Inc.


테스트 환경

항목 내용
호스트 머신 Mac mini (Apple Silicon), macOS
서버 xylolabs-server (Rust/axum), release 빌드, 0.0.0.0:3000
데이터베이스 PostgreSQL 17 (Docker, tmpfs)
오브젝트 스토리지 MinIO (Docker, tmpfs)
네트워크 WiFi Wireless_2.4G (WPA2), 동일 라우터 브리지
펌웨어 MicroPython v1.27.0 (전 디바이스 공통)

테스트 대상 디바이스

# 디바이스 MCU 아키텍처 클럭 RAM WiFi MAC
1 Raspberry Pi Pico 2 W RP2350 A2 Cortex-M33 150 MHz 446 KB CYW43439 2c:cf:67:bc:ca:b2
2 M5StampS3A ESP32-S3 v0.2 Xtensa LX7 160 MHz 222 KB Native 30:ed:a0:c9:4b:ec
3 Seeed XIAO ESP32S3 ESP32-S3 v0.2 Xtensa LX7 160 MHz 222 KB Native 1c:db:d4:75:92:70

WiFi 연결 테스트

네트워크 스캔

세 디바이스 모두 테스트 시작 시 액티브 스캔을 수행하였으며, 수신 범위 내에서 7~13개의 네트워크가 탐지되었다.

SSID 호환성

SSID Pico 2 W M5StampS3A Seeed XIAO
"Legacy" BADAUTH (-3) Silent fail Silent fail
Wireless_2.4G 연결 성공 연결 성공 연결 성공

"Legacy" SSID는 WPA2/WPA3 전환 모드로 운영되며, CYW43439 드라이버 및 ESP32-S3 MicroPython 네트워크 스택과 호환되지 않는다. 두 경우 모두 에러 또는 묵시적 실패가 발생하였다. 순수 WPA2 방식의 Wireless_2.4G SSID는 세 디바이스 모두에서 연결에 성공하였다.

연결 결과

디바이스 연결 시간 RSSI IP 주소
Pico 2 W 9 s -20 dBm 172.30.86.26
M5StampS3A 3 s -34 dBm 172.30.86.25
Seeed XIAO ESP32S3 6 s -65 dBm 172.30.86.27

WiFi E2E 파이프라인

각 디바이스는 다음 순서로 전체 파이프라인을 실행하였다.

  1. WiFi 연결
  2. GET /api/health → HTTP 200
  3. POST /api/auth/login → JWT 토큰 발급
  4. POST /api/auth/api-keys → API 키 생성
  5. POST /api/sessions → HTTP 201
  6. XMBP 배치 10회 전송
  7. POST /api/sessions/{id}/close → HTTP 200
디바이스 배치 전송 세션 종료
Pico 2 W 10/10 OK 200 OK
M5StampS3A 10/10 OK ETIMEDOUT (데이터 플러시 정상)
Seeed XIAO ESP32S3 10/10 OK 200 OK

M5StampS3A의 세션 종료 타임아웃은 마지막 요청에서 발생한 클라이언트 측 TCP 타임아웃이다. 서버 측 로그에서 소켓 리셋 이전에 세션이 정상적으로 플러시 및 종료되었음을 확인하였다.


프로파일링 결과

메모리

항목 Pico 2 W M5StampS3A Seeed XIAO ESP32S3
전체 RAM 446 KB 222 KB 222 KB
유휴 시 여유 431 KB (97%) 209 KB (94%) 209 KB (94%)
MicroPython 오버헤드 15 KB 13 KB 13 KB
최대 단일 할당 256 KB 128 KB 128 KB
테스트 후 여유 430 KB 163 KB 163 KB
메모리 누수 없음 없음 없음

Pico 2 W는 ESP32-S3 디바이스 대비 약 두 배의 가용 힙을 보유한다. ESP32-S3의 테스트 후 여유 메모리(163 KB, 유휴 시 209 KB)는 세션 중 누적된 MicroPython 런타임 상태를 반영하는 것으로 누수가 아니며, 런타임 발자국은 첫 몇 번의 전송 사이클 이후 안정화된다.

CPU 벤치마크 (MicroPython)

연산 Pico 2 W M5StampS3A Seeed XIAO ESP32S3
정수 10K ops (us) 42,376 62,030 62,067
정수 ops/s 235,983 161,212 161,116
부동소수점 10K ops (us) 125,983 140,916 140,904
부동소수점 ops/s 79,376 70,964 70,970
Struct pack 1K (us) 35,010 25,548 25,553
Struct pack/s 28,563 39,142 39,134

Pico 2 W (Cortex-M33)는 정수 및 부동소수점 처리량에서 우위를 보인다. ESP32-S3 (Xtensa LX7)는 XMBP 배치 인코딩에 유리한 struct.pack 처리량에서 앞선다.

네트워크 지연시간 (HTTP GET /api/health, 5회 측정)

항목 Pico 2 W M5StampS3A Seeed XIAO ESP32S3
평균 (us) 15,226 38,091 51,693
최소 (us) 8,903 33,383 45,153
최대 (us) 22,146 44,074 60,957

Pico 2 W는 강한 RSSI(-20 dBm)에 힘입어 가장 낮은 지연시간을 기록하였다. Seeed XIAO의 안테나 배치(-65 dBm)로 인해 M5StampS3A 대비 평균 약 13 ms의 오버헤드가 추가되었다.

XMBP 처리량 (20 배치, 4 스트림 × 10 샘플/배치)

항목 Pico 2 W M5StampS3A Seeed XIAO ESP32S3
인코딩 평균 (us) 3,315 3,160 3,242
인코딩 최대 (us) 3,410 3,498 3,396
전송 평균 (us) 14,577 38,114 42,311
전송 최소 (us) 8,307 30,563 32,251
전송 최대 (us) 28,560 56,503 56,873
총 평균 (us) 17,893 41,275 45,554
배치당 바이트 514 514 514
배치/s 55.9 24.2 22.0
샘플/s 2,236 969 878

인코딩 시간은 세 디바이스 모두 유사하다(3.2~3.3 ms). 지배적 비용은 네트워크 전송 시간이며, 이는 RSSI 및 TCP 왕복 지연시간과 직접 상관관계를 보인다.


복원력 테스트

9개 테스트 케이스를 3개 디바이스 전체에서 실행하였다.

TC 설명 Pico 2 W M5StampS3A Seeed XIAO
TC1 50 배치 연속 전송 PASS (42.1/s) PASS (17.6/s) PASS (18.9/s)
TC2 대형 배치 4.8 KB PASS (245 ms) PASS (462 ms) PASS (542 ms)
TC3 다수 스트림 동시 처리 PASS PASS PASS
TC4 WiFi 연결 끊김/재연결 PASS (3 s) PASS (2 s) PASS (2 s)
TC5 3개 동시 세션 PASS (30/30) PASS (30/30) PASS (30/30)
TC6 손상된 XMBP PASS (400/400/400/200) PASS PASS
TC7 인증 엣지 케이스 PASS (401/401/201) PASS PASS
TC8 시퀀스 갭 6/7 6/7 6/7
TC9 30 s 지속 10 Hz PASS (300/300) PASS (300/300) PASS (300/300)
점수 8/9 8/9 8/9

TC8(시퀀스 갭): 하나의 갭 변형이 서버에서 예상대로 처리되지 않았으며, 이는 디바이스 동작과 무관한 서버 측 기지 이슈이다. 세 디바이스 모두 동일한 결과를 보였다.


번인 결과

번인 테스트는 호스트 측 SDK 시뮬레이션(Rust)으로 실행하였다. 모든 시나리오에서 실패 배치 및 재연결이 0건으로 완료되었다.

시나리오 요약

시나리오 시간 오디오 센서 디바이스 수 오디오 배치 메타 배치 실패 재연결 헤드룸
Standard 60 s 4ch @ 16kHz 4 @ 100 Hz 1 118 59 0 0 99.5%
Stress 120 s 4ch @ 96kHz 26 @ 100 Hz 1 239 119 0 0 99.1%
Endurance 120 s 2ch @ 16kHz 4 @ 10 Hz 1 237 119 0 0 99.6%
Multi-device 60 s 4ch @ 16kHz 4 @ 100 Hz 10 118 each 59 each 0 0 99.6–99.7%

시나리오별 인코딩 및 틱 성능

시나리오 인코딩 평균 (us) 틱 평균 (us) 틱 최대 (us)
Standard 10 41 19,845
Stress 6 9 213,690
Endurance 5 36 15,398
Multi-device 7–8 (디바이스별) 22–35 (디바이스별)

Stress 시나리오의 틱 최대값(213,690 us)은 96kHz / 26센서 부하 하에서 발생한 OS 스케줄링 선점 현상을 반영하며, SDK 링 버퍼의 데드라인 미스를 의미하지 않는다.


서버 측 검증

테스트 실행 후 서버 로그 및 데이터베이스 상태를 대조하여 모든 세션을 검증하였다.

항목 결과
등록된 디바이스 전 세션 합산 10개 이상
메타데이터 스트림 13개 이상의 세션에 걸쳐 74개 이상
S3 스토리지 Zstd 압축 청크 플러시 확인, 청크당 125–752 바이트
세션 라이프사이클 create → stream → flush → close 서버 로그 확인
서버 에러 0건

RISC-V (Hazard3) 보조 테스트

Pico 2 W (RP2350)는 Hazard3 RISC-V 프로세서를 구현한 두 번째 코어를 탑재한다. Pico SDK C 벤치마크를 rp2350-riscv 타겟으로 컴파일하여 picotool로 플래시하였다.

항목 결과
타겟 rp2350-riscv
플래시 방법 picotool, family rp2350-riscv
USB CDC 시리얼 수신 불가
원인 TinyUSB / Hazard3 초기화 기지 제한
코어 사양 RV32IMAC, FPU 없음, 150 MHz
적합 용도 센서 전용 워크로드, ADPCM 인코딩

USB CDC 출력은 어떤 시도에서도 수신되지 않았다. 이는 Hazard3 코어의 TinyUSB 스택 기지 제한이며, 바이너리 플래시 및 디바이스 열거는 정상적으로 완료되었으나 시리얼 출력이 생성되지 않았다. 이 결과는 Cortex-M33 주 코어 테스트 결과에 영향을 미치지 않는다.


기지 이슈

# 이슈 영향 범위 심각도
1 WPA2/WPA3 전환 SSID가 CYW43 및 ESP32 MicroPython과 호환되지 않음 전 디바이스 중간 — 순수 WPA2 SSID 사용 권장
2 Hazard3에서 USB CDC 차단 (TinyUSB 초기화 이슈) Pico 2 W RISC-V 코어 한정 낮음 — 주 코어에 영향 없음
3 안테나 배치에 따른 ESP32-S3 처리량 10–20% 저하 (-34 vs -65 dBm) Seeed XIAO ESP32S3 낮음 — 물리적 배치 의존적
4 임베디드 Rust 펌웨어 예제의 의존성 버전 충돌 (embassy-rp, esp-hal) 펌웨어 예제 낮음 — 개발 편의성에만 영향

관련 문서