2015. 7. 20. 17:30

- 성능 측면에서 virtio 네트워크 어댑터는 Intel PRO/1000 보다 선호된다

  이것은 어댑터들 중에서 PCNet 종류가 선호된다.

- virtio와 Intel PRO/1000의 어댑터들은 세그멘테이션과 offloading 체크섬의 이익을 즐긴다.

  Segmentation offloading은 컨텍스트 스위칭이 덜하고, 

  VM/호스트 경계를 가로지르는 패킷의 사이즈가 

  급격하게 증가되는 것을 허락하기 때문에 고성능을 위해 필수적이다

- 3개의 타입(internal, bridged and host-only)은 거의 동일한 성능을 가진다

- internal 타입은 조금 더 빠른데 호스트의 네트워크 스택에 

절대 접근하지 않을 만큼의 패킷으로 CPU 사이클을 덜 사용하기 때문이다

- NAT 접근은 네트워크 주소 변경(network address translation)을 

  제공하기 때문에 모든 타입들 중에서 가장 느리다

 - VM에 할당된 CPU의 수는 네트워크 성능을 개선시키지 않는다

   어떤 경우에는 게스트에서 증가된 동시성 때문에 더 느릴 수 있다


네트워크 성능을 개선시키지 위한 짧은 요약

1. 가능할 때마다 virtio 네트워크 어댑터를 사용해라, 그렇지 않으면 Intel PRO/1000 어댑터 중에 하나를 사용해라

2. NAT 대신에 bridged 접근을 사용해라

3. 게스트 OS에서 Segmentation offloading이 사용 가능한지 확인해라

   그것은 보통 디폴드로 설정 되어 있다

   offloading 설정을 변경하거나 확인하고 싶으면 리눅스 게스트에서 ethtool 명령어를 사용해라

2015. 7. 20. 16:56

- 브리지 네트워킹에서, Virtual Box는 물리적 네트워크 어댑터로부터 

  데이터를 걸러내기 위해 호스트 시스템의 디바이스 드라이버를 사용

- 이 드라이버는 "net filter" 드라이버라고 불린다

- 이 것은 물리적 네트워크로부터 데이터를 가로채거나

   데이터가 그곳(물리적 네트워크)으로 침투하는 것을 허락한다

- 효과적으로 소프트웨어에서 새로운 네트워크 인터페이스를 생성하는 것이다

- 게스트가 그런 새로운 소프트웨어 인터페이스를 이용할 때,

  호스트 시스템에게는 게스트가 네트워크 케이블을 이용하여 

  물리적으로 직접 인터페이스에 연결되었다고 보여진다

- 호스트는 인터페이스를 통해 게스트에게 데이터를 전할 수 있고

  그것으로부터 데이터를 받을 수 있다

- 이것은 게스트와 네트워크 나머지 장비들 사이에 라우팅이나 브리징을 

   직접 설정할 수 있다라는 것을 의미한다

- 이러한 작업을 하기 위해 Virtual Box는 호스트 시스템 상에서 

  디바이스 드라이버를 필요로 한다



- 브리지 네트워킹을 가능하게 하기 위해 할 일은 

가상 머신의 설정 다이얼로그를 열고,

네트워크 페이지로 가서 "Attacted to" 필드에서 Briged network를 선택한다

- 마지막으로 페이지의 아래에 리스트로부터 원하는 

  호스트 인터페이스를 선택한다.

이것은 너의 시스템의 물리적 네트워크 인터페이스를 포함한다


* 한계 

- 리눅스 : 무선 인터페이스를 이용하여 브리지 네트워킹을 할 때 

             기능이 제한적이다 

             현재 무선 상에서 오직 IPv4를 지원한다.

- 또한 Marvell Yukon II EC Ultra Ethernet NIC 상에서 sky2 드라이버에 의해 

  제공되는 무선 인터페이스 상에서 MTU를 1500 이하로 설정하는 것은 

특정한 조건 하에서 패킷 손실이 일어난다

2015. 7. 20. 16:09

Virtual Box 네트워킹 모드 - Network Address Translation(NAT)


- 가상 머신에서 외부 네트워크에 접근하는 가장 간단한 방법

- 호스트 네트워크와 게스트 시스템 상에서 어떤 구성도 필요하지 않음

- 이러한 이유로 Virtual Box에서 디폴트로 설정됨

- 진짜 컴퓨터와 같이 라우터를 통해 인터넷에 연결

- 이 경우에 라우터는 Virtual Box  네트워킹 엔진

- 이 라우터는 각각의 가상 머신과 호스트 사이에 위치

이 구분은 가상 머신끼리 서로 통신하지 않기 때문에 보안이 최대화

- 단점 : 가상 머신은 외부로부터 보이지도 않고 접근할 수도 없음

         => 따라서 이 방식으로는 서버를 운영할 수 없음

- 가상 머신은 Virtual Box에 통합된 DHCP 서버로부터 개별 네트워크 상의

   네트워크 주소와 구성을 받는다.

