Lec17 - IO & WSC

한국어판 강의자료 · 44쪽
1쪽
p.1CSED503 고급 컴퓨터 구조 – 강의 17
2쪽
p.2강의 18에서 이전 내용
  • - mutual exclusion(상호 배제) 동기화는 일반적인 로드와 스토어를 사용해 구현할 수 있지만, 복잡하고 비효율적이다.
  • - 대부분의 아키텍처는 mutual exclusion(상호 배제)를 지원하기 위해 atomic Read-Modify-Write(원자적 읽기-수정-쓰기) 동기화 원시 명령어를 추가한다.
  • - lock-based synchronization(잠금 기반 동기화)는 잠금을 보유한 스레드가 잠금을 보유한 채로 스케줄링 해제될 수 있어 취약하다.
  • - non-blocking synchronization(비잠금 동기화)는 잠금을 보유하지 않고도 mutual exclusion(상호 배제)를 제공하려는 시도이다.
  • - Compare-and-Swap(비교-스왑)은 forward progress guarantee(진행 보장)을 제공하지만, 복잡한 명령어이며 ABA problem(ABA 문제)에 취약하다.
  • - double-wide Compare-and-Swap(이중 폭 비교-스왑)은 ABA problem(ABA 문제)를 방지하지만, 더 복잡한 명령어가 된다.
  • - Load-Reserved/Store-Conditional(로드-예약/스토어-조건부) 쌍은 명령어 복잡성을 줄인다.
  • - 주소 기반으로 보호하므로 값에 따라 취약하지 않아 ABA problem(ABA 문제)에 영향을 받지 않는다.
  • - forward progress guarantee(진행 보장)이 추가되지 않으면 livelock(라이벨록)이 발생할 수 있다.
  • - transactional memory(트랜잭션 메모리)는 점차 상용화되고 있다.
  • - 복잡한 이식성/호환성 문제를 안고 있다.
3쪽
p.3(I/O) 입출력
  • - Input/Output (I/O)(입출력) 없이는 컴퓨터는 쓸모없다.
  • - 시간이 지남에 따라 컴퓨터 Input/Output (I/O)(입출력)의 형태가 수천 가지에 이르렀다: 펀치 카드에서 뇌 인터페이스까지.
  • - 주요 범주:
  • - 보조/삼차 저장장치 (플래시/디스크/테이프)
  • - 네트워크 (이더넷, 와이파이, 블루투스, LTE)
  • - 사용자-기계 인터페이스 (키보드, 마우스, 터치스크린, 그래픽, 오디오, 비디오, 신경 등)
  • - 프린터 (라인, 레이저, 잉크젯, 사진, 3D 등)
  • - 센서 (공정 제어, GPS, 심박수 등)
  • - 액추에이터 (밸브, 로봇, 자동차 브레이크 등)
  • - Input/Output (I/O)(입출력) 장치의 조합은 매우 응용 프로그램에 따라 달라진다.
4쪽
p.4I/O 장치와의 인터페이스
  • - 두 가지 일반적인 전략:
  • - Memory-Mapped I/O(메모리 매핑된 입출력):
  • - I/O 장치가 프로세서에게 메모리 위치처럼 보인다.
  • - I/O 장치 위치에 대한 읽기 및 쓰기는 I/O를 구성하고 데이터를 전송한다 (프로그램 기반 입출력 또는 DMA 사용).
  • - Input/Output (I/O)(입출력) 채널:
  • - 아키텍처가 정의된 채널을 통해 I/O 명령을 실행할 수 있는 명령을 지정한다.
  • - Input/Output (I/O)(입출력) 채널 구조는 메모리 매핑된 장치 구조 위에 계층적으로 구성될 수 있다.
  • - 데이터 전송 외에도 동기화 방법을 정의해야 한다.
  • - polling(폴링): CPU가 상태 비트를 확인한다.
  • - interrupts(인터럽트): 장치가 이벤트 발생 시 CPU에 인터럽트를 보낸다.
