DevSprout / optimizing-java

🔧 자바 최적화 스터디
4 stars 0 forks source link

Chapter 03. 하드웨어와 운영체제 #3

Open MinJunKweon opened 1 year ago

MinJunKweon commented 1 year ago

느낀점

정리

MESI 프로토콜

image

캐시 기록 방식

변환 색인 버퍼(TLB)

Virtual Memory 주소를 실제 Physical Memory 주소로 변환하기 위해 사용되는 룩업 테이블 캐시

운영체제

애플리케이션이 제대로 동작하는지 확인하는 전략

I/O 성능을 향상시키는 방법 - 커널 바이패스

더 알아본 것

LOG-INFO commented 1 year ago

정리

궁금한 내용

minkukjo commented 1 year ago

총평

캐시 일관성 프로토콜

변환 색인 버퍼 ( TLB )

추측 실행의 보안이슈에 관하여

if (a > 16)    
    b = 32
raise_exception();
// the line below is never reached
access(probe_array[data * 4096]);
  1. raise_exception() 함수가 실행됩니다.

  2. 순차적 실행에서는 3번 줄이 실행되지 않지만, 비순차적 실행으로 인하여 3번째 줄이 실행되게 됩니다.

  3. raise_exception() 함수에 의해 예외가 발생하고 제어 흐름이 운영체제의 예외 처리기로 점프합니다.

  4. 예외로 인해서 순서에 맞지 않게 실행된 명령은 폐기되지 않습니다.

  5. 이 예외가 메모리 액세스 또는 다른 CPU 예외로 인해 발생했는지 여부에 관계없이 제어 흐름은 다음 사용자 공간 명령이 아닌 커널에서 계속됩니다.

  6. 커널에서 실행이 되게 되고 캐시에 데이터가 올라가게 됩니다.

분기 예측의 보안 이슈

image

스케쥴러

컨텍스트 스위칭

감지 전략

HaeUlNam commented 1 year ago

정리

무어의 법칙: 대량 생산한 칩상의 트랜지스터 수는 약 18개월마다 2배씩 증가한다.

→ 컴퓨터 파워가 기하급수적으로 증가. Application 개발자, 자바는 만은 혜택을 받았다. 하지만, 성능을 진지하게 고민하는 프로그래머라면, 가용 리소스를 최대한 활용할 수 있도록 자바 플랫폼의 원리와 기술을 잘 알아야 한다.

무어의 법칙에 따라 급증한 트랜지스터는 처음엔 클록 속도를 높이는데 쓰였다(클록 속도가 증가하면 초당 더 많은 명령어를 처리할 수 있기 때문)

문제점: CPU와 메모리 간의 성능 차이로 인해, 클럭 속도가 올라가더라도 데이터 전송 완료까지 CPU가 노는 일이 발생

문제점: 메모리에 있는 데이터를 어떻게 캐시로 가져오고, 캐시한 데이터를 어떻게 메모리에 써야 할지

캐시 Write 방식

TLB(Translation Lookaside Buffer)

가상 메모리 주소를 물리 메모리 주소로 매핑하는 페이지 테이블의 캐시 역할을 수행

Branch Prediction

공격자는 희생자 프로세스에서 분기 명령을 수행할 때 분기할 목적지를 잘못 예측하게 유도하고 잘못 예측된 데이터가 Speculative execution에 의해 캐시에 적재되면 Flush + Reload 공격을 이용하여 데이터를 유출한다.

Flush + Reload 공격: Flush + Reload 공격을 위해 공격자는 LLC(Last Level Cache)를 모든 코어에서 공유하고 있다는 점을 이용한다. LLC는 모든 코어에서 공유하고 있기 때문에 캐시의 일관성을 유지하기 위해 LLC에서 데이터가 제거되면 다른 모든 코어에서도 데이터가 제거된다.이러한 특성을 악용하여 공격자는 LLC의 모든 Cache Line을 clflush() 명령을 이용하여 제거한다. 이 상태에서 희생자가 어떤 메모리에 접근하면 희생자가 접근한 메모리 주소만 유일하게 캐시에 적재된다. 공격자는 일반적인 방법으로는 캐시에 적재된 데이터를 유출할 수 없기 때문에 메모리 접근 속도를 이용한다. 공격자는 데이터를 유출하기 위해 희생자가 접근한 메모리 주소에 접근한다. 공격자가 접근한 메모리 주소가 희생자가 접근했던 메모리 주소라면 캐시에 적재되어 있기 때문에 접근 속도가 매우 빠르지만, 희생자가 접근하지 않았던 메모리 주소라면 접근 속도가 전자보다 상대적으로 느리다. 공격자는 유출하려는 데이터를 메모리 주소의 index로 이용하여 유출하려는 데이터가 캐시에 적재되도록 만든 후 메모리 주소의 index에 다시 접근하여 데이터를 유출한다

https://koreascience.kr/article/JAKO202013661038812.pdf

더 알아본 내용

Cache Hit/Miss 관점에서의 MESI protocol

Bus snooping

Coherency controller(Snooper)가 Cache 일관성을 유지하기 위해 Bus transaction을 monitoring 하는 체계.

MSI vs MESI vs MOESI

→ 대부분의 ARM processor들은 MOESI를 사용한다고 한다.