Skip to content

Latest commit

ย 

History

History
158 lines (127 loc) ยท 5.86 KB

record_day3.md

File metadata and controls

158 lines (127 loc) ยท 5.86 KB

uftrace 3์ฃผ์ฐจ

Linux Kernel ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ์ต์ˆ™ํ•ด ์ ธ์•ผ ํ• ๊ฒƒ๋“ค.

์‚ฌ๋ก€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์‚ดํŽด๋ณด๊ธฐ virtual file system์œผ๋กœ ๋˜์–ด์žˆ์–ด์„œ ์ƒํ™ฉ์—๋”ฐ๋ผ ๋‹ค

์˜๋„ : contribution ๊บผ๋ฆฌ๋ฅผ ์ฐพ์•„์•ผ ํ•จ ์ด๊ฒƒ์„ ์œ ๋„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด๋ฒˆ ์‹œ๊ฐ„์„ ๊ฐ€์ง

๋ฆฌ๋ˆ…์Šค ๋“œ๋ผ์ด๋ธŒ์— ์ปจํŠธ๋ฆฌ๋ทฐ์…˜์„ ํ•˜๋Š” ์‚ฌ๋žŒ์ž„ // ์ฐจ๋Ÿ‰์šฉ AVN(์นด์˜ค๋””์˜ค ๋“ฑ)์˜ ๋ฆฌ๋ˆ…์Šค ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ - ๊น€์„ธ์ค‘(linux contribution 1๋…„์ฐจ)

PPT ๋งŒ๋“ค๋•Œ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ•จ // ๋ชจ์ธ ์‚ฌ๋žŒ๋“ค์ด ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•จ

์ปค๋„์ชฝ contribution ๋‚ด์šฉ๋“ค <- ์ด๋ก ์ ์ธ ๋‚ด์šฉ๋“ค์ด ์—†์Œ

Kernal Contribution ํ•˜๊ฒŒ๋œ ์ด์œ  : ํšŒ์‚ฌ์ƒํ™œ ํ•˜๋ฉด์„œ ์ž๊ดด๊ฐ(๋ฐœ๊ฐ€๋ฒ—์€ ์ƒํƒœ์—์„œ ๋ฐ–์— ๋‚˜๊ฐ”์„ ๋•Œ ๋‚˜๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๋ช…ํ•  ๊ฒƒ์ธ๊ฐ€?)

์ปค๋„์ชฝ git์ด ์–ด๋–ป๊ฒŒ ์šด์˜๋˜๋Š”๊ฐ€?

์ต์ˆ™ํ•ด์ ธ์•ผ ํ•  ๊ฒƒ๋“ค #1

Vi / Emacs ๋“ฑ์˜ Command ํ™˜๊ฒฝ && terminal์— default๋กœ ์ต์ˆ™ํ•ด ์ ธ์•ผ ํ•จ

์ต์ˆ™ํ•ด์•ผ์ ธ ํ•  ๊ฒƒ๋“ค #2