5쪽
p.5Memory-Mapped I/O(메모리 매핑된 입출력)
  • - programmed I/O(프로그램 기반 입출력)은 로드 및 스토어 명령어를 사용해 CPU가 I/O 장치를 제어하며, 주소는 접근할 장치 레지스터를 지정한다.
  • - 로드 및 스토어는 장치에 부수적인 효과를 줄 수 있다. 예: 바이트를 쓰면 시리얼 포트 인터페이스를 통해 해당 바이트가 출력된다.
  • - 일반적으로 I/O 장치에 직접 접근할 수 있는 것은 특권 코드뿐이며, 안전한 다중 프로그래밍을 보장하기 위해이다.
  • - 애플리케이션에서 장치를 열고 독점적으로 예약하기 위해 system call(시스템 콜)이 제공될 수 있다.
  • - 프로세서는 장치 레지스터의 캐시를 방지하기 위해 '캐시되지 않은' 로드 및 스토어를 제공한다.
  • - 물리 주소 공간의 일부를 정적으로 캐시되지 않은 것으로 할당하거나,
  • - 가상 메모리 지원 시 page table entry(페이지 테이블 항목)의 구성 비트를 사용한다.
6쪽
p.6간단한 I/O 버스 구조
  • - 일부 물리 주소 범위가 I/O 버스 장치에 매핑된다.
  • - I/O bridge(입출력 브리지)가 핵심 CPU-DRAM 버스에 대한 전기 부하를 줄인다.
  • - 장치는 '슬레이브'가 될 수 있으며, I/O 버스 요청에만 응답한다.
  • - 장치는 '마스터'가 될 수 있으며, I/O 버스 전송을 시작할 수 있다.
  • CPU
  • Caches
  • DRAM
  • I/O Bus
  • Bridge
  • Memory Bus
  • I/O Bus
  • I/O Device #1
  • I/O Device #2
  • I/O Device #3
7쪽
p.7DMA (직접 메모리 접근)
  • DMA 엔진은 I/O 장치와 메인 메모리 사이의 데이터 전송을 자율적으로 수행함으로써 CPU의 부담을 줄임.
  • CPU는 장치 상태를 polling(폴링)하거나 interrupts(인터럽트)를 받아 DMA 전송이 완료되었는지 확인할 수 있음.
  • DMA는 메모리 매핑된 레지스터를 통해 프로그래밍됨.
  • 일부 시스템은 DMA 엔진 내부에 전용 프로세서를 사용함.
  • 현대 시스템에서는 일반적으로 여러 개의 별도 DMA 엔진이 존재함:
  • I/O bridge(입출력 브리지)에 집중되어 있으며, 여러 장치에 대한 동시 채널을 지원함 (일반적으로 슬레이브 전용 I/O bus(입출력 버스)에서 작동함).
  • 각 주변 장치에 직접 연결됨 (입출력 버스가 마스터링을 지원하는 경우).
8쪽
p.8더 복잡한 버스 구조
  • I/O 연결의 속도를 장치의 요구에 맞춤.
  • 그래픽용 특수 직접 연결.
  • 저장장치 및 network(네트워크) 카드용 고속 I/O bus(입출력 버스).
  • 사용자 인터페이스(키보드, 마우스, 터치스크린 등)용 저속 I/O bus(입출력 버스).
  • 고속 I/O bus(입출력 버스) 부담 감소 + 장치에 필요한 버스 논리 회로 감소.
9쪽
p.9병렬 외부 I/O에서 시리얼로의 전환
  • parallel bus(병렬 버스)의 클록 주파수는 긴 버스에서의 clock skew(클록 스큐)로 인해 제한됨 (~100MHz).
  • 많은 부하가 걸린 버스 라인을 구동하기 위해 높은 power consumption(전력 소비).
  • 중앙 버스 아르비터는 각 트랜잭션에 latency(지연)을 추가하며, 공유로 인해 throughput(처리량)이 제한됨.
  • 비용이 많이 드는 병렬 커넥터 및 백플레인/케이블 (모든 장치가 비용을 부담함).
  • 예: VMEbus, Sbus, ISA bus, PCI, SCSI, IDE.
  • 포인트투포인트 시리얼 링크는 고급 클록/신호 인코딩을 사용해 다기가비트 속도로 작동함 (각 끝단에 많은 회로 필요).
  • 단일 잘 조절된 부하만 있으므로 power consumption(전력 소비)가 낮음.
  • 다중 동시 전송 가능.
  • 케이블 및 커넥터가 저렴함 (엔드포인트 트랜지스터 비용 증가를 물리적 배선 비용 감소로 교환), 병렬로 여러 링크를 사용해 각 장치에 맞춤형 bandwidth(대역폭) 제공 가능.
  • 예: Ethernet, Infiniband, PCI Express, SATA, USB, Firewire 등.
