WSL2는 단순한 VM이 아닌가요?

1 week ago 3

  • Windows NT의 서브시스템 구조는 다른 운영체제용 프로그램을 실행하기 위한 API 호출 변환 계층으로 구성되어 왔음
  • WSL1은 이러한 전통을 잇는 형태로, 리눅스 호출을 윈도우 커널 호출로 변환하는 가벼운 번역 계층으로 동작
  • WSL2는 성능 문제를 해결하기 위해 Hyper-V 기반의 완전한 리눅스 VM으로 전환되었으며, 실제 리눅스 커널을 실행
  • WSL2는 동적 메모리 관리, Windows 드라이브 마운트, WSLg를 통한 GUI 통합 등으로 일반 VM보다 높은 통합성을 제공
  • 파일 관리의 불편함과 디스크 이미지 의존성 등 한계가 있지만, WSL1과 WSL2의 장단점을 선택적으로 활용할 수 있는 유연성이 중요

Windows NT의 서브시스템 개념

  • Windows NT의 서브시스템(subsystem) 은 다른 운영체제용 프로그램을 실행하기 위한 API 세트와 호출 변환 계층을 의미
    • 과거 NT에는 OS/2 서브시스템(OS2SS.EXE) , POSIX 서브시스템(PSXSS.EXE) 등이 존재
    • CSRSS.EXE는 Win32 API 변환 계층으로, 일부 기능은 커널 모드(WIN32K.SYS)로 이동
  • POSIX 서브시스템은 정부 인증을 위한 최소 구현 수준이었으며, 이후 Interix 기반 Windows Services for Unix로 대체됨

WSL1: 번역 기반 리눅스 계층

  • WSL1(Windows Subsystem for Linux) 은 리눅스 시스템 호출을 윈도우 호출로 변환하는 얇은 번역 계층
    • 실행 시 bash 프로세스만 몇 MB 메모리를 사용하며, Task Manager에서 일반 프로세스로 표시
    • 루트 파일시스템은 NTFS 상의 개별 파일 구조로 존재해 저장 공간 오버헤드가 거의 없음
  • 제한사항
    • I/O 성능 저하: 리눅스와 Win32 파일시스템 API 차이로 인한 변환 비용
    • GUI 실행 시 외부 X 서버 필요 (예: X410)
    • Raw 소켓 미지원으로 traceroute, nmap, tcpdump 등 실행 불가

WSL2: Hyper-V 기반 리눅스 VM

  • 사용자 요구에 따라 Microsoft는 Hyper-V 위에서 동작하는 완전한 리눅스 VM을 도입
    • 루트 파일시스템은 단일 VHDX 파일로 관리
    • 명령어 wsl --set-version "Ubuntu" 2 로 WSL1↔WSL2 간 변환 가능
  • 성능 특성
    • 초기 부팅은 느리지만, 네이티브 리눅스 커널을 실행
    • 메모리 사용은 동적이며, 최대 물리 메모리의 절반까지 확장 가능
    • stress 테스트 결과, 메모리 사용량은 부하에 따라 증가 후 자동 축소
    • 필요 시 wsl --shutdown 명령으로 VM 종료 가능

WSL2의 통합 기능과 한계

  • WSL2는 전통적 VM과 달리 Windows와의 통합성을 강화
    • Windows 드라이브 자동 마운트, 리눅스 드라이브를 \\wsl$\ 경로로 접근, WSLg를 통한 GUI 앱 실행
    • GUI 앱은 Remote Desktop 프로토콜을 통해 스트리밍되며, DPI나 텍스트 스케일링은 별도 설정 필요
  • 파일 관리 문제
    • 리눅스 작업 데이터는 ext4.vhdx 이미지 내부에 저장되어 이식성 및 복구 위험 존재
    • wsl --unregister Distro 실행 시 모든 데이터 즉시 삭제
    • Windows 드라이브(/mnt/c) 사용 시 NTFS + VM 오버헤드로 성능 저하
  • 파일시스템 프로토콜
    • WSL1은 drvfs, WSL2는 Plan9의 9p 프로토콜 사용
    • 변환 과정에서 drvfs가 남는 버그 발생 사례 언급
  • 대안
    • 별도의 VHDX 이미지 생성 후 wsl --mount --vhd로 마운트하여 작업 데이터 분리 권장
    • .wslconfig에서 자동 설정 불가, 스크립트로 처리 필요

결론

  • Windows NT의 모듈형 설계와 안정적 커널 ABI는 오래된 드라이버 호환성을 유지
  • WSL1은 가벼운 메모리 사용이 장점이며, WSL2는 실제 리눅스 커널로 더 높은 호환성과 성능 제공
  • WSL2는 VM의 단점을 최소화하고 호스트 OS와의 통합을 강화한 구조
  • 전통적 정의로는 VM에 가깝지만, 가벼운 통합형 환경으로서 “서브시스템”이라 부를 만한 가치가 있음

Read Entire Article