개발
-
vhost개발/가상화 2018. 7. 8. 14:19
Vhost는 Virtio를 이용한 장치 가상화의 성능을 개선하는 모듈이다. 일반적으로 Virtio를 이용하는 장치들은 모두 virtqueue 기반의 킥 메커니즘으로 backend와 frontend가 통신한다. 그런데 이때 virtqueue를 처리하는 주체는 QEMU에서 만든 유저 프로세스이기 때문에 다른 우선순위가 높은 작업들이 처리 될 때 까지 연기되며 실제 Host의 장치 드라이버를 사용하기까지 오랜 시간이 걸린다. 이것 뿐만아니라 장치를 에뮬레이션 하는 작업 또한 유저 스페이스에서 이뤄지기 때문에 커널내의 작업보다 미뤄게되고 실제로 장치를 사용하는 Native 드라이브와 통신하기 위해선 여러번 context switch가 일어나게돼 오버헤드가 발생한다. 그림 1. virtio 장치 구조 이런 오버헤..
-
virtio개발/가상화 2018. 7. 8. 12:12
QEMU를 이용해서 Full virtualization으로 VM을 돌릴 경우 Guest OS에 별다른 수정 사용 할 수 있다는 장점이 있으나 매번 Guest의 명령어를 트랩해서 장치를 에뮬레이션 해줘야 하므로 느리다는 단점이 있다. 그래도 과거와 달리 요즘에는 하드웨어가 좋아져서 마우스나 키보드를 사용할 때 버벅거리지 않아 거의 성능에 문제가 없어 보이는 착각이 들지만 실제로 벤치마크 툴을 이용해 Guest 장치의 성능을 Host와 비교해보면 심각할 정도로 낮다. 이런 문제를 해결하고자 가상화 개발자는 virtio라는 구조를 창안해냈다. 이 구조의 주요 개념은 일부 장치에 대해서는 매번 트랩해서 emulation 하지 말고 Hypervisor와 Guest가 바로 통신 할 수 있는 채널을 만들어 불필요한 ..
-
URI (Uniform Resource Identifier)개발/기술 2018. 7. 2. 22:34
URI (Uniform Resource Identifier) 현재 URI을 간략하게 소개하는 글을 쓰기 위해 접속한 티스토리 에디터의 주소는 이렇다. http://kwony91.tistory.com/admin/entry/post/?type=post&returnURL=/manage/posts/ 위 주소를 가지고 URI을 이루는 요소에 대해서 간단히 알아보자 1. 스키마(Scheme) 주소 맨 앞에 있는 "http://" 은 많이들 봤을 것이다. 이것 말고도 https도 있고 개발하는 사람들은 ftp, ssh도 봤을 것이다. 일할 때는 특별한 명칭 없이 "http에요? https에요?"라고 말하곤 했는데 전문적인 용어로 스키라(Scheme)라고 부른다. 스키마의 역할은 웹브라우저나 스마트폰 같은 일종의 클라..
-
VFIO, Passthrough개발/가상화 2018. 6. 30. 13:40
VFIO (Virtual Function I/O) 일반적으로 유저 애플리케이션에서 특정 장치를 이용하기 위해선 먼저 Host OS에서 해당 장치를 전담하는 유저 서비스(안드로이드는 surface flinger 같은게 있다)에게 요청하고, 유저 서비스는 커널 단의 장치 드라이버에 작업을 전달하며 장치 드라이버는 전달 받은 요청에 따라 장치를 실제로 움직이게 된다. 이러한 형태는 유저 앱의 입장에서 꽤 단순한 작업을 해도 커널 단의 장치드라이버에 불필요한 작업이 많다면 이에 비례해서 처리하는 시간이 늘어나게돼 유저앱의 성능이 저하되는 일이 발생한다. 이를 해결하고자 리눅스 커널에서는 유저 영역에서 직접 장치에 접근 할 수 있는 플랫폼을 만들었다. 간단히 말해 장치 드라이버를 커널에 두지 않고 유저 영역에 드..
-
Kubernetes 소개개발/클라우드컴퓨팅 2018. 6. 23. 14:30
Kubernetes 공식 홈페이지에서는 Kubernetes를 이렇게 정의한다. "Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications" 직역하면 컨테이너화된 앱들의 배치(deployment), 확장(scaling), 관리(management)를 하는 오픈소스 시스템이라는데 이것만 봐서는 왜 kubernetes가 무슨 역할을 하는지 감이 안온다. 어차피 컨테이너는 Docker에서 생성하고 관리 할 수 있는데 왜 kubernetes가 필요한 걸까? 설명에 앞서 docker만 사용할 때의 위험성을 생각해보자. docker는 특정 Host OS 위에서 사용자..
-
libgdx - Viewport개발/기술 2018. 6. 22. 21:49
Viewport 정의/종류 Renderer 클래스를 통해 화면에 그려진 결과물을 게임 스크린의 크기에 맞춰 비율을 조정할 수 있는 객체다. 여러 가지 종류가 있는데 이번 포스트에서는 대표적인 세개만 다루고자 한다. 1. StretchViewport 렌더링 결과물을 화면 크기에 맞춰 재조정 해주는 객체다. 주로 윈도우 그림 파일의 가로/세로 크기를 임의 조정할 때 볼 수 있는데 글로 설명하는 것보다는 그림을 보는게 훨씬 이해하기 쉬울 것 같다. 코드상에서는 화면 중앙에 동그란 원을 그렸는데 게임 스크린의 가로 길이가 세로보다 길어 화면 비율에 맞추다보니 원이 타원형으로 보여지고있다. 사각형도 정사각형을 그렸는데 실제로 보이는건 가로가 더 긴 직사각형이다. 2. FitViewport 화면 비율에 따른 재조정..
-
libgdx - Renderer개발/기술 2018. 6. 22. 21:12
ShapeRenderer 컴퓨터 그래픽 소프트웨어에서 '렌더링'은 이진화된 데이터를 컴퓨터 내에 영상을 만들어내는 과정을 뜻한다. 게임 엔진인 libgdx에서도 렌더링 개념을 사용하며 객체 지향적인 관점으로 활용하기 위해 ShapeRenderer라는 클래스를 만들었다. ShapeRenderer 는 화면을 그리기 위한 객체로 개발자가 만들어둔 데이터를 다양한 API를 이용해화면에 출력해주는데 사용된다. ShapeRenderer renderer; @Override public void create() { renderer = new ShapeRenderer(); 실제 클래스의 내부를 보면 public으로 선언된 함수가 많은데 이중 대부분이 화면에 그리기 위해 사용 할 수 있는 API 들이다. 목적에 따라서 함..
-
Libgdx - 소개 및 주요함수 정리개발/기술 2018. 6. 20. 20:52
Libgdx는 오픈소스로 운영되는 게임엔진이다. 주로 2D용 게임을 개발하는데 사용하며 Mac과 Windows에서만 사용할 수 있는 Unity와는 다르게 Ubuntu 환경에서도 사용할 수 있어 개발하기 편리하고 개발한 코드가 Android, IOS, Desktop 환경에서도 동시에 사용 할 수 있는 cross platform 툴이다. 다만 Unity처럼 강력한 GUI 기능을 제공하지는 않고 직접 코드를 이용해서 일일이 그리는 원시적인 방법을 채택해 초심자들에겐 어려울 수 있으나 반대로 생각하면 무거운 기능을 줄이고 가능한 가볍게 만들었기 때문에 성능이 좋고 새로운 기능을 자신의 입맛에 맞게 추가 할 수 있어 능숙한 개발자들에겐 높은 자유도를 주기도 한다. 공식 홈페이지에 올라온 libgdx 게임은 아래와..