10쪽
p.10버스에서 크로스바로의 전환 (온칩)
  • 버스는 와이어가 비싸고 공유되어야 했던 시대에 발전함.
  • VLSI standard cell flow(VLSI 표준 셀 흐름)에서는 트라이스테이트 드라이버가 문제를 일으키므로 combinational mux(조합형 멀티플렉서)로 대체됨.
  • 크로스바는 On-Chip wiring(온칩 배선)의 밀도를 활용하여 다중 동시 트랜잭션을 허용함.
11쪽
p.11Input/Output (I/O)(입출력) 및 메모리 매핑
  • I/O bus(입출력 버스)는 coherent(코히어런트) 여부에 따라 다름.
  • non-coherent(비코히어런트)은 단순하지만, cache flushing(캐시 플러싱) 또는 uncached access(캐시되지 않은 접근)만 허용해야 할 수 있음 (현대 프로세서에서는 훨씬 느림).
  • 일부 Input/Output (I/O)(입출력) 시스템은 coherent(코히어런트) cache(캐시)도 가능함 (SGI Origin, TileLink, 최신 x86 시스템).
  • Input/Output (I/O)(입출력)은 virtual address(가상 주소)를 사용하고 IOMMU를 활용할 수 있음.
  • 사용자 주소 공간으로의 DMA를 단순화함, 그렇지 않으면 DMA 엔진이 scatter/gather(스캐터/개더)를 통해 연속된 사용자 세그먼트를 처리해야 함.
  • 나쁜 장치 드라이버로부터 보호함.
  • Input/Output (I/O)(입출력) 장치의 복잡성 증가.
12쪽
p.12interrupts(인터럽트) vs. polling(폴링)
  • I/O 장치 상태를 감지하는 두 가지 방법:
  • interrupts(인터럽트):
  • 이벤트 발생 전까지 CPU 오버헤드 없음.
  • 부적절한 시점에 발생할 수 있음.
  • 각 이벤트마다 큰 컨텍스트 전환 오버헤드 (트랩으로 파이프라인 정리, 캐시/TLB의 현재 작업 세트 방해).
  • polling(폴링):
  • 모든 polling(폴링)마다 CPU 오버헤드 발생.
  • 모든 코드에 삽입하기 어려움.
  • 핸들러 발생 시점을 제어 가능, working set(작업 세트) 간섭 감소 가능.
  • hybrid approach(하이브리드 접근법):
  • 첫 번째 이벤트에 interrupts(인터럽트) 발생, 커널에서 더 이상 이벤트가 없음을 확신할 때까지 polling(폴링) 유지, 이후 다시 인터럽트로 전환.
13쪽
p.13ARM SoC 구조 예시
14쪽
p.14ARM 스마트폰 예시 다이어그램
15쪽
p.15Intel Ivy Bridge 서버 칩 Input/Output (I/O)(입출력)
16쪽
p.16Intel Romley 서버 플랫폼
17쪽
p.17웨어하우스 규모 컴퓨터(WSCs)
  • 인터넷 서비스 제공: 검색, 소셜 네트워킹, 온라인 지도, 동영상 공유, 온라인 쇼핑, 이메일, 클라우드 컴퓨팅 등
  • 고성능 컴퓨팅(HPC) ‘클러스터’와의 차이점:
  • - 클러스터는 더 높은 성능의 프로세서와 network(네트워크)를 갖춤
  • - 클러스터는 Thread-Level parallelism(스레드 수준 병렬성)에 중점을 두며, WSC는 Request-Level parallelism(요청 수준 병렬성)에 중점을 둠
  • 데이터센터와의 차이점:
  • - 데이터센터는 다양한 머신과 소프트웨어를 하나의 장소에 통합함
  • - 데이터센터는 다양한 고객을 서비스하기 위해 가상 머신과 하드웨어 이질성을 강조함
