No Image

개발자를 위한 SSD (Coding for SSD) – Part 5 : 접근 방법과 시스템 최적화

2016-07-18 KENNETH 3

개발자를 위한 SSD (Coding for SSD) – Part 5 : 접근 방법과 시스템 최적화 지금까지 SSD 드라이브의 내부적인 작동 방식에 대해서 살펴 보았다. 또한 SSD를 접근할 때 어떤 방식이 사용되어야 하며, 그리고 그 접근 방법이 다른 방법보다 왜 나은지 등의 이해를 돕는 자료들도 제공했다. 이번 챕터에서는 읽기와 쓰기는 어떻게 처리되어야 하는지, 그리고 읽고 쓰기가 동시에 발생할 때 서로 어떤 간섭 효과를 내게 되는지를 살펴보도록 하겠다. 그리고 성능 향상을 위해서 파일 시스템 레벨에서 가능한 최적화에 대해서도 조금 언급하도록 하겠다 7. 액세스 패턴 7.1. 시퀀셜과 랜덤 I/O의 정의 이번 섹션에서 사용되는 시퀀셜(“sequential”)과 랜덤(“random”)이라는 단어로 SSD 액세스를 의미한다. 이전 I/O 오퍼레이션의 마지막 논리 블록 주소(LBA) 직후의 논리 블록 주소(LBA)를 시작 지점으로 SSD를 접근하는 경우 시퀀셜이며, 그렇지 않은 경우를 랜덤이라고 한다. 그리고 FTL에 의해서 동적으로 블록 맵핑이 실행되기 때문에, 논리 주소가 연속적이라고 해서 실제 물리적인 데이터의 위치가 연속적인 것은 아닐 수도 있다는 것도 기억해두자. [ more… ]

No Image

개발자를 위한 SSD (Coding for SSD) – Part 4 : 고급 기능과 내부 병렬 처리

2016-07-17 KENNETH 0

개발자를 위한 SSD (Coding for SSD) – Part 4 : 고급 기능과 내부 병렬 처리 이번 챕터에서는 SSD의 주요 기능인 TRIM과 Over-provisioning(Over-provisioning)에 대해서 간단히 살펴보도록 하겠다. 또한 SSD의 내부 병렬 처리와 클러스터링 블록에 대해서도 같이 살펴보도록 하겠다. 5. 고급 기능 5.1. TRIM 용응 프로그램이 SSD의 모든 논리 블록 주소에 파일을 기록했다고 가정해보자. 그러면 SSD는 풀(full)로 사용되었다고 생각될 수 있다. 이제 이 모든 파일들이 지워졌다고 가정해보자. 파일 시스템은 SSD가 100% 비어 있다고 보지만, SSD 컨트롤러는 호스트로부터 삭제된 논리 블록의 주소를 알지 못하기 때문에 실제 SSD 드라이브는 여전히 100% 사용중이라고 생각하게 된다. SSD 컨트롤러는 호스트의 파일 시스템으로부터 덮어 쓰기 명령이 전달될 때에만 그 영역이 빈 공간이라고 판단할 수 있게 되는 것이다. 이때 Garbage-collection 프로세스는 삭제된 파일과 연관된 블록들을 지울(Erase) 것이다. 결과적으로 블록이 “stale” 데이터를 가지고 있다는 것을 알아내는 순간 삭제(Erase)하는 대신 지연 처리되는 것인데, 이는 성능을 심각하게 떨어뜨리게 된다. 또 다른 우려 [ more… ]

No Image

개발자를 위한 SSD (Coding for SSD) – Part 3 : 페이지 & 블록 & FTL(Flash Translation Layer)

2016-07-16 KENNETH 0

