[RE] Head of Line Blocking Prevention(HOL)이란?
Reg. Date: June 26, 2002 By 김학용
HOL 블록킹이라는 것은 입력 큐잉, 즉 큐가 스위치 패브릭의 압쪽에 사용되는
구조에서 발생하는 현상입니다. 이런 입력 큐잉 방식의 스위치에서는
출력 쪽에 (스위칭 되는 패킷을 잠시 저장할 공간 외에는) 큐가 없습니다.
그런데, 만약 동시에 여러 입력 포트에서 특정 출력 포트로 향하는 패킷이
있다고 가정하면, 한 개의 패킷 외에 나머지 패킷들(blocked packet)은
입력 포트에 큐잉되어서 다음 기회를 기다려야 하겠죠.
보통 입력 큐는 FIFO로 구성이 되는데, 이런 블록킹된 패킷은 FIFO의 맨 앞쪽,
보통 HOL(head of line)에서 담번 기회를 기다립니다. HOL blocking 이라는 것은
이런 패킷이 그 뒤에 있는 패킷들이 서비스될 수 있는 기회를 막아버리는
현상을 말하죠.
간단히 입력과 출력 포트가 각각 2개씩 있는 스위치를 생각해 봅시다.
1번 입력 FIFO에는 1 1 1 2 2 1 2 - - - 로 패킷이 저장되어 있고,
2번 입력 FIFO에는 1 2 2 2 2 1 - - - - 로 패킷이 저장되어 있다고 가정합시다.
이때 각 입력포트의 FIFO의 HOL 위치에는 모두 1번 포트로 향하는 패킷이
있죠. 만약 스케줄러가 1번 입력에 있는 패킷을 선택했다고 가정합시다.
그러면 1번 출력 포트는 이 선택된 패킷을 받겠죠. 이게 전부입니다.
왠지 찜찜하죠. 이런 경우 2번 출력포트는 아무런 패킷도 받고 있지 않기 때문에
자신을 향하는 패킷이 있으면 받아주면 좋겠죠. 입력 큐를 보니깐, 2번 입력의
두번째 패킷(선택되지 않은 패킷 다음의 패킷)이 2번 출력으로 향하는데,
앞에 1번 출력으로 향하는 선택되지 않은 패킷때문에 서비스가 될 수 없습니다.
이처럼 HOL 위치에서 스케줄러에 의해 선택되지 못한 패킷이 자신의 뒤에서
놀고 있는 출력 포트로 향하는 패킷이 서비스 되는 것을 막는 현상을 HOL
블록킹이라고 합니다. 만약 다음 기회에도 1번 입력에 있는 패킷이 1번 출력에
대해 선택되면 여전히 2번 출력으로 향하는 패킷은 블락되게 됩니다.
아주 성능이 나빠지겠죠.. 입력 큐잉 방식의 스위치에서, 이상적인 트래픽
패턴에 대한 성능은, 여기서 예를 든 경우의 2x2 스위치에 대해서는 0.75 밖에
되지 않구요, 스위치의 포트 수가 늘어남에 따라 0.586까지 줄어들게 됩니다.
여기서, 1번 출력으로 향하는 패킷으로 2번 입력 FIFO의 패킷이 선택되면
어떻게 될까요? 이런 경우도 2번 입력 FIFO의 두번째 있는 2번 출력으로
향하는 패킷이 서비스 될 수 있을까요? 스위칭 시스템에 따라 다르겠지만,
일반적으로 입력포트는 특정 시간동안 하나의 패킷만을 서비스 할 수 있도록
되어 있습니다. 그래서, 이번에는 서비스가 될 수 없습니다. 그러나, 담번에는
1번 출력으로 향하는 패킷은 1번 입력에 있는 것이 선택될 것이고 2번 출력으로
향하는 패킷은 2번 입력에 있는 패킷이 선택되게 되겠죠.
앞에서도 말한 것처럼, 입력 큐잉 방식의 스위칭은 HOL 블록킹으로 인해
성능이 0.6 근처에서 제한되는 문제가 있기 때문에, HOL 블록킹을 해결하려는
노력들이 많이 이루어지고 있습니다. 대표적인 것이 각 입력 포트마다 출력
포트의 개수만큼의 FIFO를 두어서 목적지별로 패킷을 관리하는 것인데,
Virtual Output Queueing (VOQ) 방식이라고 합니다. 그리고, window 방식,
grouping 방식, improved FIFO 방식 등 다양한 방법이 있으나, 이들은 최근에
구현되는 장비에서는 거의 사용되고 있지 않습니다.
>스위치 칩의 특성 중에서 HOL에 대해 나오는데 감을 못 잡겠네요.
>설명좀 부탁드리겠습니다.