1. 라즈베리에서 윈도우 돌리기 2
순전히 개인적인 호기심에서 시작한 라즈베리 파이 4 에서 윈도우 돌려 보기 입니다.
안녕하세요. 2개월전 오랜만에 클리앙에 글을 한개 작성했습니다.
https://www.clien.net/service/board/use/15231723CLIEN
바로 라즈베리 파이 4에서 윈도우 10을 구동하는 글을 올렸는데요..
최근 더디지만, window on raspberry 의 업데이트가 되었습니다.
(드디어 라즈베리의 내장 gigabit 이더넷을 지원합니다.)
설치법은 아래의 동영상이 제일 편하게 따라가실수 있겠습니다.
위 동영상을 보시고 하나하나 차근차근 따라가다보면 설치를 할 수 있습니다.
저는 2개월간 계속 이용을 해보았는데.. 윈도우 자체를 구동시킬때는 별로 느리지 않습니다.
(mp3 플레이어를 통한 음악감상이나 edge 브라우저를 이용한 유투브 감상용으로 이용하였습니다.)
그런데 어느날, 유투브 동영상 감상용으로 한참 이용하다가,
갑자기 arm 상에서 구동되는 윈도우와 에뮬레이션 레이어는 어느정도의 성능인지 궁금해 지기 시작했습니다.
그래서 성능을 비교해 보기위한 연구를 시작해 보았습니다.
ARM64 네이티브를 지원하는 애플리케이션은 거의 없기 때문에
이것을 테스트하기 위한 방법이 무었이 있을까 조사를 먼저 했습니다.
그러려면 일반적인 윈도우 구동환경인 x86 용 프로그램과 ARM64에서
컴파일된 실행파일이 동시에 있어야 하는데요..
찾다보니 그렇게 여러개의 실행파일을 제공해 주는 프로그램이 많지 않았습니다.
심지어는 벤치마크 툴조차도 x86 에서 에뮬레이션되어 실행되는 것이라서
ARM64 용으로 컴파일된 프로그램이 필요했습니다. 그런데 아직 arm 윈도우가
대중화 되어 있지 않아서 arm64 윈도우에서 구동되는 프로그램이 거의 없었습니다.
며칠간 조사해 보다가 아직은 ARM64 윈도우가 대세가 아니라는 점을 알게 되어..
그래서... 결국 제가 직접 만들어 보기로 했습니다. OTL...
마침 2차 코로나 유행이라서 불러주는 곳도 없고, 매일매일 퇴근후 집에서 무료하게 시간을 보내느니 뭔가라도 해 보자 라고
시작한것이 이제야 조금씩 결실을 맺은것 같습니다.
이번에 성능테스트를 위해서 ARM64 용으로 만들어 본것은 mp3 플레이어 입니다.
워낙에 mp3등 미디어 플레이어는 많이 있지만, arm64 네이티브로 구동되는것은 없어서
윈도우 프로그래밍도 공부해 볼겸 겸사겸사 시작했는데 2개월이라는 시간이 걸렸습니다.
바이너리 공개 드립니다.
----------------------------------------------------------
1.라즈베리 전용의 MP3 연주기 입니다.
2. 윈도우 x86으로 컴파일된 MP3 연주기 입니다.
3. 윈도우 x64용으로 컴파일된 MP3 연주기 입니다.
윈도우에서 위험한 프로그램이라고 나오는데, 위험한거 아닙니다. (윈도우에서 제공하는 프로그램으로 만든것입니다. ㅠ.ㅠ)
제가 윈도우 프로그래밍을 안해본지 20년이 넘은터라 할수있을까 걱정되기도 했는데
인터넷을 뒤지고 모르는것은 stackoverflow 에서 검색도 하고 해서 어떻게 꾸역꾸역 만들게 되었습니다.
MP3 디코딩의경우, 예전에는 상용화 코드밖에 없어서 자신의 프로그램에 사용하려면
fmod 같은 사운드 전용의 라이브러리를 이용해야 했는데,
이런 상용 라이브러리를 이용하는경우, ARM64 전용 프로그램을 만들 수가 없습니다.
이식가능한 C 언어로된 코드가 있어야 ARM64 윈도우 전용 프로그램을 만들 수 있었습니다.
다행히 현재 2020년의 경우 MP3자체가 분석도 많이 되어있고, 많은 분들의 노력으로 공개된 코드도
많이 있었습니다.
소스는 https://github.com/mackron/dr_libs/blob/master/dr_mp3.h
여기 사이트의 코드를 이용했습니다. 프리 라이선스라고 합니다.
이렇게 C 언어의 코드를 확보해서 프로그래밍을 하면 컴파일러만 바꾸어 주는 것 만으로
ARM64 윈도우에서 에뮬레이션 없이 전용으로 돌아가는 음악플레이어를 만들 수 있었습니다.
연주기는 ARM64 윈도우의 성능을 테스트 해 보기 위한 것으로 볼품없고, 모양은 누추합니다.
(모양은 2000년도에 한창 유행했던 윈앰프 스타일의 mp3 연주기 입니다만, 내부는 현대적인 업그레이드를 조금 해 보았습니다.)
먼저 오디오 출력장치를 최신 XAudio2 를 사용했습니다. 기존의 미디어 연주기들은 대개 direct sound 를 이용하는데
위의 XAudio2 는 멀티채널을 지원할 뿐만 아니라 latency 도 낮다고 해서 direct sound 로 만들다가 중간에 바꿨습니다.
덕분에 오디오쪽도 새로 공부를 해 보았습니다.
그리고, 윈도우 프로그래밍 (정확히는 WIN32 C++)은 20년만에 처음해 보는터라 기왕에 시작한거
라이브러리도 완전히 바꿔서 새로 만들어 봤습니다.
윈도우 템플릿 라이브러리라는 것을(WTL) 이용해서 만들어 봤는데요, 이것은 오로지 헤더파일만
가지고 윈도우 프로그램을 하는것이라서, 작고 가벼운 실행파일을 만들수 있습니다.
사실 제가 디자이너가 아닌 관계로 디자인쪽은 완전 꽝이라서 UI 는 2000년대에 어느분께서 공개해 주신
윈앰프형 스킨 UI 를 사용했습니다..
그래서 결국, 라이브러리는 한개도 사용하지 않고, 위에서 설명드린
MP3 디코더 코드와, 공개된 UI 를 사용하고, 윈도우용 visual studio community를
사용해서, ARM64 에서 돌아가는 MP3 플레이어를 만들수 있었습니다.
2. ARM64의 x86 에뮬레이션 레이어의 성능비교
비교를 위해서 라즈베리에서 ARM64 전용의 MP3 플레이어로 구동시킨경우와, X86 용 MP3 플레이어로
구동시킨경우를 동시에 동영상을 찍어서 올려 보았습니다
이것은 라즈베리에서 돌린 ARM64용 MP3 연주기 입니다.
CPU 점유율이 항상 "낮음"~"매우낮음"으로 유지됩니다.
-----------------------------------------------------------------------------------------------------------------------
또 이것은 라즈베리에서 돌린 윈도우용 MP3 연주기 입니다
CPU 점유율이 "보통" ~ "낮음"으로 유지됩니다.
결국, 동영상에서 보신바와 같이 x86용으로 작성된 프로그램의 경우
약 3~5배정도 속도가 더 느립니다. 느리기는 느리지만..
일단 프로그램을 만들고, 돌려보니 CPU 에뮬레이션이
3~5배 정도밖에 안느리다는것은 대단하구나!! 라는 생각이 들었습니다.
일반적인 게임기등을 에뮬레이션 하려면 대개 10배정도의 성능이 요구된다고 알고 있었는데
마이크로소프트의 윈도우의 경우 ARM64로의 이전을 위해서 에뮬레이션 레이어까지 공을 많이
들인것 같았습니다.
MP3 등 미디어 연주기정도라면 굳이 전용프로그램을 쓰지는 않아도 될듯 합니다만,
압축하기나 압축 풀기작업등에서는 3~5배 차이라면 현격한 차이일 것입니다.
(참, 현재 압축프로그램으로 ARM64를 지원하는 프로그램은 반디집이 유일한 것같습니다.
반디집 너무 좋습니다.)
현재 인텔 x86의 입지가 점점 좁아지는 입장에서 ARM64 가 미래 윈도우의 대세가 될지는 모르겠습니다만,
microsoft 등 운영체제 개발사 측에서는 착착 AP 의 이전을 고려하고 있는 듯한 인상입니다.
완전히 동일한 코드를 컴파일러 세팅만 바꾸는 것으로 간단히 x86 또는 x64 에서 ARM64 로
이전 가능한것은 쉬운 마이그레이션을 위한 포석이 아닐까 생각이 들었고,
앞으로 새 아키텍쳐가 대세가 될 수 있겠구나.. 라는 생각을 하게 됩니다.
현재... ARM64 윈도우를 지원하는 상용제품은 가격이 매우 비쌉니다. 수요도 없거니와 성능도 떨어져서입니다.
삼성 갤럭시북, asus 의 노트북 일부정도인데 백만원가까이 하는 노트북이 성능은 같은 가격의
윈도우 노트북 1/3 ~ 1/5 에 미치지 못합니다.
그렇지만, 이번에 연구하고 개발하면서 알게 된것인데 갤럭시북등 ARM64 윈도우 노트북의 경우
CPU 자체의 성능은 인텔 CPU에 거의 근접하고 있었습니다. (벤치마크 프로그램으로 돌려본 결과)
그렇지만 윈도우용 바이너리를 구동하는 과정에서 성능이 1/3~1/5 정도로 하락하기 때문에
결국은 전체적인 노트북의 성능이 떨어지고, 일반적인 윈도우 프로그램을 돌리게 되면
성능이 저하되어 넷북 정도의 속도로 돌아가게 된 것 같았습니다
앞으로 ARM64 전용의 프로그램이 많이 나오기 시작하면 대세가 바뀔수 있으리라는 생각도 들기는 합니다.
아직은 ARM64 윈도우 노트북이 많이 비싸지만, 이렇게 저렴한 라즈베리로 ARM64용의 윈도우를 돌려 볼수
있는것 만으로, 신기한 경험이 된 것 같았습니다.
앞으로의 ARM64 윈도우의 발전이 기대됩니다. 계속 연구를 해 보겠습니다.
그럼 감사합니다.
게임 에뮬로 쓸까 하고.. 묵혀둔 rasp4 8기가가 있는데...@_@ 저도 해보고싶네요
3B로 서버 여러개 만들어서 놀았는데..
결국 미니PC로 넘어갔습니다...
3B에서 IoT 윈도우는 진짜 느렸는데, 4가 확실히 성능이 좋네요^^
업무용으로 테스트하는 데 안되는 게 좀 있어서 스트레스 받더군요..
능력자세요!!!
관심은 있지만 여러 이유로 손 못대본 부분이라...
하지만 linux 로 100% 활용 가능한 기기를 윈도우로 쓰시려는 이유도 궁금하긴 하군요.
마소가 .net/.net core에 공을 들이는 이유도 ARM관련 준비를 해나가는것이 아닐까 합니다. 윈도야 죽었다 깨나도 레거시를 버리지 못하는 상황이니....
반디집 너무 좋습니다.)
요 부분 보고 오잉?! 그러면 그냥 압축 푸는 시간 비교만 해도 어느 정도의 벤치마킹이 될 텐데?! 싶네요!