- 따라서 가상 머신에 할당된 IP 주소는 보통 호스트보다 

  완전히 다른 네트워크 상에 있다

- ex) 가상 머신에 하나보다 많은 카드가 설정 되어 있을 때

       첫 번째 카드는 10.0.2.0이라면, 두 번째 카드는 10.0.3.0 등으로 연결된다


* NAT 한계

- NAT의 4가지 한계가 있는데 이것은 사용자들이 알아야 한다.


1.  ICMP 프로토콜 한계 : 자주 사용되는 네트워크 디버깅 툴은(ping or tracerouting)

                                메시지를 보내고 받는데에 ICMP 프로토콜에 의존한다

                                ICMP 지원이 Virtual Box 2.1부터 개선되었지만, 

                                일부 다른 도구들은 신뢰적으로 작동하지 않을 수 있다.


2. UDP 브로트캐스트를 받는 것이 신뢰할 수 없음

  - 게스트가 특별한 포트 상에서 UDP 데이터를 보낸 후에 

    리소스를 저장하기 위해서 일정시간 동안 오직 리슨을 하기 때문에 

    게스트가 브로드캐스트를 확실히 받을 수 없다. 


3. GRE와 같은 프로토콜이 지원 안 됨

  - TCP와 UDP 말고 다른 프로토콜은 지원이 안 된다


4. 1024 미만의 호스트의 포트를 보내는 것은 불가능함

  - root에서 실행되지 않는 응용프로그램은 

    1024 이하의 포트를 묶는 것은 불가능하다

  - 그 결과 그러한 포트 전송을 구성하기를 시도하면 가상 머신은 시작을 안 한다.

  - ex) NFS 는 포트 번호가 1024 미만이기 때문에 

    서버는 연결을 거절하는 구성을 취한다





2015. 7. 16. 14:50







2015. 7. 15. 16:40
    / : 최 상위 경로
/bin : 기본 명령어 위치 , CentOS 7부터는 /usr/bin 으로 
                심볼릭 링크 되어 있다.
/boot : 커널 이미지, 부트로드 관련 파일 존재, 
                  별도의 파티션으로 할당을 권장하고 있다. 
/dev : 장치 파일이 저장된 디렉토리
/etc : 설정관련 파일 및 디렉토리
/lib : 라이브러리 , CentOS 7부터는 /usr/lib 으로 심볼릭 링크 되어 있다.
/media : CD, DVD, USB 저장장치 마운트되는 곳이다.
/opt : 추가적인 소프트웨어 설치 디렉토리
/sbin : 시스템 관리자를 위해 사용되는 명령어 등이 저장되는 디렉토리, 
                   CentOS 7부터는 /usr/sbin/으로 심볼릭 링크되어 있다.
/srv : 시스템 서비스들
/tmp : 임시 디렉토리 
/usr : 시스템이 아닌 일반사용자가 사용하는 프로그램이 설치된 디렉토리
/var :  시스템 운용중에 저장되는 자료
/home : 사용자들의 홈디렉토리
/root : root 사용자의 홈디렉토리
/proc : 커널과 프로세스를 위한 가상 파일 시스템


2015. 7. 15. 16:39

드디어 기다리고 기다리던 리눅스에 발을 들였다...


15년 전에 레드햇 한 번 깔아보려고... 애썼건만 실패하고


3년 전에 우분투 한 번 깔아보려고 책까지 샀건만 실패하고...


드디어 회사에서 다시 한 번 시작이다


한 번 잘 해보자~~!

2009. 3. 6. 12:18

x1 = P1 * X1
x2 =  P2 * X2

여기에서  P1 = [R1 | t1]; 이다. R1은 SO(3)에 포함되고 t1은 3D vector 이다.

1. Reconstruction Method

P1(t) = p1 + t * v1;
P2(s) = p2 + s * v2;

다음과 같이 되기 때문에 P1 과 P2 가 같게 되는 t와 s를 각각 구하면 된다.

두 장의 영상에서 임의의 점에 대한 대응점을 x와 x'이라고 하면
다음과 같이 만들 수 있다.
(x와 x'은 영상 좌표의 homogeneous coordinate 이다)
xn = K-1 * x;
xn' = K-1 * x';
p1 = - R1' * t1;
p2 = - R2' * t2;
v1 = R1' * xn;
v2 = R2' * xn';

위의 4개의 vector p1, p2, v1, v2를 이용하여
다음과 같은 식으로 t와 s를 구할 수 있다.

k1 = p2 - p1;
k2 = v1 x v2;
M1 = [k1 v2 k2];
M2 = [k1 v1 k2];
t = det(M1) / (k2' * k2);
s = det(M2) / (k2' * k2);

t와 s를 구하면 P1(t) 와 P2(s) 에 각각 대입하면

같은 3D 좌표가 나오게 되고 이게

실제 3차원 상의 점이 된다.