18쪽
p.18WSC 특성
  • 풍부한 계산 병렬성은 중요하지 않음
  • - 대부분의 작업은 완전히 독립적임
  • - ‘Request-Level parallelism(요청 수준 병렬성)’
  • operational cost(운영 비용)이 중요함
  • - 시스템 설계 시 power consumption(전력 소비)는 2차적 제약이 아니라 주요 제약이 됨
  • 규모와 그로 인한 기회 및 문제점
  • - WSC는 대량 구매를 통해 맞춤형 시스템을 구축할 수 있음
  • 위치가 중요함
  • - real estate(부동산), electricity cost(전기 비용); 인터넷, 최종 사용자, 인력 가용성
  • 낮은 활용률에서도 효율적인 컴퓨팅
  • 규모와 그로 인한 기회/문제점
  • - 고유한 도전 과제: custom hardware(맞춤형 하드웨어), 고장
  • - 고유한 기회: bulk discount(대량 할인)
19쪽
p.19Warehouse-Scale computer (WSC)(웨어하우스 규모 컴퓨터)의 효율성과 비용
  • WSC의 위치
  • internet backbone(인터넷 백본)에 근접함, electricity cost(전기 비용), real estate(부동산) 세율, 지진, 홍수, 허리케인 등의 위험도 낮음
20쪽
p.20그림 6.18 2017년 기준 AWS는 16개의 사이트('지역')를 운영 중이며, 추가로 2개가 곧 개설될 예정이다.
  • 대부분의 사이트는 2~3개의 availability zone(가용성 영역)을 가지고 있으며, 이들은 서로 가까이 위치해 있지만, 자연재해나 전력 정전이 발생하더라도 동일한 영향을 받을 가능성은 낮다. (지도 내 원 안에 각 지역의 가용성 영역 수가 표시되어 있다.)
  • 이 16개의 사이트 또는 지역은 총 42개의 availability zone(가용성 영역)을 포함한다.
  • 각 availability zone(가용성 영역)에는 하나 이상의 WSC가 있다.
  • https://aws.amazon.com/about-aws/global-infrastructure/
21쪽
p.21그림 6.19 2017년 기준 Google은 15개의 사이트를 운영 중이다.
  • Americas: Berkeley County, South Carolina; Council Bluffs, Iowa; Douglas County, Georgia; Jackson County, Alabama; Lenoir, North Carolina; Mayes County, Oklahoma; Montgomery County, Tennessee; Quilicura, Chile; The Dalles, Oregon
  • Asia: Changhua County, Taiwan; Singapore
  • Europe: Dublin, Ireland; Eemshaven, Netherlands; Hamina, Finland; St. Ghislain, Belgium
  • https://www.google.com/about/datacenters/inside/locations/
22쪽
p.22그림 6.20 2017년 기준 Microsoft는 34개의 사이트를 운영 중이며, 추가로 4개가 곧 개설될 예정이다.
  • https://azure.microsoft.com/en-us/regions/
23쪽
p.23전력 분배
24쪽
p.24그림 6.9 cooling system(냉각 시스템)의 기계적 설계. CWS는 순환수 시스템을 의미한다.
  • Hamilton, J., 2010. Cloud computing economies of scale. In: Paper Presented at the AWS Workshop on Genomics and Cloud Computing, June 8, 2010, Seattle, WA.
  • http://mvdirona.com/jrh/TalksAndPapers/JamesHamilton_GenomicsCloud20100608.pdf
25쪽
p.25WSC의 인프라 및 비용
  • cooling system(냉각 시스템)도 물을 사용한다 (증발 및 누수)
  • 예: 8MW 시설에서 하루에 약 70,000~200,000 갤런 (~90만 리터)
  • 전력 비용 구성:
  • chiller(냉각기): IT 장비 사용 전력의 30~50%
  • air conditioning(에어컨): IT 전력의 10~20%, 주로 팬 때문
  • WSC는 몇 대의 서버를 지원할 수 있는가?
  • 각 서버:
  • • ‘nameplate power rating(명판 전력 정격)’은 최대 power consumption(전력 소비)를 제공한다
  • • 실제 전력을 얻기 위해 실제 작업 부하에서 측정한다
  • 서버 전력 합계를 40% 과잉 할당하되, 전력을 밀접하게 모니터링한다
26쪽
p.26WSC의 인프라 및 비용
  • 최대 서버 용량 결정하기:
  • nameplate power rating(명판 전력 정격): 서버가 끌 수 있는 최대 전력
  • 보다 나은 접근법: 다양한 작업 부하에서 측정하기
  • 40% 과잉 할당
  • 구성 요소별 일반적인 전력 사용:
  • 프로세서: 42%
  • DRAM: 12%
  • 디스크: 14%
  • 네트워킹: 5%
  • 냉각: 15%
  • power overhead(전력 오버헤드): 8%
  • 기타: 4%
