- Better Algorithms
- Cache data
-> ex) page cache- Concurrency(동시성)
- Parallesim (병렬화)
- 동시성과 병렬화
- 프로그램은 멀티코어를 이용해 parallel speed-up을 원함
- 리눅스 커널은 반드시 parallel system calls 처리가 가능해야 함
-> 락 x
-> 커널은 데이터를 Parallel로 접근(ex. buffer cache)
- 특정 코드에 진입을 오직 하나의 CPU 만 허용
- 락은 공유 데이터를 처리하는데 도움을 줌
- 하지만 락은 Parallel speedup에 방해 요인
- 하나의 CPU(스레드)만 락을 획득하고, 나머지 CPU(스레드)는 대기(spin)
ex)
- spinlock
- mutex
- reader lock, writer lock 두가지 종류의 락이 있음
- 읽는 것은 여러 스레드에서 동시 실행해도 문제가 안되기 때문
- 쓰는 것은 여러 스레드에서 동시 실행하면 문제가 됨
- 두개의 락을 분리해서 병렬성을 높임
ex)
- reader-writer semaphore
- read 와중에 update 가 가능하게 하는 병렬화
ex)
- RCU
- SRCU
한 코어의 캐시에서 변경된 값이, 다른 코어의 캐시에 변경 이전에 로드 된 경우 값이 다른 문제가 발생
- Cache cohrenece protocol
-> 모든 전역변수의 변경을 모든 코어에게 다 알려줌- 모든 메시지는 모든 코어에 broadcast
-> cache invalidate message- 하지만 이러한 경우, 속도 저하 발생
- 최대한 per-core partitioning 해야함
- 락은 parallelism execution에 방해
해결 방법
- 락을 최대한 안쓰는 방향으로 디자인'
- 방법이 없으면 락 스코프를 최소화