티스토리 뷰

0강

strace

tracing tool이다.

system call을 추적한다. 어느 정도 시스템에 부하를 준다.

어떤 함수가 중간에 잘못 실행된 경우 등 문제가 발생했을 경우 tracing할 수 있는 툴.

출력 양을 조절하고, 파일로 출력하기.

strace <command>

strace가 command를 fork-exec로 추적하는 방법.

단발성 명령어를 추적하는 데 사용된다.

strace가 마치 셸처럼 작동한다.

strace -p <pid>

작동중인 프로세스의 pid를 넣으면 추적한다.

strace는 fd2번에 출력한다. STDERR. 또는 -o 옵션 사용해도 됨.

-s 옵션 : strsize. 문자열의 길이를 디폴트=32까지 찍어준다. 32는 너무 적다.

-c 옵션 : count 기능. 몇 번 실패했고, 어떤 함수가 몇 번 실행했는지. 프로그램이 끝난 시점에서만 출력해준다. 일회성 프로그램인 경우.

-C 옵션 : -c기능과 같은데, 프로세스가 running상태일 때도 계속 출력함.

-f 옵션 : following 해주는 것. forked process(child)를 추적하고 싶을 때.

-r 옵션 : print relative time.

 

access함수 : 파일이 존재하는지와, UNIX mode(rwx)값을 확인한다. 실패시 -1리턴.


1강

Virtual Memory

보통 modern os에서 memory는 virtual memory를 의미한다. VM. (요즘에는 Virtual Machine으로도 쓰임)

Paging, Segmentation기법으로 구현함.

 

Page

Memory를 규격화된 크기로 잘라서 사용.

 

Segment

Memory를 비규격화된 크기로 잘라서 사용.

세그먼트는 각각 다른 크기.

프로세스가 실제로 사용하는 메모리는 세그먼트.

 

OS가 바라보는 메모리 규격은 페이지

Process가 바라보는 메모리 규격은 세그먼트.

 

Paging

CPU의 MMU가 한다. Memory Management Unit.

Virtual Machine을 가속화하기 위해서 Virtualization : Intel VT-x, AMD-V 기능. 이 기능을 사용하지 않으면 가상머신 사용 시 속도가 너무 떨어진다.

균일한 사이즈. 4096 Bytes.

 

Page fault

soft page fault = minor page fault

hard page fault = major page fault

메모리가 32GB가 있다고 하면, 모든 메모리를 미리 잘라놓는 것이 아니고, 필요할 때 자르는 작업.

demanding memory 메모리를 요구할 때 주는 것이 아니고, 실제로 읽기/쓰기 등의 작업으로 메모리를 사용하려할 때 페이지를 할당해준다. 이때 발생하는 것이 페이지폴트.

soft : 디스크에서 읽지 않는 것.

hard : 하드 디스크로부터 읽어들여야 하는 것.

페이지폴트는 자연스러운 현상이지만 너무 자주 발생하면 성능에 영향을 준다.

 

memory locking

메모리 페이징을 막는 기법. swap을 못하게 한다.

password라던지 자주 사용되는 중요한 정보는, 메모리에만 두고, 디스크로 내려가지 못하도록 막는 기능.

 

dirty pages

modified page가 write-back되기 전 상태.

disk에 있는 데이터와 memory에 있는 데이터가 다른 상태.

CPU가 작업을 해서 cache에 기록 -> memory에 기록 -> disk에 기록

* Coherency

Cache-RAM-Disk는 항상 일관성이 유지되어야 한다.

RAM-Disk의 inconsistency -> dirty page

Cache-Ram의 inconsistency -> dirty bit on cache line

 

mmap

memory map

파일을 process memory area에 mapping 시키는 기법.

 

in/out

paging in : physical memory(RAM)로 로딩

paging out : physical memory로 언로딩 (항상 swap out이 발생하는 것은 아니다.) 램에서 빠져나간 것.

swap in : disk에서 physical memory로 로딩. swap out했던 데이터를 다시 메모리로 불러오는 것.

swap out : physical memory에서 disk로 언로드(백업). 그 공간만큼 램을 확보.

 

free memory

free 메모리와 available 메모리는 다르다.

free는 할당되지 않았다는 뜻.

free명령어

-m : MB 단위로 출력. 디폴트 : KB단위

free영역은 부팅 후 점점 줄어든다.

-> 그러다 어느 수준에서는 더 이상 줄어들지 않는다.

why? -> 1) cache 2) 파편화된 조각(단편화 현상) 때문.

메모리의 부족 여부는 어떻게 알 수 있는가?

-> 프로그램이 느려지는 문제 발생. 몇몇 프로세스들이 강제 종료 당한다.

-> disk의 swap영역의 사용량이 늘어나고 있는지 확인

free명령어는 개괄적인 데이터만 제공하고, 메모리 상태를 자세히 알기 위해서는 /proc/meminfo 를 분석해야 한다.

 

/proc/meminfo

active / inactive : 로컬리티의 원리에 의해. 최근에 쓰인 메모리가 active. 시간이 지날 수록 메모리 aging기법.

