목차
- WSL 가상화: WSL1 과 WSL2의 가상화 방식 비교, Hypver Visor 타입
- 파일시스템 연동 원리: 양방향 9P Protocol
- 네트워크 설정(브리지 모드)
- WSL의 한계 및 용도
1. WSL의 가상화
WSL 1과 WSL 2의 설계가 다르다. WSL1은 윈도 기반 리눅스 인터페이스이지만, WSL 2는 순수 리눅스 커널을 사용한다.
WSL 1은 Linux Dsitribution(Ubuntu, OpenSuse 등)과 Windows Kernel과 통신할 수 있는 Linux-compatible kernel interface을 만들었다. Linux Distribution에서 바이너리의 리눅스 시스템콜을 하면 WSL는 윈도 시스템 시스템콜로 번역해서 실행한다.
핵심은 Linux Kernel을 사용하지 않고 Windows Kernel을 사용한다는 것. 그래서 파일 접근 속도가 느리고, Linux Kernel에 종속적인 프로그램은 실행을 하지 못한다.
WSL 2는 WSL 1의 문제를 해결하고자 Linux Kernel을 가상화하는 설계로 변경한다. 이 가상화는 리소스를 적게 사용하도록 가볍다. MS는 Hyper-V를 통해 최적화를 하였기 때문이다. (하지만 WSL에서 윈도 디렉토리에 접근하는 속도는 WSL1 방식이 빠르다)
위 다이어그램을 보면서 Hyper-v 가 HOST OS 위에 있는 가상화툴이 아니라는 것을 알게 되었다... 찾아보니 내가 생각했던 것은 Hypervisor Type 2였고 옛날에 사용한 방식이라고 한다. 요즘은 Hypervisor Type 1을 사용하며, CPU의 가상화 기술(Intel VT 또는 AMD-V)을 사용하여 바로 하드웨어 위에 가상화를 하는 방식이다. 이렇게 하면 메인인 Windows 운영체제와 VM은 완전히 분리될 수 있다.
2. 어떻게 Windwos 파일시스템에 접근이 가능한지? 어떻게 마운트 된 것인지?
WSL2 Linux에서도 Windows 디렉토리에 접근이 가능하다. 반대로 Windwos에서 WSL Linux 디렉터리로 접근이 가능하다.
먼저 WSL 2 Linux에서 윈도우즈 디렉터리에 접근 원리를 살펴보자. 파일 서버 프로토콜인 9P Protocol Server를 통해 WSL Linux에 윈도 디렉터리를 마운트를 한다. Host 윈도즈에서 파일 서버(9P Protocol Server)를 실행한다.
반대로 Windows 에서 WSL Linux 디렉터리 접근도 마찬가지 원리이다. WSL Linux에서 파일 서버인 9P Protocol Server를 실행하기 때문에, Host Windows에서 Explorer 프로그램을 통해 접근할 수 있다.
3. Host OS의 IP 망으로 네트워크 인터페이스 수정하는 방법(브리지 모드 설정)
WSL2 는 기본적으로 NAT 망으로 설정되어 있어 사설 IP가 할당된다. HOST OS인 Windows의 네트워크망에서 포트 포워딩을 통해 WSL2로 네트워크 통신이 연결된다. 브리지 모드로 설정하려면, Hyper-V 설정과 Host OS에서 포워딩 설정을 추가적으로 하여야 한다.
설정하는 것이 복잡하여 나중에 시도를 해볼 예정이다.
4. 현재 WSL2의 한계점과 앞으로 업데이트될 부분은?
구글에 검색하니 주로 Reddit 의견들이 많이 나왔다. 읽어보니 듀얼부팅을 사용하는 유저들은 WSL2로 많이 이동했다고 한다. 그리고 별 다른 문제점은 없다고 한다. 단지 문제점이 될 부분은 네트워크 쪽인데, 브리지 모드가 안 되는 정도인 것 같다.
MS 공식 FAQ에서 WSL2의 용도를 소개하고 있다.
이는 주로 개발자, 특히 웹 개발자 및 오픈 소스 프로젝트에서 작업하는 사용자를 위한 도구입니다. 이 도구를 통해 Bash, 일반 Linux 도구(sed, awk 등) 및 많은 Linux 중심 도구(Ruby, Python 등)를 사용하려거나 사용해야 하는 사용자는 Windows에서 해당 도구 체인을 사용할 수 있습니다.
위키에서도 위 목적 외에 사용하려면 Hyper-V, 쿠베네 티스, 클라우드 등을 사용하라고 한다.
WSL 릴리즈 노트는 여기서 볼 수 있다.
5. WLS 관리 팁
WSL 끄고 켜기
1. CMD 실행
2. WLS 조회
// 실행중인 wsl 프로세스 보기
wsl.exe --list --running
3. WSL 끄기
// 해당 wsl 프로세스 끄기
wsl -t WSL이름
참고 문서
- Private IP Address www.arin.net/reference/research/statistics/address_filters/
- What is WSL, wiki.ubuntu.com/WSL
- WSL Wiki, en.wikipedia.org/wiki/Windows_Subsystem_for_Linux
- The new Windows subsystem for Linux architecture: a deep dive - BRK3068 www.youtube.com/watch?v=lwhMThePdIo
- Hyper-V Types, www.vembu.com/blog/top-11-microsoft-hyper-v-terminologies-you-need-to-know/
- WSL 2 한글 문서, docs.microsoft.com/ko-kr/windows/wsl/compare-versions#wsl-2-architecture
- WSL 2 FAQ, docs.microsoft.com/en-us/windows/wsl/wsl2-faq
배운 점
- Hypervisor에 대해 잘못 알고 있었다는 것을 알았다. Type1과 Type2로 있었고 현재 Type1으로 작동하고 있었구나.
- 디렉터리 접근에 대해 명쾌하게 알 수 있었다. 과연 어떻게 다른 운영체제 간 디렉터리에 접근할 수 있는지 몰라서 잘 사용하지 않았다. 9P라는 파일 시스템 네트워크 프로토콜을 알게 되었다.
- 브리지모드가 네트워크 카드를 VM 간 나눠쓴다는 것을 알게 되었다.
-----
WSL 이 어떻게 동작하는지 스스로 추정해보기
- Windows OS 위에 가상화를 통해 Linux OS가 실행된다. WSL은 Windows application이기 때문이고, Host OS 위에 다른 OS를 실행시키려면 가상화를 사용할 수밖에 없다.
- 하지만 기존 OS 레벨 가상화 VMWare, Hyper-V와 다르다. 메모리와 CPU의 리소스 사용량이 적으며 고정 리소스 할당이 없다. Linux 커널만 가상화를 해서 사용해서 리소스 사용량이 낮을 것이라고 추정한다.
- 또 다른 점은 Windows File System에도 접근이 가능하다. WSL Linux 파일시스템과 Host Windows 파일 시스템 간 통신할 수 있는 인터페이스를 WSL에 구현한 것 같다. bash 명령어로 파일을 수정하면, WSL 파일 시스템 인터페이스에서 windows 파일 조작 명령을 실행하는 것 같다.
- IP 주소를 확인해보니 Private 네트워크 주소이다. 기존 OS 가상화처럼 네트워크도 Private Network를 만들어서 사용한다. 그렇다면 Host의 IP 대역으로 사용할 수 있는 방법이 있을까?
확인하고 싶은 점
- WSL은 어떤 유형의 가상화를 하였는지? 기존 OS 레벨 가상화와 다른 점
- CPU, Memory 사용량이 낮은 이유. 리소스를 유동적으로 어떻게 할당하는지.
- 어떻게 Windwos 파일시스템에 접근이 가능한지? 어떻게 마운트 된 것인지?
- Host OS의 IP 망으로 네트워크 인터페이스 수정하는 방법(브릿지 모드)
- 현재 WSL2 의 한계점과 앞으로 업데이트될 부분은?
'공부노트' 카테고리의 다른 글
Spring Data Rest 사용 후기 (0) | 2021.01.02 |
---|---|
Ruby 데이터 타입 (0) | 2020.10.03 |
전기적 컴퓨팅 - 컴퓨터 역사 (0) | 2020.01.27 |
이전의 컴퓨터들 모습 - 컴퓨터 역사 (0) | 2020.01.27 |
WebComponent 와 Vue JS (0) | 2019.06.08 |