2015년 7월 27일 월요일

[Network] Link-layer addressing & address resolution protocol (ARP)

네트워크를 공부한지 하도 오래되서 link-layer address를 어디에 쓰는건지 잊어버렸다.(link-layer address, link address, physical address, MAC address 다 같은 말이다.)

Data communications and networking 5판의 9장을 참고하여 쓴다.

9.2 Link-Layer Addressing

Internet 같은 connectionless internetwork의 경우에 datagram(packet)을 IP 주소만을 이용해서 보낼 수는 없다.
Connectionless communication is a data transmission method used in packet switching networks by which each data unit is individually addressed and routed based on information carried in each unit, rather than in the setup information of a prearranged, fixed data channel as in connection-oriented communication (wikipedia, connectionless communication, connectionless internetwork)

각 datagram은 같은 source와 destination으로 이동하더도 다른 path를 가지게 된다.

datagram이 network layer에서 data-link layer로 가면 datagram이 frame으로 encapuslate되고 두 개의 data-link address가 frame header에 붙는다. 이 두 주소는 다른 링크로 갈 때 마다 바뀌게 된다.

아래 그림을 참고하자.








datagram의 Link-layer 주소가 link1, 2, 3에서 각각 다른 것을 알 수 있다. 윗면이 빨간색인 직육면체 박스는 LAN switch이고 가로로 긴 x가 들어간 타원은 라우터이다.

9.2.2 Address Resolution Protocol (ARP)

Path 상의 라우터 중 마지막 라우터를 제외하고는 forwarding table을 보고 다음 라우터의 IP 주소를 알 수 있다. source host는 default router의 IP 주소를 알고 있다. 마지막 라우터는 destination host의 IP 주소를 알고 있지만, 다음 노드의 IP 주소는 frame을 link를 통해 보내는데 도움이 안된다. 대신 다음 노드의 link-layer address(MAC address)를 가지고 있어야 한다. 그리고 ARP가 다음 노드의 MAC address를 가르쳐 줄 수 있다.

ARP accepts an IP address from the IP protocol, maps the address to the corresponding link-layer address, and passes it to the data-link layer.

Anytime a host or a router needs to find the link-layer address of another host or router in its network, it sends an ARP request packet.
패킷은 sender A의 MAC 주소와 IP 주소, 그리고 receiver의 IP 주소를 포함하고 있다. query는 link-layer broadcast address를 이용해서 link 전체에 브로드캐스트 된다. receiver들 중 해당하는 receiver는 자신의 IP와 MAC 주소를 ARP를 요청한 sender A에게 보낸다.

2015년 6월 30일 화요일

[리눅스 커널] 리눅스 커널의 블록 디바이스 I/O 과정

리눅스 커널의 블록 디바이스 I/O 과정의 기본적인 흐름



사용자 프로세스 -> 표준 C 라이브러리 -> 시스템콜 인터페이스 -> 가상파일시스템 -> ext4 파일시스템 -> 블록 디바이스 드라이버 -> 블록 디바이스(디스크)

블록 디바이스 -> (인터럽트) -> 블록 디바이스 드라이버 -> ext4 파일시스템 -> ... 역순

