* SlideShare에서 특정 폰트로 쓰인 글자가 보이지 않는 경우가 있습니다. 다운로드 하셔서 PDF 리더로 보시는 것을 권해드립니다. -> 기존 폰트를 모두 나눔고딕으로 변경하였습니다.
OSS 포럼 개발 교육으로 진행한 Git, GitHub 강의 자료입니다.
(http://onoffmix.com/event/67081)
간단한 로또 번호 생성기 프로그램을 작성하면서 Git, GitHub에 대해 배웁니다.
1. Git과 Github
- 버전 관리?
- Git은 어쩌다 세상에 나왔나?
- Github?
2. Git 시작하기 - 실습
- 실습 준비 : Github, Goorm IDE 가입하기
- 리눅스 명령어와 친해지기
- Git 필수 개념 집고 넘어가기
- Step by Step Git 명령어 실습 (커밋, 브랜치, 원격 저장소 등)
- 옆자리 분과 Fork하고, Pull Request
3. Git과 Github 맛깔나게 활용하기
- Github의 협업 기능 살펴보기
- Github Page
- Gitbook
4. 있어보이는 Git 활용
- .git 디렉토리 살펴보기
- Git Branch 전략
- Commit Message 활용
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubJunyoung Lee
OSS 포럼 개발자 교육 'Git/GitHub 입문하기 - 부산'에서 Git 실습에서 사용한 자료입니다. (http://onoffmix.com/event/69536)
지난 번 자료(http://www.slideshare.net/ssusercef361/git-github-62006866)는 구름 IDE를 활용해서 진행했고, 이번 자료는 Git 클라이언트를 설치해서 진행했습니다. GitHub 가입과 Git 클라이언트 설치는 강의 전 준비(http://www.slideshare.net/ssusercef361/github-git)를 참고해주세요.
1. Git과 Github
- 버전 관리?
- Git은 어쩌다 세상에 나왔나?
- Github?
2. Git 시작하기 - 실습
- 실습 준비 : Github, Goorm IDE 가입하기
- 리눅스 명령어와 친해지기
- Git 필수 개념 집고 넘어가기
- Step by Step Git 명령어 실습 (커밋, 브랜치, 원격 저장소 등)
- 옆자리 분과 Fork하고, Pull Request
3. Git과 Github 맛깔나게 활용하기
- Github의 협업 기능 살펴보기
- Github Page
- Gitbook
4. 있어보이는 Git 활용
- .git 디렉토리 살펴보기
- Git Branch 전략
- Commit Message 활용
특정 폰트가 SlideShare.net에서 보이지 않는 관계로 모두 나눔고딕으로 통일했습니다.
200718 덕성여대 생물정보학 강의 :: 바이오파이썬 covid-19Joohyun Han
200718 덕성여대 강의 - 한주현
바이오파이썬으로 분석하는 covid19
covid19 genome 서열 받아서 바이오파이썬으로 다루기
covid19를 pubmed에서 검색해서 abstract 받아오기
covid19 protein 서열 받아서 weblogo 그려보기
강연문의
한주현 kenneth.jh.han@snu.ac.kr
블로그 https://korbillgates.tistory.com
[야생의 땅: 듀랑고]의 식물 생태계를 담당하는 21세기 정원사의 OpenCL 경험담Sumin Byeon
이 발표는 넥슨의 신규 개발 게임인 듀랑고의 생태계에 대한 간략한 소개와 OpenCL 을 이용한 병렬 처리에 관한 전반적인 기술적 내용을 다룹니다. 게임 속의 세계에서 지형과 기후, 지질 조건에 맞게 여러 종류의 식물과 광물들을 알맞은 곳에 배치시키는 것이 생태계 시뮬레이터의 역할인데, 이 시뮬레이터는 방대한 양의 계산을 수행합니다. 초기에 만들어진 프로토타입은 이러한 계산을 수행하는데 30분이 넘게 걸렸지만, 병렬처리, 알고리즘 시간복잡도 개선 등의 여러가지 방법들을 통해 그 시간을 11초까지 단축시켰습니다. 구체적으로 어떤 방법들을 시도했었고, 어떤 방법들이 효과가 있었는지 여러분과 그 경험담을 공유하고자 합니다.
* SlideShare에서 특정 폰트로 쓰인 글자가 보이지 않는 경우가 있습니다. 다운로드 하셔서 PDF 리더로 보시는 것을 권해드립니다. -> 기존 폰트를 모두 나눔고딕으로 변경하였습니다.
OSS 포럼 개발 교육으로 진행한 Git, GitHub 강의 자료입니다.
(http://onoffmix.com/event/67081)
간단한 로또 번호 생성기 프로그램을 작성하면서 Git, GitHub에 대해 배웁니다.
1. Git과 Github
- 버전 관리?
- Git은 어쩌다 세상에 나왔나?
- Github?
2. Git 시작하기 - 실습
- 실습 준비 : Github, Goorm IDE 가입하기
- 리눅스 명령어와 친해지기
- Git 필수 개념 집고 넘어가기
- Step by Step Git 명령어 실습 (커밋, 브랜치, 원격 저장소 등)
- 옆자리 분과 Fork하고, Pull Request
3. Git과 Github 맛깔나게 활용하기
- Github의 협업 기능 살펴보기
- Github Page
- Gitbook
4. 있어보이는 Git 활용
- .git 디렉토리 살펴보기
- Git Branch 전략
- Commit Message 활용
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubJunyoung Lee
OSS 포럼 개발자 교육 'Git/GitHub 입문하기 - 부산'에서 Git 실습에서 사용한 자료입니다. (http://onoffmix.com/event/69536)
지난 번 자료(http://www.slideshare.net/ssusercef361/git-github-62006866)는 구름 IDE를 활용해서 진행했고, 이번 자료는 Git 클라이언트를 설치해서 진행했습니다. GitHub 가입과 Git 클라이언트 설치는 강의 전 준비(http://www.slideshare.net/ssusercef361/github-git)를 참고해주세요.
1. Git과 Github
- 버전 관리?
- Git은 어쩌다 세상에 나왔나?
- Github?
2. Git 시작하기 - 실습
- 실습 준비 : Github, Goorm IDE 가입하기
- 리눅스 명령어와 친해지기
- Git 필수 개념 집고 넘어가기
- Step by Step Git 명령어 실습 (커밋, 브랜치, 원격 저장소 등)
- 옆자리 분과 Fork하고, Pull Request
3. Git과 Github 맛깔나게 활용하기
- Github의 협업 기능 살펴보기
- Github Page
- Gitbook
4. 있어보이는 Git 활용
- .git 디렉토리 살펴보기
- Git Branch 전략
- Commit Message 활용
특정 폰트가 SlideShare.net에서 보이지 않는 관계로 모두 나눔고딕으로 통일했습니다.
200718 덕성여대 생물정보학 강의 :: 바이오파이썬 covid-19Joohyun Han
200718 덕성여대 강의 - 한주현
바이오파이썬으로 분석하는 covid19
covid19 genome 서열 받아서 바이오파이썬으로 다루기
covid19를 pubmed에서 검색해서 abstract 받아오기
covid19 protein 서열 받아서 weblogo 그려보기
강연문의
한주현 kenneth.jh.han@snu.ac.kr
블로그 https://korbillgates.tistory.com
[야생의 땅: 듀랑고]의 식물 생태계를 담당하는 21세기 정원사의 OpenCL 경험담Sumin Byeon
이 발표는 넥슨의 신규 개발 게임인 듀랑고의 생태계에 대한 간략한 소개와 OpenCL 을 이용한 병렬 처리에 관한 전반적인 기술적 내용을 다룹니다. 게임 속의 세계에서 지형과 기후, 지질 조건에 맞게 여러 종류의 식물과 광물들을 알맞은 곳에 배치시키는 것이 생태계 시뮬레이터의 역할인데, 이 시뮬레이터는 방대한 양의 계산을 수행합니다. 초기에 만들어진 프로토타입은 이러한 계산을 수행하는데 30분이 넘게 걸렸지만, 병렬처리, 알고리즘 시간복잡도 개선 등의 여러가지 방법들을 통해 그 시간을 11초까지 단축시켰습니다. 구체적으로 어떤 방법들을 시도했었고, 어떤 방법들이 효과가 있었는지 여러분과 그 경험담을 공유하고자 합니다.
강의할 기회가 없어지는 아쉬움에 강의시 사용한 라즈베리파이 강의 자료를 업로드 합니다.
SBC 인 Raspberry Pi 에 OS 설치, 원격 개발 환경 구성 및 개발 환경까지 완료 할 수 있고 기본 전기전자 소자와 GPIO Header pin을 통한 연결까지 다룹니다.
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
머신러닝 및 데이터 과학 분야의 컴퓨팅 수요는 해가 갈수록 급증하고 있습니다. 이와 더불어 분산처리 기술, 데이터 파이프라이닝 및 개발 환경 스택 관리 등의 관련된 다양한 이슈들 또한 엄청나게 늘어나고 있습니다. 머신러닝 모델의 기하급수적인 모델 복잡도 증가 추세와 마찬가지로, 모델 학습을 위한 환경 관리 또한 갈수록 복잡도가 높아지는 추세입니다.
이 세션에서는 이러한 문제를 해결하기 위해 python 언어 기반의 분산처리 스케쥴링/오케스트레이션 미들웨어 플랫폼을 개발한 4년간의 과정에서 겪은 다양한 문제들에 대해 다룹니다. 2015년 컨테이너 기반의 고밀도 분산처리 플랫폼 설계 및 프로토타이핑 과정을 PyCon KR에서 발표한 이후, 실제 구현 및 오픈소스화, 안정화를 거치며 겪은 다양한 기술적/비기술적 문제들에 대한 경험을 공유합니다.
기술적으로는 최근 몇 년 간의 클러스터 플랫폼 관련 기술의 진보와 함께 탄생한 다양한 도구들과, 이러한 도구들을 python 기반으로 엮어내기 위해 사용하고 개발한 다양한 오픈소스들을 다룹니다. Python 기반의 컨테이너 스케쥴링 및 오케스트레이션 과정의 구현과, 다양한 프로그래밍 언어로 만든 SDK를 graphQL을 이용하여 연동하는 과정에서의 몇몇 유의점을 설명합니다. 아울러 python 기반의 SDK를 다양한 언어로 포팅했던 경험을 간단하게 안내합니다.
플랫폼을 개발하는 중 등장한 TensorFlow, PyTorch 등의 다양한 머신러닝 프레임워크들을 도입하며 겪은 문제와 해결 과정에 대해서도 나눕니다. 연구 분야에는 Python 2.7 기반의 프레임워크들이 여전히 많습니다. 이러한 프레임워크 및 라이브러리의 지원을 위하여 Python 2 기반의 프레임워크와 Python 3.7로 구현한 컨테이너 인터페이스를 단일 컨테이너 환경에 중복 빌드 및 상호 간섭 없이 공존시키기 위해 개발한 아이디어를 소개합니다.
마지막으로 Python 기반의 프레임워크를 개발, 배포 및 상용화 하는 과정에서 겪은 다양한 어려움을 소개합니다. 솔루션을 배포 및 보급할 때 겪는 다양한 런타임, 하드웨어 환경 및 개인 정보 보호를 위한 폐쇄망 대상의 디플로이 등에 대응하기 위하여 Python 응용프로그램을 단독 실행용으로 패키징하는 과정에서 겪은 팁들을 설명합니다. 또한 GUI 빌드 및 Python, Go 및 C++을 함께 사용한 드라이버 가상화 레이어 개발 등의 내용도 살짝 다룹니다.
이 슬라이드는 PyCon KR 2019의 발표 슬라이드입니다. ( https://www.pycon.kr/program/talk-detail?id=138 )
Softbox Raspberry pi education kit development environment setting
이글은 라즈베리 파이에 입문하여 처음 사용하려는 사용자를 위해 작성하였다.
보통 개발을 하든, 무엇인가 하려고 할때 환경을 구축하는것은 까다롭고 힘든 일이다. 그 과정이 단순하고, 쉬울 경우 작업 속도와 성과는 잘 나올 수 있다. 처음 라즈베리 파이를 구입하여 개발환경을 구축하기까지 약간은 번거롭고 힘이 든 과정을 알기 쉽게 설명하려 한다. 문의사항이나 잘 안되는 것은 언제든 답글에 남겨주기 바란다. This article was written for users who want to start using raspberry pi.
It is difficult and difficult to build an environment when you are usually developing or trying to do something. If the process is simple and easy, the speed and performance of the work can be good. I will try to explain the process of purchasing raspberry pie for the first time and building a development environment. If you have any questions or comments, please leave them in a reply.
이 발표는 [야생의 땅: 듀랑고]의 지형 배포 시스템과 생태계 시뮬레이션 자동화 시스템에 대한 이야기를 다룹니다. 듀랑고의 각 섬은 크기와 지형, 기후 조건이 다양하고 섬의 개수가 많아서 수동으로 관리하는 것은 사실상 불가능합니다. 몇번의 사내 테스트와 베타 테스트를 거치면서 이러한 문제를 해결해주는 자동화된 도구의 필요성이 절실해졌고, 작년에 NDC에서 발표했던 생태계 시뮬레이터와 Docker, 그리고 아마존 웹서비스(AWS)를 이용하여 수많은 섬들을 자동으로 생성하고 관리하는 자동화 시스템을 구축하게 되었습니다. 그 과정에서 했던 고민들, 기존의 애플리케이션을 "Dockerizing" 했던 경험, AWS의 각 서비스들을 적절히 활용했던 이야기, AWS의 각 지역별 요금이 상이하다는 점을 이용해서 비용을 절감한 사례, 그리고 자동화 시스템의 문제점과 앞으로의 방향에 대해서 이야기 할 계획입니다.
Similar to 리얼리눅스 제 1 회 세미나: "리눅스, 제대로 알고 코딩하자!" (20)
1. " 리눅스, 제대로 알고 코딩하자 "
2019년 9월 5일(목) 오후 8시 ~ 10시
리얼리눅스 강의장(강남) http://kko.to/SxNc-4xjH
Real Linux 교육세미나 제 1 회
1 리눅스 커널도 C 프로그램 이다 PM 08:00 ~ 08:30 (30분)
2 Pagefault는 왜 발생할까 ? "a=b;의 진실" PM 08:30 ~ 08:55 (25분)
3 휴식 PM 08:55 ~ 09:05 (10분)
4 리얼 리눅스 교육과정 소개 PM 09:05 ~ 09:15 (10분)
5
리눅스 커널과 나의 서버 프로그램의
관계 및 성능에 미치는 영향
PM 09:15 ~ 09:35 (20분)
6 옆집 아저씨 컨테이너가 죽은 이유 PM 09:35 ~ 10:00 (25분)
8. 리눅스 커널도 C 프로그램이다.
OS 가 하는일 ?
(1) 사용자 application 관리
(2)
9. 리눅스 커널도 C 프로그램이다.
OS 가 하는일 ?
(1) 사용자 application 관리
(2) HW 자원관리 (cpu, RAM, disk 등)
10. 리눅스 커널도 C 프로그램이다.
OS 의 구성
- Core 부분:
- I/O 처리:
- 기타:
11. 리눅스 커널도 C 프로그램이다.
OS 의 구성
- Core 부분:
- I/O 처리:
- 기타: security, tools, sounds, ...
12. 리눅스 커널도 C 프로그램이다.
OS 의 구성
- Core 부분: PM(process management)
MM(memory management)
- I/O 처리:
- 기타: security, tools, sounds, ...
13. 리눅스 커널도 C 프로그램이다.
OS 의 구성
- Core 부분: PM(process management)
MM(memory management)
irq / exception 처리, locking
- I/O 처리:
- 기타: security, tools, sounds, ...
14. 리눅스 커널도 C 프로그램이다.
OS 의 구성
- Core 부분: PM(process management)
MM(memory management)
irq / exception 처리, locking
- I/O 처리: 네트워크
- 기타: security, tools, sounds, ...
15. 리눅스 커널도 C 프로그램이다.
OS 의 구성
- Core 부분: PM(process management)
MM(memory management)
irq / exception 처리, locking
- I/O 처리: 네트워크
스토리지 (VFS/FS/Block)
- 기타: security, tools, sounds, ...
16. 리눅스 커널도 C 프로그램이다.
OS 의 구성
- Core 부분: PM(process management)
MM(memory management)
irq / exception 처리, locking
- I/O 처리: 네트워크
스토리지 (VFS/FS/Block)
디바이스 드라이버
- 기타: security, tools, sounds, ...
17. $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
리눅스 커널(OS)소스를 받자 !
실습: 이해한 내용은 꼭 손으로 증명하자Real Linux
18. $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
리눅스 커널(OS)소스를 받자 !
실습: 이해한 내용은 꼭 손으로 증명하자
리눅스 커널 소스 저장소 URL소스 다운로드
Real Linux
19. $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ cd linux/
실습: 이해한 내용은 꼭 손으로 증명하자
리눅스 커널(OS)소스폴더로
들어가서
Real Linux
20. $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ cd linux/
리눅스 커널(OS)소스폴더로
들어가서
실습: 이해한 내용은 꼭 손으로 증명하자Real Linux
21. $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ cd linux/
$ ls
arch crypto firmware Kbuild MAINTAINERS README tools
block cscope.files fs Kconfig Makefile samples usr
certs cscope.out include kernel mm scripts virt
COPYING Documentation init lib Module.symvers security
CREDITS drivers ipc LICENSES net sound
리눅스 커널(OS) 구성을 확인하자 !
실습: 이해한 내용은 꼭 손으로 증명하자Real Linux
22. $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ cd linux/
$ ls
arch crypto firmware Kbuild MAINTAINERS README tools
block cscope.files fs Kconfig Makefile samples usr
certs cscope.out include kernel mm scripts virt
COPYING Documentation init lib Module.symvers security
CREDITS drivers ipc LICENSES net sound
실습: 이해한 내용은 꼭 손으로 증명하자
리눅스 커널(OS) 구성을 확인하자 !
Real Linux
23. $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ cd linux/
$ ls
arch crypto firmware Kbuild MAINTAINERS README tools
block cscope.files fs Kconfig Makefile samples usr
certs cscope.out include kernel mm scripts virt
COPYING Documentation init lib Module.symvers security
CREDITS drivers ipc LICENSES net sound
실습: 이해한 내용은 꼭 손으로 증명하자
리눅스 커널(OS) 구성을 확인하자 !
Real Linux
24. $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ cd linux/
$ ls
arch crypto firmware Kbuild MAINTAINERS README tools
block cscope.files fs Kconfig Makefile samples usr
certs cscope.out include kernel mm scripts virt
COPYING Documentation init lib Module.symvers security
CREDITS drivers ipc LICENSES net sound
$ make -j8
실습: 이해한 내용은 꼭 손으로 증명하자Real Linux
리눅스 커널(OS) 소스 컴파일 해놓고
25. $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ cd linux/
$ ls
arch crypto firmware Kbuild MAINTAINERS README tools
block cscope.files fs Kconfig Makefile samples usr
certs cscope.out include kernel mm scripts virt
COPYING Documentation init lib Module.symvers security
CREDITS drivers ipc LICENSES net sound
$ make -j8
실습: 이해한 내용은 꼭 손으로 증명하자
리눅스 커널(OS) 소스 컴파일 해놓고
Real Linux
26. $ cd ~/
$ vim hello.c
$ cat hello.c
#include <stdio.h>
void main()
{
printf("hellon");
}
실습: 이해한 내용은 꼭 손으로 증명하자
간단한 C소스코드 만들어서
Real Linux
27. $ cd ~/
$ vim hello.c
$ cat hello.c
#include <stdio.h>
void main()
{
printf("hellon");
}
실습: 이해한 내용은 꼭 손으로 증명하자
간단한 C소스코드 만들어서
Real Linux
28. $ cd ~/
$ vim hello.c
$ cat hello.c
#include <stdio.h>
void main()
{
printf("hellon");
}
$ file hello.c
hello.c: C source, ASCII text
실습: 이해한 내용은 꼭 손으로 증명하자
간단한 C소스코드 만들어서 확인
Real Linux
29. $ cd ~/
$ vim hello.c
$ cat hello.c
#include <stdio.h>
void main()
{
printf("hellon");
}
$ file hello.c
hello.c: C source, ASCII text
실습: 이해한 내용은 꼭 손으로 증명하자
간단한 C소스코드 만들어서 확인
Real Linux
30. $ file hello.c
hello.c: C source, ASCII text
$ gcc hello.c
$ ./a.out
실습: 이해한 내용은 꼭 손으로 증명하자
hello.c 컴파일해서 실행파일 a.out 실행
Real Linux
31. $ file hello.c
hello.c: C source, ASCII text
$ gcc hello.c
$ ./a.out
hello
실습: 이해한 내용은 꼭 손으로 증명하자
hello.c 컴파일해서 실행파일 a.out 실행
Real Linux
32. $ file hello.c
hello.c: C source, ASCII text
$ gcc hello.c
$ ./a.out
$ file a.out
실습: 이해한 내용은 꼭 손으로 증명하자
컴파일한 C프로그램 바이너리(a.out)를 확인
Real Linux
33. $ file hello.c
hello.c: C source, ASCII text
$ gcc hello.c
$ ./a.out
$ file a.out
a.out: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/l, for GNU/Linux 3.2.0,
BuildID[sha1]=a443aa2712c9802b2f193b4678fffcdc2a7557e4, not stripped
실습: 이해한 내용은 꼭 손으로 증명하자
컴파일한 C프로그램 바이너리(a.out)를 확인
Real Linux
34. $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ cd linux/
$ file kernel/fork.c
kernel/fork.c: C source, ASCII text
실습: 이해한 내용은 꼭 손으로 증명하자
리눅스 커널(OS)의 C 소스파일 확인
Real Linux
35. $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ cd linux/
$ file kernel/fork.c
kernel/fork.c: C source, ASCII text
실습: 이해한 내용은 꼭 손으로 증명하자
리눅스 커널(OS)의 C 소스파일 확인
Real Linux
36. $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ cd linux/
$ file kernel/fork.c
kernel/fork.c: C source, ASCII text
$ file vmlinux
실습: 이해한 내용은 꼭 손으로 증명하자
컴파일한 바이너리(vmlinux)의 C 소스 파일확인
Real Linux
37. $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ cd linux/
$ file kernel/fork.c
kernel/fork.c: C source, ASCII text
$ file vmlinux
vmlinux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically
linked, BuildID[sha1]=5738f667cb6387e77a4439dc66c2ae6c5a4cb24f, with
debug_info, not stripped
실습: 이해한 내용은 꼭 손으로 증명하자
컴파일한 바이너리(vmlinux)의 C 소스 파일확인
Real Linux
53. Chrome
vim
slack
메모리 사용할 친구들
page
page
page
page
page
page
page
메모리 여러조각으로 나눠서 관리
가상 메모리 조각만 주고 시작
page
page
page
page
page
page
page
page
page
가상주소 물리주소
0x555b7 NULL
... ...
가상주소 물리주소
0x7f788 NULL
... ...
가상주소 물리주소
0x7f788 NULL
... ...
Chrome의 메모리 조각 관리 테이블
Vim의 메모리 조각 관리 테이블
Slack의 메모리 조각 관리 테이블
54. Chrome
vim
slack
메모리 사용할 친구들
page
page
page
page
page
page
page
메모리 여러조각으로 나눠서 관리
가상 메모리 조각만 주고 시작
page
page
page
page
page
page
page
page
page
가상주소 물리주소
0x555b7 NULL
... ...
가상주소 물리주소
0x7f788 NULL
... ...
가상주소 물리주소
0x7f788 NULL
... ...
Chrome의 메모리 조각 관리 테이블
Vim의 메모리 조각 관리 테이블
Slack의 메모리 조각 관리 테이블
실제로 사용!
55. Chrome
vim
slack
메모리 사용할 친구들
page
page
page
page
page
page
page
메모리 여러조각으로 나눠서 관리
가상 메모리 조각만 주고 시작
page
page
page
page
page
page
page
page
page
가상주소 물리주소
0x555b7 NULL
... ...
가상주소 물리주소
0x7f788 NULL
... ...
가상주소 물리주소
0x7f788 NULL
... ...
Chrome의 메모리 조각 관리 테이블
Vim의 메모리 조각 관리 테이블
Slack의 메모리 조각 관리 테이블
실제로 사용!
코드
.text
a = b;
56. Chrome
vim
slack
메모리 사용할 친구들
page
page
page
page
page
page
page
메모리 여러조각으로 나눠서 관리
가상 메모리 조각만 주고 시작
page
page
page
page
page
page
page
page
page
가상주소 물리주소
0x555b7 NULL
... ...
가상주소 물리주소
0x7f788 NULL
... ...
가상주소 물리주소
0x7f788 NULL
... ...
Chrome의 메모리 조각 관리 테이블
Vim의 메모리 조각 관리 테이블
Slack의 메모리 조각 관리 테이블
실제로 사용!
a = b;
코드
.text
57. Chrome
vim
slack
메모리 사용할 친구들
page
page
page
page
page
page
page
메모리 여러조각으로 나눠서 관리
가상 메모리 조각만 주고 시작
page
page
page
page
page
page
page
page
page
가상주소 물리주소
0x555b7 NULL
... ...
가상주소 물리주소
0x7f788 NULL
... ...
가상주소 물리주소
0x7f788 NULL
... ...
Chrome의 메모리 조각 관리 테이블
Vim의 메모리 조각 관리 테이블
Slack의 메모리 조각 관리 테이블
실제로 사용!
a = b;
코드
.text
58. Chrome
vim
slack
메모리 사용할 친구들
page
page
page
page
page
page
page
메모리 여러조각으로 나눠서 관리
가상 메모리 조각만 주고 시작
page
page
page
page
page
page
page
page
page
가상주소 물리주소
0x555b7 NULL
... ...
가상주소 물리주소
0x7f788 NULL
... ...
가상주소 물리주소
0x7f788 NULL
... ...
Chrome의 메모리 조각 관리 테이블
Vim의 메모리 조각 관리 테이블
Slack의 메모리 조각 관리 테이블
실제로 사용!
a = b;
코드
.text
페이지
폴트 !
59. $ sudo su
$ cd /sys/kernel/debug/tracing
실습: 이해한 내용은 꼭 손으로 증명하자
sudo 권한으로 커널 tracing 폴더로 이동
Real Linux
60. $ sudo su
$ cd /sys/kernel/debug/tracing
실습: 이해한 내용은 꼭 손으로 증명하자
sudo 권한으로 커널 tracing 폴더로 이동
Real Linux
61. $ sudo su
$ cd /sys/kernel/debug/tracing
$ echo 1 > events/exceptions/page_fault_user/enable
실습: 이해한 내용은 꼭 손으로 증명하자
pagefault 이벤트 추적 tracing 켜기(On)
Real Linux
62. $ sudo su
$ cd /sys/kernel/debug/tracing
$ echo 1 > events/exceptions/page_fault_user/enable
실습: 이해한 내용은 꼭 손으로 증명하자
pagefault 이벤트 추적 tracing 켜기(On)
Real Linux
63. $ sudo su
$ cd /sys/kernel/debug/tracing
$ echo 1 > events/exceptions/page_fault_user/enable
$ cat trace_pipe
slack-2296 [002] d... 97297.874783: page_fault_user: address=0x187d0de09000 ip=0x3d035249316c error_code=0x6
chrome-19660 [001] d... 97297.875595: page_fault_user: address=0x1f77e6754000 ip=0x7fdb53e1cb1f error_code=0x6
...
Gitter-1868 [006] d... 97297.975040: page_fault_user: address=0x7f6801054200 ip=0x7f6801054200 error_code=0x14
chrome-19660 [007] d... 97297.976004: page_fault_user: address=0x1f77e6754000 ip=0x7fdb53e1cb1f error_code=0x6
...
실습: 이해한 내용은 꼭 손으로 증명하자
지금 내 리눅스에서 발생하는
페이지 폴트(pagefault) 확인
Real Linux
64. $ sudo su
$ cd /sys/kernel/debug/tracing
$ echo 1 > events/exceptions/page_fault_user/enable
$ cat trace_pipe
slack-2296 [002] d... 97297.874783: page_fault_user: address=0x187d0de09000 ip=0x3d035249316c error_code=0x6
chrome-19660 [001] d... 97297.875595: page_fault_user: address=0x1f77e6754000 ip=0x7fdb53e1cb1f error_code=0x6
...
Gitter-1868 [006] d... 97297.975040: page_fault_user: address=0x7f6801054200 ip=0x7f6801054200 error_code=0x14
chrome-19660 [007] d... 97297.976004: page_fault_user: address=0x1f77e6754000 ip=0x7fdb53e1cb1f error_code=0x6
...
실습: 이해한 내용은 꼭 손으로 증명하자
지금 내 리눅스에서 발생하는
페이지 폴트(pagefault) 확인
Real Linux
65. $ sudo su
$ cd /sys/kernel/debug/tracing
$ echo 1 > events/exceptions/page_fault_user/enable
$ cat trace_pipe
slack-2296 [002] d... 97297.874783: page_fault_user: address=0x187d0de09000 ip=0x3d035249316c error_code=0x6
chrome-19660 [001] d... 97297.875595: page_fault_user: address=0x1f77e6754000 ip=0x7fdb53e1cb1f error_code=0x6
...
Gitter-1868 [006] d... 97297.975040: page_fault_user: address=0x7f6801054200 ip=0x7f6801054200 error_code=0x14
chrome-19660 [007] d... 97297.976004: page_fault_user: address=0x1f77e6754000 ip=0x7fdb53e1cb1f error_code=0x6
...
실습: 이해한 내용은 꼭 손으로 증명하자
지금 내 리눅스에서 발생하는
페이지 폴트(pagefault) 확인
Real Linux
66. $ cd git/linux
$ cat arch/x86/include/asm/traps.h
...
/*
* Page fault error code bits:
*
* bit 0 == 0: no page found 1: protection fault
* bit 1 == 0: read access 1: write access
* bit 2 == 0: kernel-mode access 1: user-mode access
* bit 3 == 1: use of reserved bit detected
* bit 4 == 1: fault was an instruction fetch
* bit 5 == 1: protection keys block access
*/
...
실습: 이해한 내용은 꼭 손으로 증명하자
0x6 == 000110
0x14 == 010100
Real Linux
67. $ cd git/linux
$ cat arch/x86/include/asm/traps.h
...
/*
* Page fault error code bits:
*
* bit 0 == 0: no page found 1: protection fault
* bit 1 == 0: read access 1: write access
* bit 2 == 0: kernel-mode access 1: user-mode access
* bit 3 == 1: use of reserved bit detected
* bit 4 == 1: fault was an instruction fetch
* bit 5 == 1: protection keys block access
*/
...
실습: 이해한 내용은 꼭 손으로 증명하자
0x6 == 000110
0x14 == 010100
Real Linux
68. $ cd git/linux
$ cat arch/x86/include/asm/traps.h
...
/*
* Page fault error code bits:
*
* bit 0 == 0: no page found 1: protection fault
* bit 1 == 0: read access 1: write access
* bit 2 == 0: kernel-mode access 1: user-mode access
* bit 3 == 1: use of reserved bit detected
* bit 4 == 1: fault was an instruction fetch
* bit 5 == 1: protection keys block access
*/
...
실습: 이해한 내용은 꼭 손으로 증명하자
0x6 == 000110
0x14 == 010100
Real Linux
69. $ cd git/linux
$ cat arch/x86/include/asm/traps.h
...
/*
* Page fault error code bits:
*
* bit 0 == 0: no page found 1: protection fault
* bit 1 == 0: read access 1: write access
* bit 2 == 0: kernel-mode access 1: user-mode access
* bit 3 == 1: use of reserved bit detected
* bit 4 == 1: fault was an instruction fetch
* bit 5 == 1: protection keys block access
*/
...
실습: 이해한 내용은 꼭 손으로 증명하자
0x6 == 000110
0x14 == 010100
Real Linux
70. $ cd git/linux
$ cat arch/x86/include/asm/traps.h
...
/*
* Page fault error code bits:
*
* bit 0 == 0: no page found 1: protection fault
* bit 1 == 0: read access 1: write access
* bit 2 == 0: kernel-mode access 1: user-mode access
* bit 3 == 1: use of reserved bit detected
* bit 4 == 1: fault was an instruction fetch
* bit 5 == 1: protection keys block access
*/
...
실습: 이해한 내용은 꼭 손으로 증명하자
0x6 == 000110
0x14 == 010100
Real Linux
71. $ make menuconfig
# CONFIG_X86_PTDUMP=y 설정하기
# Kernel hacking --->
# Export kernel pagetable layout to userspace via debugfs
실습: 이해한 내용은 꼭 손으로 증명하자
지금 내 리눅스에서
메모리 조각 관리 테이블인
페이지 테이블(pagetable) 확인
Real Linux
72. $ make menuconfig
# CONFIG_X86_PTDUMP=y 설정하기
# Kernel hacking --->
# Export kernel pagetable layout to userspace via debugfs
$ cd /sys/kernel/debug/page_tables/
실습: 이해한 내용은 꼭 손으로 증명하자Real Linux
지금 내 리눅스에서
메모리 조각 관리 테이블인
페이지 테이블(pagetable) 확인
73. $ make menuconfig
# CONFIG_X86_PTDUMP=y 설정하기
# Kernel hacking --->
# Export kernel pagetable layout to userspace via debugfs
$ cd /sys/kernel/debug/page_tables/
$ cat current_user | grep "--" | nl
1 ---[ User Space ]---
2 ---[ Kernel Space ]---
3 ---[ LDT remap ]---
4 ---[ Low Kernel Mapping ]---
5 ---[ vmalloc() Area ]---
...
11 ---[ Modules ]---
12 ---[ End Modules ]---
13 ---[ Fixmap Area ]---
실습: 이해한 내용은 꼭 손으로 증명하자Real Linux
지금 내 리눅스에서
메모리 조각 관리 테이블인
페이지 테이블(pagetable) 확인
74. $ make menuconfig
# CONFIG_X86_PTDUMP=y 설정하기
# Kernel hacking --->
# Export kernel pagetable layout to userspace via debugfs
$ cd /sys/kernel/debug/page_tables/
$ cat current_user | less
---[ User Space ]---
0x0000000000000000-0x0000560000000000 86T pgd
0x0000560000000000-0x0000562580000000 150G pud
0x0000562580000000-0x00005625bc000000 960M pmd
0x00005625bc000000-0x00005625bc038000 224K pte
0x00005625bc038000-0x00005625bc040000 32K USR ro x pte
...
실습: 이해한 내용은 꼭 손으로 증명하자Real Linux
81. 교육과정 소개Real Linux
컴퓨터 공학 기본기, SW 동작원리
모든 개발자의 필수 기본내공
OS 동작원리, 리눅스 기본기
1~2달 만 투자하자 !
82. 과정명 수준 기간 시간 정원
리눅스 노베이스 입문 4주과정: 매주 화,목 18:30-20:30 (2시간) 30명
리눅스 SW 기본 초중급 4주과정: 매주 화,목 20:45-22:45 (2시간) 30명
리눅스 OS 중급A,B 중급 4주과정: 매주 토 14:00-18:00 (4시간) 30명
리얼 Git 중고급 4주과정: 매주 월,수 19:30-22:30 (3시간) 30명
Real Linux 교육과정
* 개인노트북 준비물 필수
* OS 중급반A반, B반은 2달에 1회씩 개강합니다.
* 강남역 3,4번 출구 3분거리 (테헤란로4길 38-5 혜정빌딩 4층 리얼리눅스
강의장)
문의 help@reallinux.co.kr | 카카오톡: 리얼리눅스 | 자세한정보: http://www.reallinux.co.kr
새로 쌓는 진짜 SW 기본기
83. 과정명 수준 기간 시간 정원
리눅스 노베이스 입문 4주과정: 매주 화,목 18:30-20:30 (2시간) 30명
리눅스 SW 기본 초중급 4주과정: 매주 화,목 20:45-22:45 (2시간) 30명
리눅스 OS 중급A,B 중급 4주과정: 매주 토 14:00-18:00 (4시간) 30명
리얼 Git 중고급 4주과정: 매주 월,수 19:30-22:30 (3시간) 30명
Real Linux 교육과정
* 개인노트북 준비물 필수
* OS 중급반A반, B반은 2달에 1회씩 개강합니다.
* 강남역 3,4번 출구 3분거리 (테헤란로4길 38-5 혜정빌딩 4층 리얼리눅스
강의장)
문의 help@reallinux.co.kr | 카카오톡: 리얼리눅스 | 자세한정보: http://www.reallinux.co.kr
새로 쌓는 진짜 SW 기본기
수강상담 & 문의
언제든 연락주세요!
84. 리눅스 커널과 나의 서버프로그램의 관계 및 성능에 미치는
영향 ?
Server
Linux
nginx DB 1. Network I/O (ex. http request ..)
2. Disk I/O (ex. DB, Big file ..)
...
85. VFS Layer
Individual Filesystem Layer
Block Layer
System call Interface
GNU C Library user space
kernel space
User Applications
86. VFS Layer
Individual Filesystem Layer
Block Layer
System call Interface
GNU C Library user space
kernel space
User Applications
93. 연이어지는 call-graph 상에서의 latency가 아니라
그냥 call count 가 많아서 생기는 latency ?
readahead 사이즈의 이해와 성능영향 조사
94. $ sudo su
# 새로운 tracepoint 추가하기
$ perf probe --add submit_bio
$ perf probe --add generic_file_read_iter
# 위 두가지 함수의 call count 추적하기
$ perf stat -e probe:submit_bio,probe:generic_file_read_iter
실습: 이해한 내용은 꼭 손으로 증명하자
submit_bio와 generic_file_read_iter
이벤트 추적 켜기(On)
Real Linux
95. $ sudo su
# man proc 참고: drop_caches 메모리상 disk cache drop
$ echo 3 > /proc/sys/vm/drop_caches
$ cd ~/git/linux
# read 연산 테스트
$ tree
실습: 이해한 내용은 꼭 손으로 증명하자
커널소스 읽기(read) 연산 테스트
Real Linux
96. $ sudo blockdev --getra /dev/sda
# readahead(미리읽기) 사이즈 변경
$ sudo blockdev --setra 8192 /dev/sda
$ echo 3 > /proc/sys/vm/drop_caches
$ cd ~/git/linux
# read 연산 테스트
$ tree
실습: 이해한 내용은 꼭 손으로 증명하자
readahead 사이즈 변경후 추적결과 비교
Real Linux
100. 옆집 아저씨 컨테이너가 죽은 이유
Container 란 ?
(1) namespace:
(2)
chroot
101. 옆집 아저씨 컨테이너가 죽은 이유
Container 란 ?
(1) namespace: 나만의 공간
우리만의 공간
(2)
chroot
102. 옆집 아저씨 컨테이너가 죽은 이유
Container 란 ?
(1) namespace: 나만의 공간
우리만의 공간
(2) cgroup:
chroot
103. 옆집 아저씨 컨테이너가 죽은 이유
Container 란 ?
(1) namespace: 나만의 공간
우리만의 공간
(2) cgroup: 나만의 자원
우리만의 자원
chroot
104. 옆집 아저씨 컨테이너가 죽은 이유
Container 란 ?
(1) namespace: 나만의 공간
우리만의 공간
(2) cgroup: 나만의 자원
우리만의 자원
chroot
105. 옆집 아저씨 컨테이너가 죽은 이유
Container 란 ?
(1) namespace: 나만의 공간
우리만의 공간
(2) cgroup: 나만의 자원
우리만의 자원나만의
Linux
chroot
106. 옆집 아저씨 컨테이너가 죽은 이유
Container 란 ?
(1) namespace: 나만의 공간
우리만의 공간
(2) cgroup: 나만의 자원
우리만의 자원나만의 Linux
우리만의 Linux
chroot
107. 옆집 아저씨 컨테이너가 죽은 이유
Container 란 ?
Server
Host OS
Container Container Container
App A App B
App C
App D
나만의 Linux
우리만의 Linux
108. 옆집 아저씨 컨테이너가 죽은 이유
Container 란 ?
Server
Host OS
Container Container Container
App A App B
App C
App D
나만의 Linux
우리만의 Linux
109. 옆집 아저씨 컨테이너가 죽은 이유
Container 란 ?
Server
Host OS
Container Container Container
App A App B
App C
App D
나만의 Linux
우리만의 Linux
110. 옆집 아저씨 컨테이너가 죽은 이유
Container 란 ?
Server
Host OS
Container Container Container
App A App B
App C
App D
Killed
나만의 Linux
우리만의 Linux
111. 옆집 아저씨 컨테이너가 죽은 이유
Server
Host OS
Container Container Container
App A App B
App C
App D
Killed
1. 컨테이너의 커맨드가 실패한 경우
2. 컨테이너의 커맨드가 존재하지 않는 경우
3. 컨테이너가 SIGKILL 및 SIGTERM 을 받은 경우
...
112. $ ls /
$ wget https://github.com/ericchiang/containers-from-scratch/releases/download/v0.1.0/rootfs.tar.gz
$ ls rootfs/
# 나만의 root filesystem 공간 만들기
$ sudo chroot rootfs /bin/bash
# 실제 root filesystem / 와 현재 / 비교하기
$ ls /
실습: 이해한 내용은 꼭 손으로 증명하자Real Linux
chroot 실습: 나만의 root filesystem 공간
113. $ sudo chroot rootfs /bin/bash
# chroot 이후의 ps 와
$ ps aux
$ sudo unshare -p -f --mount-proc=rootfs/proc chroot rootfs /bin/bash
# PID namespace 이후의 ps 의 결과 비교하기
$ ps aux
실습: 이해한 내용은 꼭 손으로 증명하자Real Linux
PID namespace 실습: 나만의 PID 공간
114. $ sudo su
$ mkdir /sys/fs/cgroup/memory/test
# 100MB 제한
$ echo 100000000 > /sys/fs/cgroup/memory/test/memory.limit_in_bytes
$ echo 0 > /sys/fs/cgroup/memory/test/memory.swappiness
실습: 이해한 내용은 꼭 손으로 증명하자Real Linux
cgroup 실습: 나만의 memory 자원
115. $ echo $$ > /sys/fs/cgroup/memory/test/tasks
$ cat mem_eater.py
f = open("/dev/urandom", "r")
data = ""
i=0
while True:
data += f.read(10000000) # 10mb
i += 1
print "%dmb" % (i*10,)
$ python mem_eater.py
실습: 이해한 내용은 꼭 손으로 증명하자Real Linux
cgroup 실습: 프로세스 죽는 과정실습
116. $ cd /sys/kernel/debug/tracing
$ echo 1 > events/oom/enable
$ echo 1 > options/stacktrace
$ cat trace_pipe
# 다른 터미널로 예제 python 실행하고 OOM으로 죽는 과정 trace_pipe로 추적하기
$ python mem_eater.py
실습: 이해한 내용은 꼭 손으로 증명하자Real Linux
cgroup 실습: OOM으로 죽는 과정추적
117. “ 리눅스는 더이상 어두운 Hidden box가 아닙니다. ”
실용적인 커널 Tracing 실습교육과 함께 쉽고 빠르게
(1) 실제 동작과정을 추적해보고
(2) 나의 프로그램과 리눅스 커널과의 관계도 분석하고
(3) 성능에 끼치는 영향까지 이해합니다.
Thanks,
리얼리눅스
http://RealLinux.co.kr