27쪽
p.27전력 이용 효율성(PUE)
  • PUE = 시설 전체 전력 / IT 장비 전력
  • 그림 6.11 2008~2017년 사이 15개 구글 WSC의 평균 전력 이용 효율성(PUE).
  • 파란색 점선은 분기별 평균 PUE, 검은색 직선은 이전 12개월 이동 평균 PUE이다.
  • 2016년 4분기 평균은 각각 1.11과 1.12였다.
28쪽
p.28성능 및 latency(지연)
  • latency(지연)은 사용자에게 직접적으로 느껴지므로 중요한 지표이다
  • 마이크로소프트 빙 연구: response time(응답 시간)이 증가할수록 사용자가 검색을 덜 사용한다
  • 서비스 수준 목표(SLO)/서비스 수준 계약(SLA):
  • 예: 99%의 요청이 100ms 이하로 처리되어야 함
29쪽
p.29장애 및 이상 현상
30쪽
p.30CPU 활용률은 일반적으로 낮다
  • 그림 6.3 구글에서 6개월 동안 5,000대 이상의 서버 평균 CPU 활용률.
  • 서버는 거의 완전히 비어 있거나 완전히 사용되는 경우는 드물며, 대부분의 시간 동안 최대 활용률의 10%~50% 사이에서 운영된다.
  • 그림 6.4에서 오른쪽에서 세 번째 열은 ±5% 범위 내의 백분율을 계산하여 가중치를 산출한다. 예를 들어 90% 행의 1.2%는 85%~95% 활용률을 가진 서버의 비율을 의미한다.
31쪽
p.31Google WSC 랙
  • 그림 6.30: Google의 웨어하우스 규모 컴퓨터(WSC)를 위한 랙. 크기는 약 7피트 높이, 4피트 너비, 2피트 깊이(2m × 1.2m × 0.5m)이다.
  • 랙 상단에는 랙 상단 스위치가 위치해 있다.
  • 다음은 랙 뒷면의 버스 바를 통해 240V AC를 48V DC로 변환하여 랙 내 서버에 공급하는 전원 변환기이다.
  • 다음은 서버의 높이에 따라 달라지는 20개의 슬롯으로, 랙에 배치할 수 있는 다양한 유형의 서버에 대해 구성 가능하다.
  • 트레이당 최대 4대의 서버를 설치할 수 있다.
  • 랙 하단에는 고효율 분산 모듈형 DC 비정전 전원 공급 장치(UPS) 배터리가 위치해 있다.
32쪽
p.32WSC 내 스위치 계층 구조
  • 그림 6.5: WSC 내 스위치의 계층 구조. Barroso, L.A., Clidaras, J., Hölzle, U., 2013. The datacenter as a computer: an introduction to the design of warehouse-scale machines. Synth. Lect. Comput. Architect. 8 (3), 1–154. 기반.
  • 랙 배열
33쪽
p.33오래된 WSC network(네트워크) 구조
  • 그림 6.8: 랙 배열들을 연결하고 인터넷과 연결하기 위해 사용하는 레이어 3 네트워크(Greenberg et al., 2009).
  • 로드 밸런서는 서버 집합의 부하를 모니터링하여, 서버들이 균일하게 활용되도록 덜 부하가 많은 서버로 트래픽을 전달한다.
  • 다른 옵션으로는 인터넷과 데이터센터 레이어 3 스위치를 연결하기 위해 별도의 경계 라우터를 사용하는 것이다.
  • 6.6절에서 살펴보겠지만, 많은 현대 WSC는 전통적인 스위치의 계층적 network(네트워크) 스택을 포기했다.
34쪽
p.34랙 배열 스위치
  • 랙 배열을 연결하는 스위치.
  • 랙 스위치의 bisection bandwidth(양분 대역폭) 대비 10배 이상의 bisection bandwidth(양분 대역폭)을 가져야 한다.
  • n포트 스위치의 비용은 n²에 비례하여 증가한다.
  • 자주 content-addressable memory(내용 주소 지정 메모리) 칩과 FPGA를 활용한다.
