์ถ์ฒ: ๊ทธ๋ฆผ์ผ๋ก ๋ฐฐ์ฐ๋ ๋ฆฌ๋ ์ค ๊ตฌ์กฐ


ํ๋ก๊ทธ๋จ๊ณผ ํ๋ก์ธ์ค
ํ๋ก๊ทธ๋จ : ๋ช ๋ น๊ณผ ๋ฐ์ดํฐ๋ฅผ ํ๋๋ก ๋ฌถ์ ๊ฒ. ์ปดํ์ผ ์ธ์ด๋ฉด ์์ค์ฝ๋๋ฅผ ๋น๋ํด์ ๋ง๋ค์ด์ง ์คํํ์ผ์ ํ๋ก๊ทธ๋จ, ํ์ด์ฌ ๊ฐ์ ์คํฌ๋ฆฝํธ ์ธ์ด๋ ์์ค์ฝ๋ ์์ฒด๊ฐ ํ๋ก๊ทธ๋จ์ด๋ค. ์ปค๋๋ ํ๋ก๊ทธ๋จ์ ์ผ์ข ์
ํ๋ก์ธ์ค : ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ
์ปค๋
์ปค๋์ด ํ์ํ ์ด์
ํ๋ก์ธ์ค๊ฐ ์ปค๋์ ๊ฑฐ์น์ง ์๊ณ ํ๋์จ์ด์ ์ง์ ์ ๊ทผํ ๊ฒฝ์ฐ์ ๋ช ๋ น ์คํ ์์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ดํ์ง ์๋๋ค๋ฉด ๋์์ฑ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
CPU ๋ชจ๋
์ปค๋์ CPU ๋ชจ๋ ๊ธฐ๋ฅ์ ์ด์ฉํด ํ๋ก์ธ์ค๊ฐ ํ๋์จ์ด์ ์ง์ ์ ๊ทผํ ์ ์๊ฒ ํ๋ค.
- ์ปค๋ ๋ชจ๋ : ๋ชจ๋ ๋ช ๋ น ์คํ ๊ฐ๋ฅ.
- ์ฌ์ฉ์ ๋ชจ๋ : ํน์ ๋ช ๋ น์ ์คํ ๋ถ๊ฐ. ํ๋ก์ธ์ค๋ ์ฌ์ฉ์ ๋ชจ๋์์ ์คํ๋๋ค.
์ปค๋์ ์ปค๋ ๋ชจ๋๋ก ๋์ํ๋ฉด์ ๋ค๋ฅธ ํ๋ก์ธ์ค์์๋ ๋ถ๊ฐ๋ฅํ ํ๋์จ์ด ์ ์ด, ์์คํ ์์ ๊ด๋ฆฌ ๋ฐ ๋ฐฐ๋ถ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ด๋ฅผ ํตํด ํ๋ก์ธ์ค ๊ฐ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ์์คํ ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํด ์์ ์ ์ธ ์ปดํจํฐ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
์์คํ ์ฝ
: ํ๋ก์ธ์ค๊ฐ ์ปค๋์ ์์ฒญํ๋ ๊ฒ, ์ปค๋์ ๋์์ด ํ์ํ ๋ ์ฌ์ฉํ๋ค.
์๋์ ๊ฐ์ ํน์ํ ๋ช ๋ น์ผ ๋ ์์คํ ์ฝ์ ์ฌ์ฉํ๋ค.
- ํ๋ก์ธ์ค ์์ฑ, ์ญ์
- ๋ฉ๋ชจ๋ฆฌ ํ๋ณด, ํด์
- ํต์ ์ฒ๋ฆฌ
- ํ์ผ ์์คํ ์กฐ์
- ์ฅ์น ์กฐ์
ํ๋ก์ธ์ค๋ ์ฌ์ฉ์ ๋ชจ๋๋ก ์คํ๋์ง๋ง, ์์คํ ์ฝ์ ํธ์ถํ๋ฉด CPU ๋ชจ๋๊ฐ ์ปค๋ ๋ชจ๋๋ก ๋ฐ๋๊ณ ์ปค๋ ์ฒ๋ฆฌ๊ฐ ๋์ํ๋ค. ์์คํ ์ฝ ์ฒ๋ฆฌ๊ฐ ๋๋๋ฉด ๋ค์ ์ฌ์ฉ์ ๋ชจ๋๋ก ๋์๊ฐ๋ค.

