리눅스데브코스 [10주차 - 2]<멀티코어와 커널 동기화>

심우열·2023년 6월 6일
0

1. 성능을 향상시키기 위한 방법

1. 시스템을 측정해서 bottleneck 탐색, 해결

1. Bottleneck 해결 방안

  • Better Algorithms
  • Cache data
    -> ex) page cache
  • Concurrency(동시성)
  • Parallesim (병렬화)

2. 멀티코어

  • 동시성과 병렬화
  • 프로그램은 멀티코어를 이용해 parallel speed-up을 원함
  • 리눅스 커널은 반드시 parallel system calls 처리가 가능해야 함
    -> 락 x
    -> 커널은 데이터를 Parallel로 접근(ex. buffer cache)

3. 락

  • 특정 코드에 진입을 오직 하나의 CPU 만 허용
  • 락은 공유 데이터를 처리하는데 도움을 줌
  • 하지만 락은 Parallel speedup에 방해 요인

1. 락 또는 동기화 처리의 종류

1. Exclusive Lock

  • 하나의 CPU(스레드)만 락을 획득하고, 나머지 CPU(스레드)는 대기(spin)

ex)

  • spinlock
  • mutex

2. Reader-writer lock

  • reader lock, writer lock 두가지 종류의 락이 있음
  • 읽는 것은 여러 스레드에서 동시 실행해도 문제가 안되기 때문
  • 쓰는 것은 여러 스레드에서 동시 실행하면 문제가 됨
  • 두개의 락을 분리해서 병렬성을 높임

ex)

  • reader-writer semaphore

3. RCU(Read Copy Update)

  • read 와중에 update 가 가능하게 하는 병렬화

ex)

  • RCU
  • SRCU

2. System Interconnect

한 코어의 캐시에서 변경된 값이, 다른 코어의 캐시에 변경 이전에 로드 된 경우 값이 다른 문제가 발생

  • Cache cohrenece protocol
    -> 모든 전역변수의 변경을 모든 코어에게 다 알려줌
  • 모든 메시지는 모든 코어에 broadcast
    -> cache invalidate message
  • 하지만 이러한 경우, 속도 저하 발생
  • 최대한 per-core partitioning 해야함

3. 락과 parallelism

  • 락은 parallelism execution에 방해

해결 방법

  • 락을 최대한 안쓰는 방향으로 디자인'
  • 방법이 없으면 락 스코프를 최소화
profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글