개발자를 위한 SSD (Coding for SSD) – Part 3 : 페이지 & 블록 & FTL(Flash Translation Layer) 이번 챕터에서는 데이터 쓰기가 Block과 Page 레벨에서 어떻게 처리되는지, 그리고 쓰기 시에 발생하는 “Write Amplication”과 “Wear Leveling”의 기본적인 개념을 살펴보도록 하겠다. 추가로 FTL(Flash Translation Layer)이 무엇인지, 그리고 FTL의 2가지 목적인 논리적 블록 맵핑(Logical Block Mapping, 여기에서는 Hybrid Log Block Mapping 위주로)과 Garbage-collection도 같이 살펴볼 것이다. 3. 기본 오퍼레이션 3.1. 읽기 & 쓰기 & 삭제(Erase) NAND 플래시 메모리의 구성 특성상, 특정 셀을 단독으로 읽고 쓰는 작업은 불가능하다. 메모리는 그룹핑되어 있으며, 아주 특별한 방법으로만 접근할 수 있다. 그래서 NAND 플래시 메모리의 특별한 방법을 숙지하는 것은 SSD의 데이터 구조를 최적화하고 작동 방식을 이해하는데 있어서 꼭 필요한 부분이다. 이번 섹션에서는 SSD의 읽고 쓰기 그리고 삭제(Erase) 오퍼레이션이 실행되는 방법들을 살펴 보도록 하겠다. 읽기는 페이지 사이즈 단위로 실행(Reads are aligned on page size) 한번에 하나의 페이지보다 작은 크기의 데이터를 [ more… ]

No Image

개발자를 위한 SSD (Coding for SSD) – Part 2 : SSD의 아키텍처와 벤치마킹

2016-07-15 KENNETH 1

개발자를 위한 SSD (Coding for SSD) – Part 2 : SSD의 아키텍처와 벤치마킹 이 챕터에서는 NAND 플래시 메모리의 기본적인 내용과 셀 타입 그리고 SSD의 기본적인 내부 아키텍처에 대해서 살펴보고, 추가로 SSD의 벤치마킹 방법과 벤치마킹 결과를 해석하는 부분도 살펴보도록 하겠다. 1. SSD의 구조 1.1. NAND 플래시 메모리 셀 SSD(Solid-State Drive)는 플래시 메모리를 기반으로한 저장 매체이다. 비트들은 Floating-Gate 트랜지스터로 구성된 셀에 저장된다. SSD는 모든 컴포넌트가 전기 장치이며, HDD와 같은 기계 장치를 가지고 있지 않다. Floating-Gate 트랜지스터에 전압이 가해지면서 셀의 비트가 쓰여지거나 읽혀지게 된다. 트랜지스터는 NOR 플래시 메모리와 NAND 플래시 메모리 두 종류가 있는데(여기에서는 NAND의 NOR 플래시 메모리의 차이에 대해서 깊이 있게 살펴보지는 않을 것이다), 이 게시물에서는 많은 제조사들이 채택하고 있는NAND 플래시 메모리에 대해서만 살펴보도록 하겠다. NAND와 NOR 플래시 메모리의 상세한 차이에 대해서 궁금하다면, Lee Hutchinson1의 문서를 살펴보도록 하자. NAND 플래시 메모리 모듈의 중요한 속성은 수명이 제한적(Wearing-off)이라는 것이다. 트랜지스터는 셀에 전자를 저장하면서 쓰기를 [ more… ]

Let’s Encrypt: TLS for NGINX

2016-07-15 KENNETH 0

Let’s Encrypt: TLS for NGINX The following is adapted from a presentation given by Yan Zhu and Peter Eckersley from the Electronic Frontier Foundation (EFF) at nginx.conf 2015, held in San Francisco in September. You can watch the video of the complete talk on YouTube. Table of Contents 0:00 Introduction 00:29 Problem #1 – TLS is Not Ubiquitous 2:10 Problem #2 – Setting up TLS 2:52 How Long Does it Take to Setup TLS? 6:30 Problem #3 – TLS Configuration is Confusing 7:01 RC4 7:58 SHA‑1 8:28 Logjam 8:48 SSL Test 9:06 Problem #4 – Mixed Content Blocking 11:06 W3C 11:45 Problem #5 – Too Many CAs 13:30 The Let’s Encrypt Mission 14:14 Let’s Encrypt 24:01 TLS and HTTPS Problem 25:30 Default Client Functionality 34:19 Let’s Encrypt NGINX 35:20 Parse Configs 35:47 Authenticator 36:28 Installer 37:28 Write Out the Config and Reload NGINX! 37:37 Let’s Encrypt NGINX Demo 39:33 Get Involved 40:13 Get in Touch 0:00 Introduction Yan: Today, [ more… ]