์ฌ๋ก ์ฌ๋ฌ๊ฐ์ง ์ดํด๋ณด๊ธฐ virtual file system์ผ๋ก ๋์ด์์ด์ ์ํฉ์๋ฐ๋ผ ๋ค
์๋ : contribution ๊บผ๋ฆฌ๋ฅผ ์ฐพ์์ผ ํจ ์ด๊ฒ์ ์ ๋ํ๊ธฐ ์ํด์ ์ด๋ฒ ์๊ฐ์ ๊ฐ์ง
๋ฆฌ๋ ์ค ๋๋ผ์ด๋ธ์ ์ปจํธ๋ฆฌ๋ทฐ์ ์ ํ๋ ์ฌ๋์ // ์ฐจ๋์ฉ AVN(์นด์ค๋์ค ๋ฑ)์ ๋ฆฌ๋ ์ค ๋๋ผ์ด๋ฒ ๊ฐ๋ฐ - ๊น์ธ์ค(linux contribution 1๋ ์ฐจ)
PPT ๋ง๋ค๋ ๊ณ ๋ฏผ์ ๋ง์ด ํจ // ๋ชจ์ธ ์ฌ๋๋ค์ด ๊ต์ฅํ ๋ค์ํจ
์ปค๋์ชฝ contribution ๋ด์ฉ๋ค <- ์ด๋ก ์ ์ธ ๋ด์ฉ๋ค์ด ์์
Kernal Contribution ํ๊ฒ๋ ์ด์ : ํ์ฌ์ํ ํ๋ฉด์ ์๊ดด๊ฐ(๋ฐ๊ฐ๋ฒ์ ์ํ์์ ๋ฐ์ ๋๊ฐ์ ๋ ๋๋ฅผ ์ด๋ป๊ฒ ์ค๋ช ํ ๊ฒ์ธ๊ฐ?)
์ปค๋์ชฝ git์ด ์ด๋ป๊ฒ ์ด์๋๋๊ฐ?
Vi / Emacs ๋ฑ์ Command ํ๊ฒฝ && terminal์ default๋ก ์ต์ํด ์ ธ์ผ ํจ
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์ ๋ค๋ฅด๊ฒ ์ผ์ผ์ด ๋ค ์์ผ๋ก ํจ
linux newbie๋ฅผ ๋ณด๋ฉด ํ๋ฃจ์ ๋ฉ์ผ์ด ์์ฒ๊ฐ์ฉ ์์์ง
-
linus torvalds shut up <- patch๋ฅผ ๋ฃ๊ณ ์๋ฆฌ๋ฅผ ์๋๋ ๋ฌธ์ ๊ฐ ์๊น
- lkml/2013/7/15/329์ด๊ฑฐ ๋ฒ์ญํด๋ณด์
-
git์ ํจ์น ๋ฐ์ํ๋ ๋ฐฉ๋ฒ -> git am
- ๋ค๋ฅธ ์ฌ๋๋ค์ ์์ฑํ commit๋ค์ด ์ข์ reference
- ํจ์น๋ฅผ ๋ณด๋๋๋ฐ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ์์ ํ ๋ถ๋ถ์ ์ง์ ๋ฐ์ ๊ฒฝ์ฐ -> V[number]
- ํจ์น๋ฅผ ๋ง๋ค์๋๋ฐ ์ ๊ท ๊ธฐ๋ฅ ์ถ๊ฐ
- RFC(Requests for comments) prefix
- ๊ฐ๋์ ์ผ๋จ ํจ์น๋ ๋ง๋ค์ด์ ์์ ๋๋๊ฑด ํ์ธํ๋๋ฐ, ๋๋ ํ์๋ ์๋ค.
- Version์ ๋ฐ๋ฅธ patch๋ด์ฉ์ ๋ณ๊ฒฝ์ฌํญ ์ ๋ฐ์ดํธ ํ๊ธฐ
๊ตฌ๊ธ๋ฆผ -> ๊น๋จ์๋ 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ํ์ผ์ ๊ทธ๋น์ ๋ช
๋ น์ด์ ์ปดํจํฐ์ ๋ณด ๊ทธ๋ฆฌ๊ณ ์ปค๋์ ๋ณด๋ฑ์ ๋ด๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ณต์ ํ๋์์ผ๋ก ๋ฌธ์ ๋ฅผ ์ ๋ฌํ ์ ์์
ํฉ์๊ฐ ์์ํ์ ๋ ์์์ ๊ธฐ๋ก ์ข ๋ฃํ์ ๋ ์ข ๋ฃ๋ฅผ ๊ธฐ๋ก <- ์ด ๋งค์ปค๋์ฆ์ด 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)๊ฐ์ด ์น ๋์๋ณด๋
์๋ง์ ํ๋ก๊ทธ๋จ ํจ์์ค์ ํน์ ํจ์ ๊ตฌ๊ฐ์ ์ฆ์ ํธ์ถ์ด ์ผ์ด๋จ, ๋ณ๋ชฉ์ด ์ผ์ด๋ ์๋ ์์,