๐ก์์คํ ์ฝ์ ํตํ์ง ์๊ณ ํ๋ก์ธ์ค์์ ์ง์ CPU ๋ชจ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ์กด์ฌํ์ง ์๋๋ค.(์๋ค๊ณ ํ๋ฉด ์ปค๋์ด ์กด์ฌํ ์๋ฏธ X)
์์คํ ์ฝ ํธ์ถ ํ์ธํด ๋ณด๊ธฐ
strace : ํ๋ก์ธ์ค๊ฐ ์ด๋ค ์์คํ ์ฝ์ ํธ์ถํ๋์ง ํ์ธ ๊ฐ๋ฅ
+) -T ์ต์ ์ฌ์ฉ ์ ์์คํ ์ฝ ์์์๊ฐ์ ์ธก์ ํ ์ ์๋ค.(์ด๋ค ์์คํ ์ฝ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋์ง ํ์ธํ ๋ ์)
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}

์์คํ ์ฝ์ ์ฒ๋ฆฌํ๋ ์๊ฐ ๋น์จ
sar
: ๋
ผ๋ฆฌ CPU๊ฐ ์คํํ๊ณ ์๋ ๋ช
๋ น ๋น์จ ํ์ธ
taskset
๋ช
๋ น์ด๋ก ์ง์ ํ CPU์์ ์คํํ๋๋ก ์ง์ ๊ฐ๋ฅํ๋ค.
getppid()
: ๋จ์ ์์คํ
์ฝ

์์คํ ์ฝ์ ๋์์์ด ํธ์ถํด์ %system์ด ๋ง์์ง ๊ฑธ ํ์ธํ ์ ์๋ค.
ํ๋ก์ธ์ค ์ฃฝ์ด๊ธฐ
apm
(application performance monitoring)
ex) ์ ๋ํผ
๋ผ์ด๋ธ๋ฌ๋ฆฌ
ํ๋ก์ธ์ค์ ์ํํธ์จ์ด ๊ณ์ธต

ํ์ค C ๋ผ์ด๋ธ๋ฌ๋ฆฌ
C ํ๋ก๊ทธ๋จ์ libc๋ฅผ ๋งํฌ
ํ๋ค.
ldd
: ํ๋ก๊ทธ๋จ์ด ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋งํฌํ๋์ง ์ ์ ์๋ค.

