개발
-
kvm irqfd개발/가상화 2018. 8. 11. 14:02
* 개인 공부용도로 정리한 것이라 부정확한 정보가 있을 수도 있으니 참고용으로만 사용하세요. IRQFD irqfd는 QEMU에서 정의한 eventfd와 GSI(Global System Interrupt) 값을 이용해서 Guest에 바로 interrupt를 바로 쏘아 줄 때(irqfd_inject) 사용하는 kvm interrupt 라이브러리다. 간단한 event를 만들 때 사용하는 eventfd 메커니즘을 응용한 대표적인 예다. 좀더 디테일한 동작 내용을 이해하기 위해 초기화 코드를 순서대로 분석해보자. 1. QEMU 장치 정보 세팅 후 kvm으로 ioctl 전달 QEMU에서는 장치가 사용하려는 GSI(Global system interrupt)와 상태에 대한 정보를 저장하는 flag 값 그리고 qemu..
-
파이썬으로 AI 개발할 때 유용한 패키지 모음개발/인공지능 2018. 8. 7. 22:01
파이썬으로 인공지능을 개발할 때 자주 사용하는 패키지 세가지를 정리해봤다. 1. Pandas csv형태로 된 데이터 파일을 일어올 수 있는 라이브러리를 제공. 엑셀 파일을 함수 호출 한번으로 파이썬에서 사용할 수 있는 객체로 변환할 수 있다. 데이터 셋이 엑셀의 형태로 되어있는 경우가 많아 데이터 분석을 할 때 자주 사용하는 패키지중에 하나다. import pandas pd df_data = pd.read_excel('data.xlsx', encoding='utf-8') # 엑셀 데이터 읽어오기 리턴된 객체인 df_data에는 행을 추가하거나 삭제할 수 있는 기본적인 기능뿐만 아니라 새로운 속성을 추가하고 다른 데이터와 합칠 수 있는 기능도 제공한다. 꽤 많은 기능이 있으니 직접 사용하면서 익혀보는게 좋..
-
jupyter notebook 소개개발/기술 2018. 8. 4. 11:58
파이썬은 라이브러리가 많다는 것이 무궁무진한 장점인데 정작 개발할 때는 어떤 함수가 있고 그 함수를 사용하려면 어떤 인자가 필요한 건지 알지 못해 난감한 경우가 있다. 물론 구글 검색을 통해서 알 수 있지만 궁금한 함수가 한 두개가 아닌 경우에는 매번 검색으로 알아보는 것도 꽤 일이다. 이럴 때는 jupyter-notebook을 사용하면 편리하다. jupyter notebook은 C를 처음 배울때 사용했던 비주얼 스튜디오처럼 객체에서 사용가능한 함수들을 쭉 나열해주고 함수가 어떤 역할을 하며 사용할 때 필요한 인자는 무엇인지 뽑아준다. 매번 선언이 안된 함수를 사용해서 (나처럼) 붉은 에러 메시지를 뿜어내는 사람에게는 필수 소프트웨어 툴이다. pandas 모듈에서 사용가능한 함수들을 출력하고 필요한 인자..
-
conda tensorflow 설치 및 jupyter notebook 연결개발/삽질 기록 2018. 8. 3. 23:20
Conda 환경에서 tensorflow를 설치하는 방법 0. Prerequsite - Anaconda를 설치한다. - GPU를 사용할 경우 tensorflow를 사용할 수 있도록 CUDA, cuDNN 라이브러리를 설치한다. 1. tensorflow 가상 환경 생성 tensorflow를 사용하는 가상 환경을 하나 생성한다. 별도로 설정하고 싶은 환경이 있으면 생략하고 아니면 만들자. kwony@kwony:~$ conda create -n tensorflow pip \ python={ python 버전 입력 ex) 2.7, 3.42. 가상환경 활성화 1에서 만들어둔 가상 환경을 활성화한다. activate 명령어가 안먹히는 경우는 anaconda의 바이너리가 export가 제대로 안된것이니 확인해보도록 하자..
-
git rebase 를 이용해 중간 커밋 수정하기개발/삽질 기록 2018. 7. 25. 21:54
최상위 커밋은 git commit --amend로 수정이 가능한데 중간에 있는 커밋은 수정하기가 참 난감하다. 가장 간단하면서 무식한 방법은 git format-patch로 수정하려는 커밋 전까지 패치 파일을 만들어둔 후 reset으로 수정하려는 커밋까지 쌓인 커밋들을 모두 지운 뒤 git commit --amend로 수정한 다음, reset 하기 전에 패치로 만들어둔 커밋을 다시 적용하는 방법이 있다. 이 방법은 매우 번거롭고 복잡하며 이미 Pull Request가 진행중인 브랜치에서는 적용할 수 없다는 문제가 있다. 이런 경우에는 git rebase의 interactive 옵션을 이용하면 Pull Request가 진행중인 브랜치의 중간 커밋을 수정 할 수 있다. 사용 방법은 간단하다. 위 그림에서 맨..
-
스핀락개발/컴퓨터사이언스 2018. 7. 23. 22:23
멀티프로세서 환경에서는 시스템에서 생성된 프로세스가 하드웨어에 설치된 CPU의 수만큼 동시에 실행된다. CPU에서 동작 중인 프로세스는 메모리 영역에 할당된 데이터중 연산이 필요한 값을 읽고 쓰는 작업을 수행하게 되는데 이때 여러 개의 프로세스가 같은 데이터 영역을 공유하게 되는 경우가 있다. 여러 개의 프로세스가 공통된 전역 변수의 값을 읽는 경우가 대표적인 예다. 데이터 값이 고정되고 모든 프로세스가 고정된 값을 읽기만 하면 별 다른 문제는 없다. 그런데 누군가가 쓰게 되는 경우부터 싱크 문제가 생긴다. A랑 B 프로세스가 있다고 해보자. A 프로세스는 C와 D의 데이터 값을 수정하게 되어있고, B 프로세스는 A프로세스보다 조금 늦게 생성되어 A 프로세스가 수정한 값을 읽도록 짜여져 있다. 싱글코어에..
-
eventfd개발/컴퓨터사이언스 2018. 7. 18. 21:37
eventfd는 리눅스기반 운영체제에서 파일 디스크립터를 통해 프로세스들끼리 통신 할 수 있는 API중 하나다. IPC로 가장 유명한 pipe는 read와 write용으로 채널을 따로 만드는 것과는 달리 eventfd에서는 읽고 쓸 파일 디스크립터 하나면 충분하기 때문에 번거로운 세팅작업 없이 간단하게 구현 할 수 있다. 그러나 단 한개의 채널을 사용하는만큼 사용할 수 있는 기능은 제한적이다. 이 파일 디스크립터로 교환할 수 있는 값은 1 이상의 64비트 정수 하나가 전부라 데이터 전송보다는 이름처럼 프로세스간에 event를 전달하는 용도로 사용한다. 1. eventfd(uint64 initval, int flag) 프로세스들끼리 통신 할 수 있는 파일 디스크립터를 만드는 함수다. 종료후에는 채널로 사용..
-
workqueue 사용법개발/컴퓨터사이언스 2018. 7. 16. 20:30
workqueue를 사용하는 작업은 크게 queue와 work를 만들고 작업을 스케줄 하는 것으로 나뉜다. 1. Queue 생성 workqueue도 이름에서 짐작 할 수 있듯이 queue이기 때문에 자료구조시간에 지겨울 정도로 봤던 queue를 만들어야 한다. 하지만 push나 pop처럼 queue를 사용하는 함수 API까지 만들어줄 필요는 없고 내가 짓고 싶은 Queue의 이름만 하나만 생각하고 생성 매크로만 호출하면 된다 #define create_workqueue(name) \ alloc_workqueue("%s", __WQ_LEGACY | WQ_MEM_RECLAIM, 1, (name))리턴인자는 workqueue_struct * 다. 이 포인터를 이용해서 queue에 넣는 작업을 할 수 있다. 2..