35쪽
p.35새로운 Clos network(네트워크) 구조
  • 그림 6.31: Clos network(네트워크)는 crossbar switch(크로스바 스위치)로 구성된 3개의 논리적 단계로 이루어져 있다: ingress(인그레스), middle(중간), egress(이그레스) 단계.
  • ingress(인그레스) 단계의 각 입력은 middle(중간) 단계의 어느 하나를 통과하여 egress(이그레스) 단계의 어느 출력으로 라우팅될 수 있다.
  • 이 그림에서 middle(중간) 단계는 M Spine Blocks이며, ingress(인그레스) 및 egress(이그레스) 단계는 N Edge Activation Blocks에 있다.
  • 그림 6.22는 Google WSC의 여러 세대에 걸쳐 Spine Blocks와 Edge Aggregation Blocks의 변화를 보여준다.
36쪽
p.36Jupiter Clos network(네트워크)의 구성 요소
  • 그림 6.32: Jupiter Clos network(네트워크)의 구성 블록.
  • Google Jupiter Clos network(네트워크)
37쪽
p.37Warehouse-Scale computer (WSC)(웨어하우스 규모 컴퓨터)의 메모리 계층
  • 서버는 NUMA 스타일 인터페이스를 사용하여 다른 서버의 DRAM과 디스크에 접근할 수 있다.
38쪽
p.38저장 옵션
  • 서버 내부에 디스크를 사용하거나, Infiniband를 통한 network-attached storage(네트워크 연결 스토리지)를 사용한다.
  • 웨어하우스 규모 컴퓨터(WSC)는 일반적으로 로컬 디스크에 의존한다.
  • Google 파일 시스템(GFS)은 로컬 디스크를 사용하며, 최소한 세 개의 복제본을 유지한다.
39쪽
p.39Warehouse-Scale computer (WSC)(웨어하우스 규모 컴퓨터)의 비용
  • 자본 지출(CAPEX) – WSC를 구축하는 비용 – watt당 $9에서 $13
  • 운영 지출(OPEX) – WSC를 운영하는 비용
40쪽
p.40프로그래밍 모델과 워크로드
  • 배치 처리 프레임워크: MapReduce
  • Map: 프로그래머가 제공한 함수를 각 논리적 입력 레코드에 적용한다.
  • • 수천 대의 컴퓨터에서 실행된다.
  • • 중간 값으로 새로운 키-값 쌍의 집합을 제공한다.
  • Reduce: 다른 프로그래머가 제공한 함수를 사용하여 값을 축소한다.
41쪽
p.41프로그래밍 모델과 워크로드
  • 예시:
  • map (String key, String value):
  • // key: 문서 이름
  • // value: 문서 내용
  • for each word w in value
  • // 모든 단어의 목록을 생성
  • EmitIntermediate(w, "1");
  • reduce (String key, Iterator values):
  • // key: 단어
  • // value: 카운트 목록
  • int result = 0;
  • for each v in values:
  • // 키-값 쌍에서 정수를 가져옴
  • result += ParseInt(v);
  • Emit(AsString(result));
42쪽
p.42프로그래밍 모델과 워크로드
  • 가용성:
  • • 데이터의 복제본을 서로 다른 서버에 사용한다.
  • • relaxed consistency(완화된 일관성) 사용:
  • • 모든 복제본이 항상 일치할 필요는 없다.
  • 파일 시스템: GFS 및 Colossus
  • 데이터베이스: Dynamo 및 BigTable
43쪽
p.43프로그래밍 모델과 워크로드
  • MapReduce 런타임 환경은 맵 및 리듀스 작업을 WSC 노드에 스케줄링한다.
  • 워크로드 요구사항은 종종 크게 달라진다.
  • 스케줄러는 이전 작업의 완료 여부를 기반으로 작업을 할당한다.
  • tail latency(꼬리 지연)/execution time variability(실행 시간 변동성): 단일로 느린 작업이 큰 MapReduce 작업을 막을 수 있다.
  • 런타임 라이브러리는 작업의 마지막 근처에서 작업을 복제한다.
  • straggler(지연 작업)을 기다리지 않고, 다른 곳에서 작업을 다시 실행한다.
44쪽
p.44질문?
  • 추천 독서:
  • 교재의 6장
단축키
Ctrl K · s자료 검색
[ ]이전·다음 강의
Space영상 재생·정지
j k다음·이전 section
n p다음·이전 slide
b강의 목록 접기·펴기
t맨 위
/강의 검색
Esc닫기