์์คํ ์ฝ ๋ํผ ํจ์
์์คํ ์ฝ ๋ํผ ํจ์ : ๋ด๋ถ์ ์ผ๋ก ์์คํ ์ฝ ํธ์ถ
libc๋ ํ์ค C ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฟ๋ง ์๋๋ผ ์์คํ
์ฝ ๋ํผ
ํจ์๋ ์ ๊ณตํ๋ค. ์์คํ
์ฝ์ ์ผ๋ฐ ํจ์ ํธ์ถ๊ณผ ๋ค๋ฅด๊ฒ C์ธ์ด ๊ฐ์ ๊ณ ๊ธ ์ธ์ด์์ ์ง์ ํธ์ถํ ์ ์๋ค.
๋ง์ฝ libc๊ฐ ์๋ค๋ฉด ์์คํ ์ฝ ํธ์ถํ ๋๋ง๋ค ์ํคํ ์ฒ์ ์์กดํ๋ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํด์ ํธ์ถํด์ผ ํจ.
์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ณต์ (๋์ ) ๋ผ์ด๋ธ๋ฌ๋ฆฌ
ํ๋ก๊ทธ๋จ ์ปดํ์ผ ์์ ์ค๋ธ์ ํธ ํ์ผ์ด ์์ฑ๋๊ณ , ์ดํ ๋งํฌ ๋จ๊ณ์์ ์ค๋ธ์ ํธ ํ์ผ์ด ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋งํฌํด์ ์คํ ํ์ผ์ ๋ง๋ ๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
: ๋งํฌ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ ํจ์๋ฅผ ํ๋ก๊ทธ๋จ์ ์ง์ด๋ฃ์. ์คํ ํ์ผ์ ํฌ๊ธฐๅคง
๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
: ๋งํฌ ์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด๋ฐ ํจ์๋ฅผ ํธ์ถํ๋ค๋ ์ ๋ณด๋ง ์คํ ํ์ผ์ ํฌํจ. ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๊ณ ํจ์๋ฅผ ํธ์ถํ๋ค. ์คํ ํ์ผ ํฌ๊ธฐๅฐ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌธ์ ๊ฐ ์์ ๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ๋ฒ์ ์ผ๋ก ๊ต์ฒดํ๊ธฐ๋ง ํ๋ฉด ์๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ํ๋ก๊ทธ๋จ์์ ๋ฌธ์ ๊ฐ ์์ ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด์์
ex) .dll(Dynamic Link Library)
๋ผ์ด๋ธ๋ฌ๋ฆฌ
์์ฑ | ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
---|---|---|
ํ์ผ ํฌ๊ธฐ | ํฌ๋ค (์คํ ํ์ผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋ ํฌํจ) | ์๋ค (์คํ ํ์ผ์ ํธ์ถ ์ ๋ณด๋ง ํฌํจ) |
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ฐ์ดํธ | ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ์์ ํด์ผ ํจ. ๋ณ๊ฒฝ์ ๋ถ๋ฆฌ. | ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๋๋ง ์์ ํ๋ฉด ๋จ. ๋ณ๊ฒฝ์ ์ ๋ฆฌ. |
์คํ ๋ฐฉ์ | ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๊ฐ ์คํ ํ์ผ์ ํฌํจ๋์ด ํ๋ก๊ทธ๋จ ์คํ ์ ๋ ๋ฆฝ์ | ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋๊ณ ํจ์๊ฐ ํธ์ถ๋จ |

#include <unistd.h>
int main(void) {
pause();
return 0;
}
์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(libc.a)
- ํ๋ก๊ทธ๋จ ํฌ๊ธฐ : 900KiB, ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋งํฌ๋์ด ์์ง ์์
$ cc -static -o pause pause.c
$ ls -l pause
-rwxrwxr-x 1 chaemin chaemin 646632 Oct 6 01:22 pause // ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด๊ฐ์ ์ฌ์ด์ฆ ํผ
$ ldd pause
not a dynamic executable // ์ปดํ์ผ ๋์ผ๋ ๋งํน ์ ๋ผ์ ์คํ ๋ถ๊ฐ
๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(libc.so)
- ํ์ผ ํฌ๊ธฐ๋ 16KiB๋ก libc ์ ์ ๋งํฌ๋ณด๋ค ํจ์ฌ ์์
- libc(/lib/aarch64-linux-gnu/libc.so.6)๋ฅผ ๋์ ๋งํฌํจ
$ cc -o pause pause.c
$ ls
pause pause.c
$ ls -l pause
-rwxrwxr-x 1 chaemin chaemin 8848 Oct 6 01:30 pause
$ ldd pause
linux-vdso.so.1 (0x0000ffff8ea99000)
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffff8e880000)
/lib/ld-linux-aarch64.so.1 (0x0000ffff8ea60000)
+) ldd ๋ช ๋ น์ด๋ก ๋ด๊ฐ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ ์คํ ํ์ผ์ ์ด๋ค ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋งํฌ๋์ด์๋์ง ํ์ธํด๋ณด๊ธฐ
Uploaded by N2T