file-backed / anonymous : anonymous는 이름이 없는 메모리. 외부에서 접근이 불가능한 메모리. 사본이 disk에 없는 메모리. 대표적으로 heap메모리. file-backed는 디스크에 사본이 존재하는 메모리.

* LRU알고리즘(Least Recently Used)에 의해 최근에 사용되는 페이지는 active. 

메모리가 부족할 경우 inactive로 분류된 메모리를 가져온다. (release)

inactive(anon)이라면 swap out시키고. 

inactive(file)이라면 disk에 original에 있으므로 즉시 전환. 손쉽게 뺏을 수 있다. release cost가 가장 낮다.

그래서 시스템은 anon보다 file을 먼저 뺏는다.

 

Available memory

= Buffers + Cached + AnonPages

= Active(file/anon) + Inactive(file/anon) + Unevictable

 

Demanding memory시 메모리가 부족하다면 필요한 만큼의 메모리를 reclaim하는 과정 진행.

-> 이 때 release cost가 가장 낮아서 release될 가능성이 높은 메모리는 Inactive file-backed memory이다.

반대로 release cost가 가장 높은 메모리는 Active anonymous memory이다.


2강

ulimit

사용자의 자원 제한.

멀티유저 운영체제에서 자원을 나눠써야 하기 때문.

ulimit [-SHacdfilmnpqstuvx] [limit]

-a : all. 사용할 수 있는 모든 자원에 대한 설명이 나온다.

open files : 하나의 프로세스가 열 수 있는 파일(fd)의 최대 개수.

soft limit은 바꿀 수 있는 리밋

hard limit은 바꿀 수 없는 리밋

hard limit크기 안에서 soft limit을 지정할 수 있다.

-u : 무한 fork 방지.

 

PAM

로그인시 인증 등의 작업을 할 때 사용.

시스템에서 설정.

로그인시 제약 설정: /etc/pam.d/login, /etc/pam.d/system-auth

설정파일 이름으로 매뉴얼페이지 확인 가능. ex. man limits.conf

 

/etc/security/limits.conf를 직접 수정하는 경우는 흔치 않다.

limits.d 라는 디렉토리에서

*.d 디렉터리가 있다면, 무조건 config를 넣는 곳으로 보면 된다.

파일명 맨 끝은 무조건 *.conf 로 끝나야 한다.


3강

커널 파라미터

https://www.kernel.org/doc/html/latest 

 

The Linux Kernel documentation — The Linux Kernel documentation

This is the top level of the kernel’s documentation tree. Kernel documentation, like the kernel itself, is very much a work in progress; that is especially true as we work to integrate our many scattered documents into a coherent whole. Please note that

www.kernel.org

https://www.kernel.org/doc/Documentation/sysctl 

 

The Linux Kernel documentation — The Linux Kernel documentation

This is the top level of the kernel’s documentation tree. Kernel documentation, like the kernel itself, is very much a work in progress; that is especially true as we work to integrate our many scattered documents into a coherent whole. Please note that

www.kernel.org

-a 옵션 : 모든 옵션 설정 보기.

sysctl의 kernel parameters는 /proc/sys에 파일 형태로 존재한다.

 

TCP socket buffer size ( window size )

net.core.rmem_max

net.core.wmem_max

 

수신측은 RTT에 영향을 크게 받는다.

송신측은 혼잡에 영향을 크게 받는다.

 

peer로부터 ACK를 받으면 buffer에서 제거.

 

RTT

 

net : tcp : time-wait

net.ipv4.tcp_tw_reuse : 1이 on이다.

RESTfulAPI

기본적으로 웹서버이다.

 

net : tcp : TF0

net.ipv4.tcp_fastopen

0 : off

1: client only

2 : server only

3 : enables client and server

 

/proc/sys/vm/dirty_*


4강

tuned

튠디

/usr/lib/tunde/ 디렉토리에 tuned.conf 파일

[cpu] governor 거버너

performance : 최고 성능을 위해. 응답속도가 중요한 경우.

powersave : 저전력을 위해. 

cpupower 툴로 frequency, governor를 확인할 수 있다.

[cpu] min_pefr_pct, max_perf_pct

CPU의 hardware limit성능을 퍼센티지로 제한.

powersave 모드로 작동시키면 1GB이상의 네트워크를 사용하는 경우 네트워크 속도를 뚝 떨어뜨림.


5강

Processors

CPU

lscpu : cpu의 구조, Byte order(엔디안), CPU 개수, CORE개수 등

lsusb, lshw, lsblk 등도 있다. 그게 무슨 명령어인지는 맨 페이지 참고. ls<TAB><TAB> 치면 다 나온다.

맨페이지볼 때 SEE ALSO도 확인하기.

chcpu : cpu를 enable, disable해주는 명령어.

보통 0번 cpu는 disable할 수 없다.

-e 옵션 : enable

-d 옵션 : disable

cpupower

 

GPU

stats

nvidia-smi : nvidia graphic driver에 포함된 유틸

pcp-pmda-nvidia-gpu

python 

이 3개 중 어떤 걸로 해도 된다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함