git commit --ammend // version2๋‚˜ ๋ญ”๊ฐ€ ์ถ”๊ฐ€ํ•ด์•ผ ํ• 
git apply ~/where/to/*.patch // index์ชฝ์— diff
git format-patch -1 -o /where/you/want // ptachํŒŒ์ผ์— ๊ดœํ•ด์„œ ์ผ์ผ์ด ์†์œผ๋กœ
git send-email --annotate --cover-letter -to @gmail.com *.patch // --cover-letter : 0๋ฒˆํŒจ์น˜๋ฅผ ๋งŒ๋“ค์–ด์คŒ, ์‹œ๋ฆฌ์ฆˆ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์„ค๋ช…์„ ์ ์Œ
git send-email --to-cmd ./scripts/get_maintainer.pl /where/to/*.patch // --to-cmd ์‰˜์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ์ž๋™์œผ๋กœ ๋ณด๋‚ด์คŒ

github์™€ ๋‹ค๋ฅด๊ฒŒ ์ผ์ผ์ด ๋‹ค ์†์œผ๋กœ ํ•จ

#3 Linux Kernel Mailing list

linux newbie๋ฅผ ๋ณด๋ฉด ํ•˜๋ฃจ์— ๋ฉ”์ผ์ด ์ˆ˜์ฒœ๊ฐœ์”ฉ ์Ÿ์•„์ง

  • linus torvalds shut up <- patch๋ฅผ ๋„ฃ๊ณ  ์†Œ๋ฆฌ๋ฅผ ์•ˆ๋‚˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊น€

    • lkml/2013/7/15/329์ด๊ฑฐ ๋ฒˆ์—ญํ•ด๋ณด์ž
  • git์— ํŒจ์น˜ ๋ฐ˜์˜ํ•œ๋Š ๋ฐฉ๋ฒ• -> git am

#4 ์˜์–ด

  • ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ž‘์„ฑํ•œ commit๋“ค์ด ์ข‹์€ reference

#5 ํŒจ์น˜๋งŒ๋“ค๊ธฐ

  • ํŒจ์น˜๋ฅผ ๋ณด๋ƒˆ๋Š”๋ฐ ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์„ ์ง€์ ๋ฐ›์€ ๊ฒฝ์šฐ -> V[number]
  • ํŒจ์น˜๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ์‹ ๊ทœ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
    • RFC(Requests for comments) prefix
    • ๊ฐ€๋”์€ ์ผ๋‹จ ํŒจ์น˜๋Š” ๋งŒ๋“ค์–ด์„œ ์ˆ˜์ •๋˜๋Š”๊ฑด ํ™•์ธํ–ˆ๋Š”๋ฐ, ๋‚˜๋„ ํ™•์‹œ๋‹ ์—†๋„ค.
  • Version์— ๋”ฐ๋ฅธ patch๋‚ด์šฉ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ

์‹ค์Šต & Q&A

๊ตฌ๊ธ€๋ฆผ -> ๊น€๋‚จ์˜๋‹˜ blog : linux patch

์˜ค๋Š˜ ํ•  ์‹ค์Šต : ์˜ˆ์™ธ์ผ€์ด์Šค

  • naming -> subsystem ex) usb: gadget: acm: Add commnet

  • coding rule <- ๊ฒ€์‚ฌํ•˜๋Š” scriptํŒŒ์ผ์ด ๋”ฐ๋กœ ์กด์žฌํ•จ

  • get_maintainer.pl <- ๋ณด๋‚ด์•ผํ•  ๋ฉ”์ธํ…Œ์ด๋„ˆ <- ๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ ์ž˜ ์•ˆํ•จ ๊ทธ๋ƒฅ ๋ฉ”์ผ๋ง๋ฆฌ์ŠคํŠธ๋กœ ๋ณด๋ƒ„

  • ๊ณต์šฉ์ฒด, ํŒŒ์ผ์‹œ์Šคํ…œ, ๋™๊ธฐํ™” ๋“ฑ๋“ฑ ๋„ˆ๋ฌด ๋งŽ์€ ์ง„์ž…์žฅ๋ฒฝ.. <- ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋งŽ์ด ํ•ด๋ด๋ผ! / linux์˜ sysnode๋ฅผ ์žก์•„๋‹ค๊ฐ€ udev, ์†Œ์ผ“ํ†ต์‹  ๋“ฑ๋“ฑ์˜ ์œ ์ €ํ”„๋กœ๊ทธ๋žจ

  • ๋งˆ์šฐ์Šค๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ - ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ// ์ด๊ฒŒ ์ •๋ง์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ -> ์›Œํฌ ํ

  • lsusb, ps ๋“ฑ๋“ฑ ์ด ๋ชจ๋‘ system programming์ž„

  • linux device driver๋Š” ์›Œ๋‚™ ๋งŽ์€ ์˜ˆ์ œ๋“ค์ด ์ด๋ฏธ ๊ณต๊ฐœ๋˜์–ด ์žˆ์Œ

  • uftrace๋กœ ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋”ฐ๋ผ๊ฐ€๋ณด๊ธฐ <- ์ด๋Ÿฐ๋ถ€๋ถ„์—์„œ uftrace๊ฐ€ ๊ดœ์ฐฎ์Œ, ์‹œ์ž‘์  ์žก๊ธฐ๋„ ์ข‹์Œ

  • linux kernal ๊ณต๋ถ€๋ฅผ ํ•  ๋•Œ์—๋Š” ๊ธธ์„ ์žƒ์œผ๋ฉด ์•ˆ๋จ(์ž์‹ ์˜ ์ฃผ์ œ๋ฅผ ํ™•์‹คํ•˜๊ฒŒ)

  • lsmod | grep

  • insmod

  • sudo insmod work.ko wq_type=1// ์ธ์ž๊ฐ’์„ ์ค„ ์ˆ˜ ์žˆ์Œ

  • reference counter

์ปค๋„ ์˜ˆ์ œ ์ค‘ ๊ฐ€๋ณ๊ฒŒ ๋‹ค๊ฐ€๊ฐˆ ์ˆ˜ ์žˆ๋Š”

uftrace --force /bin/rm -f a // unlinkat()์ด ๊ฐ€์žฅ์ค‘์š” <- system core๋ฅผ ๋ถˆ๋Ÿฌ์˜ด vim src/rm.c //์—์„œ mainํ™•์ธํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— rm์ด ์žˆ๊ณ  remove.c์— rm์ด ์ •์˜๋˜์–ด์žˆ์Œ grep unlinkat uftrace user๋ฅผ ํฌ๊ธฐํ•˜๊ณ  library, kernal์€ ๋ณผ ์ˆ˜ ์žˆ์Œ df -h -T ๋ณธ์ธ root์— filesystem์ด ๋ณด

ํ•จ์ˆ˜ ํŠธ๋ ˆ์ด์‹ฑ

touch a
> sudo uftrace --force -K 20 /bin/rm -f -a # -K์˜ต์…˜์€ depth๋ฅผ ์ฃผ๋Š” ๊ฒƒ
user๋“  library๋“  kernal์ด๋“  ํ•จ์ˆ˜์˜ ์—ฐ์†์ž„
unlinkat์€ ์‹œ์Šคํ…œ์ฝœ


#include <stdio.h>

int main()
{
  printf("hello\n");
  fflush(stdout);
}

> gcc -pg hello.c
> uftrace ./a.out
> sudo uftrace -K 2 ./a.out
ํ•ด๋ณด๋ฉด sys_write();๊ฐ€ ์–ด๋””์„œ ๋ˆŒ๋ฆฌ๋Š”๊ฐ€ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ถˆ๋ฆฌ์ง€ ์•Š๋‹ค๋Š”๊ฑธ ์•Œ ์ˆ˜ ์žˆ์Œ
> sudo apt-get install silversearcher-ag // grep๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฆ„
callback์ด 2~3๊ณ„์ธต์œผ๋กœ ๋˜์–ด์žˆ์œผ๋ฉด ํž˜๋“ฌ
> ag ext4_unlink
ext4_evit_inode()
> ag "\.evict"

> ls /sys/fs // ์ด ์•„๋ž˜์—์žˆ๋Š” ํŒŒ์ผ์€ ์ผ๋ฐ˜ ํŒŒ์ผ์ด ์•„๋‹˜
> mount | grep sys
bpf -> ๋Œ๊ณ ์žˆ๋Š” ์ปค๋„์— ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ(์ƒˆ๋กœ์šด function ์ถ”๊ฐ€๊ฐ€๋Šฅ)

> bpf-tools prog Show
> ls /sys/fs/bpf/x1
์šœ๋Ÿฌ ๊ฐˆ ๋•Œ uftrace๋ฅผ ์“ฐ๋ฉด ์ง„์ž…์žฅ๋ฒฝ์„ ํ™• ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Œ

์†Œ์Šค์ฝ”๋“œ๋กœ ์ง์ ‘ ์ฐพ์•„๊ฐ€๋Š”๊ฑด ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. callback์ด ๋งŽ์„ ๋•Œ ์ฐฉ๊ฐํ•  ์ˆ˜ ์ž‡์Œ
๋ฐ˜๋ฉด uftrace๋Š” ์ˆœ์‹๊ฐ„์— ํŒŒ์•…๊ฐ€๋Šฅ
๊ทธ๋ฆฌ๊ณ uftrace๋Š” .dataํŒŒ์ผ์— ๊ทธ๋‹น์‹œ ๋ช…๋ น์–ด์™€ ์ปดํ“จํ„ฐ์ •๋ณด ๊ทธ๋ฆฌ๊ณ  ์ปค๋„์ •๋ณด๋“ฑ์„ ๋‹ด๊ณ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๊ณต์œ ํ•˜๋Š”์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์ž‡์Œ

script๊ธฐ๋Šฅ

ํ•ฉ์ˆ˜๊ฐ€ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ์‹œ์ž‘์„ ๊ธฐ๋ก ์ข…๋ฃŒํ–ˆ์„ ๋•Œ ์ข…๋ฃŒ๋ฅผ ๊ธฐ๋ก <- ์ด ๋งค์ปค๋‹ˆ์ฆ˜์ด uftrace

#include <stdio.h>

int main(){
	int n = 20;
	long i, a=0, b=1;

	for(i = 1; i < n; i ++){
		a += b;
		b = a-b;
	}

	printf("%lu\n", a);
}
#include <stdio.h>

int fibonacci(int);

int main(){
	long i, result, n=20;

	for(i = 1; i < n; i ++){
		result = fibonacci(i);
	}

	printf("%lu\n", result);
	return 0;
}

int fibonacci(int n)
{
	if(n == 0 || n == 1)
		return n;
	else
		return fibonacci(n-1)+fibonacci(n-2);
}

uftrace script uftrace record fibo_ uftrace replay uftrace record --auto-args fibo_ uftrace record -S script/count.py --auto-args fibo_ // ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋ฐ˜ํ™˜๋˜๋Š” ์‹œ์ ์„ ๋Œ์ž…ํ•˜๋Š” ์ง€์ ์—์„œ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ์— ์ด๋ฏธ ์•ฝ์†๋˜์–ด์žˆ๋Š” ํŽ‘์…˜์„ ํ˜ธ์ถœํ•ด์คŒ

jeniffer soft apm(application performance montoring system)๊ฐ™์ด ์›น ๋Œ€์‹œ๋ณด๋“œ

์ˆ˜๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ ํ•จ์ˆ˜์ค‘์— ํŠน์ • ํ•จ์ˆ˜ ๊ตฌ๊ฐ„์€ ์žฆ์€ ํ˜ธ์ถœ์ด ์ผ์–ด๋‚จ, ๋ณ‘๋ชฉ์ด ์ผ์–ด๋‚  ์ˆ˜๋„ ์žˆ์Œ,