1. 사용자 프로세스는 실행 도중 파일을 읽기 위해 fread()라는 표준 C 라이브러리 함수를 호출
2. 이 함수는 read() 시스템콜로 구현되어 있으므로 read() 시스템콜을 호출, 커널에 파일 읽기 동작을 요청
3. 소프트웨어 인터럽트(=시스템콜)가 발생해 커널에 진입하면 호출한 시스템콜 번호에 따라 해당 시스템콜 종류를 판별, 현재는 read() 시스템콜이므로 리눅스 커널의 가상 파일 시스템(Virtual File System, VFS)에 파일(디스크) 읽기 요청을 하게 된다.
4. VFS가 ext4 파일시스템에게 읽기 동작을 요청
5. ext4 파일시스템의 read() operation은 파일시스템 관련 처리를 한 뒤 블록 디바이스 드라이버에 읽기 요청
6. 읽기 요청 받은 블록 디바이스 드라이버는 읽을 파일에 해당하는 블록 디바이스의 블록 단위 데이터를 메모리로 읽어오려고 하드웨어를 제어. 따라서 현재 프로세스는 블록 디바이스의 I/O 동작을 완료하기 전까지 sleep하게 됨. 즉 현재 프로세스 상태를 대기 상태(wait state)로 변경하고 스케줄러를 호출해 다른 프로세스를 실행함
7. 하드디스크가 읽기 요청을 받으면 메모리에 있는 리눅스 커널의 캐시 영역에 요청받은 데이터를 전송. 블록 I/O 연산은 대부분 DMA로 이루어짐.
8. 데이터 전송 완료하면 인터럽트 발생시켜 디바이스 드라이버에게 읽기 동작이 끝났음을 알려줌
9. 디바이스 드라이버에 등록된 인터럽트 핸들러 실행
10. 인터럽트 핸들러가 읽기 동작을 완료하면 대기하던 프로세스가 깨어나 실행상태(Running state)로 변경됨.
11. 블록 디바이스에서 읽은 파일 데이터는 현재 커널 영역에 있으므로, 사용자영역에서 접근할 수 없음. 그래서 커널 영역에서 사용자 영역의 표준 C 라이브러리 버퍼로 데이터를 복사해야 함. 사용자 영역으로 데이터 복사를 완료하면 커널의 read() 시스템콜 처리가 모두 끝났으므로 프로세스를 사용자 영역으로 전환함
12. 표준 C 라이브러리는 사용자 프로세스가 요청한 버퍼에 데이터를 복사함으로써 fread() 함수 처리를 끝내게 됨.



가상화 환경은 어떻게 다를까?
1. 전가상화 환경: 모든 단계가 동일하며 단지 블록 디바이스가 에뮬레이션한 가상의 블록 디바이스가 될 뿐임 -> IOMMU나 SR-IOV 등의 하드웨어 지원 가상화 기능을 사용하면 가상 머신이 디바이스에 직접 접근할 수도 있음.
2. 반가상화 환경: 블록 디바이스 드라이버에서 블록 디바이스에 접근하는 과정과 메커니즘이 다름.  (DomU 프론트엔드 드라이버 -> Dom0 백엔드 드라이버 -> Dom0 블록 디바이스 드라이버)


Reference
[1] Xen으로 배우는 가상화 기술의 이해, I/O 가상화. 한빛미디어(2014)

2015년 4월 14일 화요일

Xen overview

Reference: CPU scheduling for virtual desktop infrastructure, Hwanju Kim
Task-aware Virtual Machine Scheduling for I/O Performance, Hwanju Kim, VEE'09
Running Xen, Matthews, Prentice hall

Xen Overview

Xen is an open-source hypervisor based on a paravirtualization technique, which achieves higher performance than full virtualization approaches.
(Full virtualizatoin: allows a system to run many instructions directly on the raw ahrdware. It no longer must use software to simulate a different basic architecture.)

Xen puts the priviledged VM, called domain0, in charge of managing other guest VMs, called domainU.

Xen also supports full virtualization based on hardware-assisted virtualization(Intel-VT and AMD-V), ensuring that it is possible to run unmodified OSes such as Windows. such a full-virtualized domain is called a hardware virtual machine (HVM) by Xen.



The Xen Hypervisor

The Xen hypervisor is the heart of Xen. It sits between the guest domains and the physical hardware.
- allocate and control resources
- enforce protection and isolation
In this chapter, I describe the Xen hypervisor and how it interacts with guest domains.

Xen Hypervisor

The following list summarizes the role of the hypervisor:
1. The hypervisor gives each guest domain a portion of the full physical machine resources.

2.The hypervisor exports simplified devices to guest domains.

3. The hypervisor can modify portions of the physical architecture that are difficult to fully virtualize.