개발
-
Github 페이지를 이용해서 이력서 만들기개발/삽질 기록 2018. 9. 27. 21:31
이력서를 웹사이트에 공개하는 방법으로 LinkedIn을 사용하는 것이 가장 간단하고 대중적이지만 포맷이 정해져 있어 심심하고 다른 사람들과 차별화를 줄 포인트가 없다는 것이 단점이다. 그래서 일부 개발자들은 자신의 이력서를 HTML 형태로 이쁘게 디자인하고 호스팅을 해서 다른 사용자가 쉽게 볼 수 있게끔 만든다. 링크드인 보다 덜 식상한 것 같다 그런데 이력서 한 장 띄우자고 유료 웹 호스팅 서비스를 이용하는 건 부담스러운 일이라 개발자들은 Github에서 저장소 별로 제공하는 페이지 기능을 활용해서 이력서를 만든다. 깃허브 페이지 기능이 궁금하신 분들은 이 사이트에서 친절히 설명하는 영상이 있으니 참고하길 바란다. 자세한 사용 방법은 알려주지 않는 것 같다. 사실 페이지 기능을 사용하는 법을 몰라도 이..
-
Cgroup (Control Group)개발/컴퓨터사이언스 2018. 9. 15. 13:37
Cgroup (Control Group) Cgroup은 CPU, Network, Memory 등 하드웨어 자원을 그룹별로 관리 할 수 있는 리눅스의 모듈이다. 하나 또는 복수의 장치를 묶어서 하나의 그룹을 만들 수 있으며 개별 그룹은 시스템에서 설정한 값만큼 하드웨어를 사용할 수 있다. 설정하는 값은 예를 들면 이런 것들이다.어떤 그룹이 CPU를 더 많이 차지 할 것인지?그룹이 얼마만큼 메모리를 사용 할 수 있는지?네트워크 우선순위를 얼만큼 줄 것인가.시스템에 생성된 프로세스들은 장치 별로 특정한 cgroup에 속하며 프로세스가 사용하는 하드웨어 자원의 총량은 속한 cgroup의 통제를 받게 된다. 이말은 곧 프로세스가 아무리 효율적으로 동작하도록 만들어져 있어도 cpu 점유율이 낮은 cgroup에 속해..
-
VNC와 RDP개발/기술 2018. 9. 12. 22:10
원격 데스크톱을 연결하는 프로토콜은 여러 가지가 존재하는데 이중 대표적인 방법이 VNC와 RDP다. 두 프로토콜 모두 단순히 커맨드 라인 창만 띄우는 ssh를 넘어서서 원격 PC의 그래픽 인터페이스까지 연결해준다는 점은 동일하지만 둘의 세부 동작 방식과 주 사용 용도는 조금 다르다. 이번 포스트에서는 VNC와 RDP의 원리를 분석하고 각각의 차이점을 간단히 정리해보고자 한다. VNC (Virtual Network Computing) VNC는 RFB(Remote Frame Buffer)프로토콜 방식을 이용해 서버에서 보낸 화면 정보를 클라이언트에 설치된 그래픽 라이브러리를 이용해 그리는 방식이다. 사용하기 위해선 원격으로 접속하려는 PC에서는 지속적으로 화면 정보를 RFB의 형태로 변환해 전송하는 서버가 ..
-
Q-Network개발/인공지능 2018. 9. 12. 22:10
Q-Network 앞선 포스트에서 다룬 Q-Learning은 초기 학습 데이터 없이 주변을 탐사해가며 보상값을 최대화 하는 방향으로 환경 데이터의 파라미터의 값을 지속적으로 업데이트 하는 알고리즘이다. 그런데 만약 4x4처럼 작고 단순한 환경이 아니라 5000x5000이고 각 환경별로 선택 할 수 있는 경우의 수가 수십가지가 된다면 기존 알고리즘으로는 시간도 오래 걸릴 뿐만 아니라 모든 환경 데이터 값을 관리하는 것도 불가능하다. 이 문제는 Linear/Logical Regression에서도 겪어보았다. 학습에 사용되는 이미지의 크기가 커질수록 Feature의 값이 많아지게돼 기존의 방식 대로는 학습이 불가능했었다. 당시엔 이 문제를 해결하기 위해 Feature단위로 값을 분석하지 않고 인간의 뇌 구조를..
-
CPU pinning과 taskset개발/컴퓨터사이언스 2018. 8. 27. 22:49
Big/Little로 이루어진 멀티코어 하드웨어 환경에서는 소프트웨어의 성능을 높이기 위해 하드웨어적인 트릭을 사용하는데 이중 가장 대표적인 것이 프로세스를 처리할 수 있는 CPU 종류를 설정하는 CPU pinning 방법이다. CPU affinity라고도 부른다. 기본적으로 스케줄러는 큐에 대기중인 프로세스를 하드웨어상에서 idle 상태에 있는 CPU에 최우선적으로 작업을 할당한다. 그런데 idle 상태에 있는 CPU가 Little라면 처리하는 속도가 Big Core에 비해서 확연히 차이가 날 수 있다. 칩에 따라서 다르지만 일반적으로 Big Core와 Little Core의 성능은 1.5배정도 차이가 난다. 만약 오래 걸리는 작업이라면 Little Core에 할당하는 것보다 Big Core가 idle..
-
Q-Learning in Non-Deterministic World개발/인공지능 2018. 8. 19. 13:11
그림 1. Non Deterministic은 한가지 행동이 여러가지 결과를 만들 수 있는 환경을 의미한다. 그림1에서 빨간선은 Agent가 이동하기로 의도한 방향이고 파란선은 에이전트가 실제로 이동한 방향이다. Deterministic한 상황에서는 에이전트가 의도한 대로 항상 오른쪽으로만 이동한다. 그런데 그림 1과 같은 상황에서는 에이전트가 그림처럼 오른쪽으로도 이동할 수도 있고 위로도 이동할 수도 있다. 이처럼 한가지의 행동(Action)이 여러가지 결과를 내는 환경을 Non-Deterministic이라 부른다. 앞선 포스트에서 설명한 Q-Learning은 예전에 알고리즘 시간에 배웠던 Dynamic Programming(이하 DP)과 여러모로 유사한데 DP는 에이전트가 취한 행동이 항상 고정된 결과..
-
Q-Learning개발/인공지능 2018. 8. 19. 09:50
강화학습은 주변의 상태를 지속적으로 탐사해가며 미래에 주어지는 '보상' 값을 활용해 최적의 알고리즘을 찾는 학습법이다. 초기 학습데이터가 필요한 딥러닝과는 달리 초기의 학습데이터가 필요 없으며(물론 학습 데이터를 활용해서 성능을 높이기도 한다) 대신 어떤 조건에서 보상을 줄 것인지에 대한 정책과 탐사할 환경이 필요한 알고리즘이다. 국내에선 이세돌과 커제를 무참히 무찌른 알파고의 학습 알고리즘으로 알려져있다. Q-Learning은 대표적인 강화 학습 알고리즘으로 '특정 상태에서 어떤 결정을 내리는 것이 미래 보상을 가장 높여줄 것'인지에 대한 정책 데이터를 지속적으로 업데이트 하는 알고리즘이다. 강화학습을 배울 때 가장 먼저 접하는 알고리즘이며 수학 수식들이 난무해 이해하고 싶지 않고 할 수도 없을 것 같..
-
kvm ioeventfd개발/가상화 2018. 8. 11. 23:10
* 개인 공부용으로 정리한 것이라 부정확한 내용이 있을 수 있으니 참고용으로만 사용하길 바랍니다. IOEVENTFD eventfd를 응용해서 guest에 interrupt를 보낼 수 있는 기능을 만든 irqfd것과 비슷하게 ioeventfd도 eventfd를 이용해서 guest에게 mmio 기능을 전달 할 수 있는 매커니즘을 만들었다. 초기화 작업도 irqfd와 거의 비슷하다. 1. QEMU에서 kvm으로 mmio 값 전달. QEMU에서 장치가 사용할 주소 값과 flag, eventfd 값을 세팅하고 kvm에 ioctl 을 날린다. 이때 전달인자 fd는 MemoryRegionIoeventfd 라는 구조체의 EventNotifier 값을 뽑아낸 것이다. 구조체 이름이 매우 와닿지 않는다. // qemu/a..