앞서 우리는 bandwidth 증가나 latency 감소처럼 자원 할당 효율을 높이는 데 집중했다. 그러나 routing이나 flow control이 완벽하더라도, 특정 자원에 대한 요청이 그 용량을 초과하는 상황은 여전히 발생한다. 이럴 때는 자원을 얼마나 효율적으로 배분할 것인가보다는, 어떤 service policy에 따라 자원을 공정하게 배분할 것인가에 주의를 기울여야 한다. 이 장에서는 network client가 요청하는 일반적인 서비스들과, 해당 서비스를 제공하는 메커니즘에 대해 설명한다. 이러한 주제 전반을 우리는 QoS(Quality of Service)를 제공하는 것으로 통칭한다.
15.1 Service Classes and Service Contracts
일부 interconnection network에서는 트래픽을 여러 클래스로 나누어 자원 할당을 좀 더 효율적으로 관리한다. 클래스마다 요구사항이 다르다. 어떤 클래스는 latency에 민감하고, 어떤 클래스는 latency에는 둔감하지만 jitter는 허용하지 않는다. 어떤 클래스는 packet loss를 허용할 수 있고, 어떤 클래스는 전혀 허용하지 않는다. 또한 중요도도 다르기 때문에, 생명 유지 시스템에 필요한 packet은 오락 시스템의 오디오 packet보다 우선순위가 높다.
클래스에 따른 자원 할당은 더 중요한 서비스에 더 많은 자원을 할당하거나, 클래스의 특성에 맞게 할당 방식을 조정하는 데 도움이 된다. 예를 들어, 상위 클래스 packet에는 buffer나 channel을 우선 할당하거나, 전체 자원 중 큰 비율을 제공할 수 있다. latency가 낮아야 하는 packet은 앞서 보내고, jitter를 줄여야 하는 packet은 예측 가능한 delay를 갖게 스케줄링하며, 손실을 허용하는 클래스는 손실 불가한 클래스보다 먼저 버려진다. 이런 방식은 모든 packet이 동일한 서비스를 받는 것보다 훨씬 효율적인 자원 할당이 가능하다.
트래픽 클래스는 크게 guaranteed service class와 best effort class로 나뉜다. guaranteed service는 특정 조건을 만족하는 한 일정 수준의 성능을 보장한다. 이는 network와 client 사이의 service contract를 의미하며, 일반적으로 client는 일정 수준 이하의 traffic만을 inject해야 하며, network는 그에 대한 loss rate, latency, jitter 등을 보장한다. 예를 들어, class A의 packet은 100ns 동안 1Kbit 이하를 inject할 경우, 99.999% 이상이 1μs 이내에 손실 없이 전달된다.
반면 best effort class는 어떤 보장도 하지 않는다. 이러한 packet은 delay가 길어지거나 drop될 수도 있다. network는 단지 최선의 노력을 할 뿐이다. 이는 마치 Federal Express(guaranteed)와 USPS mail(best effort)의 차이처럼 비유된다. best effort class 내에서도 여러 등급이 있을 수 있다.
하나의 클래스 내부, 특히 best effort class 내에서는 fairness가 중요하다. flow는 같은 클래스를 구성하는 가장 작은 단위이며, source, 목적지, 애플리케이션 등 기준은 다양하다. 동일한 클래스의 두 flow가 서로 매우 다른 서비스를 받는다면 network는 공정하지 않다고 볼 수 있다. 이 fairness는 아래에서 더 정확히 정의된다.
15.2 Burstiness and Network Delays
service 보장에는 단순한 속도 외에 delay와 jitter도 포함된다. 이를 위해서는 flow의 burstiness를 고려해야 한다. bursty하지 않은 flow는 일정한 패턴으로 데이터를 전송하며, bursty한 flow는 특정 순간에 많은 데이터를 몰아서 보낸다.
예를 들어, 하나는 2/3 packet/cycle의 비율로 꾸준히 전송하고, 다른 하나는 1/3 packet/cycle 비율이지만 한꺼번에 몰아보낸다. 이 두 flow가 1 packet/cycle의 channel을 공유하면, non-bursty flow의 jitter는 1에서 2 cycle로 증가하고, bursty flow는 최대 4 cycle의 delay를 겪는다. 이는 bursty한 flow가 다른 flow의 delay나 jitter에 큰 영향을 미칠 수 있음을 보여준다.
15.2.1 (σ, ρ) Regulated Flows
QoS를 위한 흐름 모델링 방식 중 하나는 (σ, ρ)로 나타내는 것이다. 여기서 ρ는 평균 전송 속도이며, σ는 burstiness를 나타낸다. 시간 T 동안 전송 가능한 최대 bit 수는 σ + ρT이다. 이는 평균보다 얼마나 bursty할 수 있는지를 정의한다.
예를 들어 100ns 동안 1Kbit 이하를 inject한다는 것은, ρ가 10Gbps이고, σ는 1Kbit임을 의미한다.
(σ, ρ) flow는 regulator를 통해 제어할 수 있다. regulator는 input queue와 token queue로 구성되며, token은 ρ rate로 주기적으로 생성된다. token queue의 크기 σ가 burstiness를 제어한다. 이 구조는 bursty한 flow가 network에 미치는 영향을 줄일 수 있다.
※ 실제 구현에서는 token queue 대신 credit counter를 사용할 수 있다. 이 counter는 ρ 속도로 증가하고 σ에서 포화되며, credit이 있을 때만 packet을 전송할 수 있다.


15.2.2 Calculating Delays
(σ, ρ)로 표현된 flow를 기반으로 deterministic한 delay 상한을 계산할 수 있다. 예를 들어, 두 개의 입력 flow가 하나의 multiplexer를 통해 합쳐지는 경우를 생각해보자. 각각의 flow는 (σ₁, ρ₁), (σ₂, ρ₂)로 규제되며, 입력과 출력 모두 bandwidth는 b로 동일하다고 가정한다.
이러한 구조는 queueing delay 분석에 사용된다. 이후 그림 15.3에서 이 구조를 기반으로 지연 시간 분석이 이어진다.

그림 15.3은 multiplexer의 queue 크기를 시간에 따라 나타낸 것으로, queue가 비어 있지 않은 최대 구간을 만들기 위한 adversarial input에 대한 전략을 보여준다. 기울기가 증가하는 구간은 한쪽 또는 양쪽 입력이 injection channel bandwidth가 허용하는 최대 속도로 전송하는 구간을 나타낸다. 양쪽의 burst가 끝나면 queue는 서서히 비워진다.
packet이 output으로 선택되는 방식에 대한 유일한 가정은 multiplexer가 work-conserving이라는 것이다. 즉, queue에 packet이 있으면 output channel은 idle 상태가 아니다.
시스템이 안정적이고 최대 지연이 정의되기 위해서는 ρ₁ + ρ₂ < b 조건을 만족하면 충분하다. 이 조건은 multiplexer queue가 비게 되는 순간이 존재함을 보장하고, 이는 곧 packet delay의 최대값이 queue가 비어 있지 않은 시간 구간으로 제한된다는 것을 의미한다. 따라서 최대 packet delay를 구하려면 queue가 가장 오랫동안 비어 있지 않게 만드는 adversarial input을 찾으면 된다.
adversarial 전략은 세 단계로 요약된다. 첫 번째 단계에서는 t = 0부터 양쪽 입력이 동시에 rate b로 전송을 시작한다. 입력은 총 2b 속도로 queue에 들어오지만, multiplexer는 b 속도로만 drain할 수 있기 때문에 queue는 rate b로 증가한다. 이는 그림 15.3의 첫 번째 직선 구간의 기울기로 나타난다. 이 단계는 어떤 입력 하나가 자신의 (σ, ρ) 조건을 위반하지 않기 위해 더 이상 b rate를 유지할 수 없는 시점까지 계속된다. 첫 번째 flow가 먼저 이 지점에 도달한다고 가정하면, 이때의 시간 t₁은 다음과 같다:
t₁ = σ₁ / (b - ρ₁)
두 번째 단계에서는 첫 번째 flow가 rate ρ₁로만 전송할 수 있으며, 두 번째 flow는 여전히 b rate로 전송한다. 이로 인해 총 injection rate는 ρ₁ + b이고 drain rate는 b이므로 queue는 계속 증가하지만 증가 속도는 ρ₁이다. 이 단계는 두 번째 flow가 b rate를 유지할 수 없는 시점인 t₂까지 지속되며, 이때
t₂ = σ₂ / (b - ρ₂)
세 번째 단계에서는 두 flow 모두 burst를 소진한 상태로, 각각 ρ₁, ρ₂ rate로 steady-state 전송을 한다. 이때 queue는 b - ρ₁ - ρ₂ 속도로 줄어들며, queue가 비워지는 데 걸리는 시간은 다음과 같다:
t_drain = q_max / (b - ρ₁ - ρ₂)
여기서 q_max는 앞의 두 단계에서 누적된 queue 크기이다.
q_max = b·t₁ + ρ₁(t₂ - t₁) = σ₁ + ρ₁σ₂ / (b - ρ₂)
따라서 최대 delay는 queue가 비어 있지 않은 구간의 총 시간으로 다음과 같이 계산된다:
D_max = t₂ + t_drain = (σ₁ + σ₂) / (b - ρ₁ - ρ₂)
이 input 전략이 실제로 D_max를 최대화한다는 것은 [42]에서 증명되었으며, 양쪽 flow의 burst를 완전히 사용하고 queue를 최대로 만드는 전략이 최대 delay를 유도한다는 점에서 직관적이다. 이 방식은 다양한 네트워크 요소의 delay 계산에도 적용 가능하다.
✅ 왜 최대 지연 계산이 중요한가?
- 서비스 보장(QoS)을 위해 필요함
어떤 클래스의 트래픽에 대해 일정 수준 이하의 latency나 jitter를 보장하려면, 그 트래픽이 최악의 경우에도 얼마나 지연될지를 알아야 함. 예: "1μs 이하의 latency를 보장합니다" 같은 서비스 약속. - 네트워크 설계 시 자원 할당 근거로 사용됨
router나 multiplexer 같은 구성 요소에 얼마나 많은 buffer나 bandwidth가 필요할지를 예측하기 위해, 이론적인 최대 지연값을 알아야 함. - 공정성 판단에도 활용 가능
하나의 flow가 너무 많이 지연되는 경우, 자원이 공정하게 배분되지 않았을 수 있으므로, 지연 분석은 공정성(fairness) 평가에도 유용함.
15.3 Implementation of Guaranteed Services
guaranteed service를 구현하는 방법에는 여러 가지가 있다. 가장 간단한 방법은 aggregate resource allocation이며, 이는 특정 flow에 자원을 고정으로 할당하지 않고 전체 클래스의 자원 사용량에 기반하여 네트워크가 요청을 수락하는 방식이다. 이는 하드웨어 비용이 적고 구현이 간단하지만, delay bound가 느슨하다.
더 낮은 delay를 얻기 위해서는 space, 또는 space와 time을 함께 고려한 자원 예약이 필요하다. 이 경우 자원 예약 정보를 저장하기 위한 하드웨어가 추가로 필요하다.
15.3.1 Aggregate Resource Allocation
가장 간단한 guaranteed service 구현 방식은 트래픽 클래스 C의 총 요청량 ΣC가 일정 한도 이하일 것을 요구하는 것이다. 이 조건만 만족하면 네트워크 과부하를 피할 수 있고, packet loss 없이 특정 delay 특성을 보장할 수 있다. 이는 가장 단순한 guaranteed service 방식이며, 각 flow에 자원을 별도로 할당하지 않기 때문에 추가 하드웨어가 거의 필요 없다.
그러나 클래스 C에 속한 여러 input flow가 섞이면서, 결과적으로 output flow는 더욱 bursty해진다. 이로 인해 delay bound는 느슨해지고 jitter 보장이 어려워진다.
aggregate allocation에서는 client가 명시적으로 요청할 수도 있고, implicit하게 네트워크가 판단할 수도 있다. 예를 들어, packet switching 네트워크에서는 입력 또는 출력 포트가 과부하되지 않는 한 어떤 자원 요청이든 수락 가능하다. 포트가 처리 가능한 bandwidth를 초과하여 traffic을 수용하거나 전달해야 하는 경우, 해당 포트는 oversubscribed 상태이다.

그림 15.4의 예를 보자. 2-ary 2-fly 네트워크에 stage를 하나 더 추가하고, 트래픽을 중간 단계에서 random switch를 통해 목적지로 보낸다. 여기에는 bursty한 flow (노드 0 → 1)와 non-bursty한 flow (노드 2 → 0)가 있다. 자원을 flow별로 고정할 수 없는 aggregate 방식에서는 두 flow 사이에 coupling이 생기며, 이로 인해 non-bursty flow의 jitter가 증가한다. 또한 randomized routing은 시간뿐 아니라 공간에서도 burstiness를 유발한다. 평균적으로는 균형이 맞지만, 순간적으로는 불균형이 생기기 때문이다.
이러한 효과를 고려하고 15.2.2절의 delay 결과를 적용하면 다음과 같은 delay bound를 얻을 수 있다. 두 flow 모두 (σ, ρ)로 규제되며, bursty flow는 ρ₁ = 0.75Gbps, σ₁ = 1,024 bits이고, non-bursty flow는 ρ₂ = 0.75Gbps, σ₂ = 64 bits이다. channel bandwidth b = 1Gbps이고, 최대 packet 길이는 L = 128 bits이다.
randomized routing으로 인해 flow는 두 개의 sub-flow로 나뉘며, 각 sub-flow의 rate는 ρ/2이다. burstiness는 packet 단위 granularity로 인해 단순히 반으로 줄어들지 않고 상한은 (σ + L)/2가 된다.
즉,
σ′₁ ≤ (1024 + 128)/2 = 576 bits
σ′₂ ≤ (64 + 128)/2 = 96 bits
second stage에서 두 sub-flow가 multiplexer에 의해 병합되며, 15.2.2절의 결과를 적용하면 delay는 다음과 같다:
D_max = (σ₁ + σ₂ + L) / (2b − ρ₁ − ρ₂)
= (576 + 96) / (0.25Gbps) = 2.688μs
지연이 전혀 없는 경우도 가능하므로 jitter는 D_max와 동일할 수 있다. 마지막 단계에서 destination으로 가기 전 또 한 번의 multiplexing이 발생하며, 유사한 방식으로 delay를 계산할 수 있다.
15.3.2 Resource Reservation
더 강력한 delay와 jitter 보장이 필요한 경우에는 aggregate allocation보다 자원을 명시적으로 예약하는 방식이 필요하다. 이 경우 예약 정보를 네트워크 내에 저장해야 하므로 더 많은 하드웨어 자원이 필요하다. 여기서는 두 가지 예약 방식—virtual circuit과 time-division multiplexing(TDM)—을 소개한다.
Virtual circuit 방식은 각 flow에 대해 네트워크 내 고정된 경로를 할당하여 공간상 자원을 예약하는 방식이다. 예를 들어 ATM(Asynchronous Transfer Mode)에서 사용된다. 이 방식은 delay와 jitter의 주요 원인을 제거할 수 있다. 첫째, 자원이 공간적으로 예약되므로 randomized routing 등으로 인한 변동성이 사라진다. 둘째, 서로 영향을 미치는 flow 간 coupling을 피하기 위해 경로를 분리할 수 있다. 예를 들어, 앞서 본 2-ary 2-fly 구조에서 non-bursty flow는 bursty flow와 경로를 다르게 설정하여 jitter를 줄일 수 있다.

보다 엄격한 보장이 필요할 때는 TDM(Time-Division Multiplexing)을 사용한다. TDM은 시간과 공간 모두에서 특정 flow가 사용하는 자원을 완전히 독점하도록 구성한다. 이로 인해 다른 flow가 해당 자원을 공유하지 않게 되어, 예측 가능한 성능을 제공할 수 있다.
TDM 방식에서는 시간을 일정한 크기의 slot으로 나누고, 각 slot은 flit 하나를 전송할 수 있는 시간에 대응한다. 예를 들어 시간 단위를 32개의 slot으로 나누고, 각 slot이 1 flit 전송 시간이라면, bandwidth가 1 GByte/s인 채널에서 최소 32 MByte/s 단위로 bandwidth를 할당할 수 있다. 어떤 flow가 256 MByte/s를 요구한다면, 필요한 자원마다 8개의 slot을 요청하면 된다.

그림 15.6에서는 4-slot 기반 TDM 네트워크에서의 할당 예시를 보여준다. 일부 채널은 두 flow가 공유하지만, 각 slot은 특정 flow에 고유하게 할당되어 있어 서로 영향을 주지 않는다. 이런 방식으로 bursty한 flow와 자원을 공유하더라도 다른 flow의 burstiness가 증가하지 않는다.
slot 할당은 연결이 미리 정해진 경우 offline으로 계산할 수도 있고, 동적으로 연결이 추가되거나 제거되는 경우 online으로도 처리할 수 있다. 하지만 최적 할당을 찾는 문제는 일반적으로 NP-hard이며, 실무에서는 heuristic 방식을 사용한다. 하나의 heuristic 예시는 Exercise 15.5에서 다룬다.
각 자원에는 timewheel을 연결하여 시간별 자원 예약 상태를 저장할 수 있다. 현재 시간 slot을 가리키는 포인터가 존재하며, 해당 slot에서 자원을 사용할 수 있는 flow를 나타낸다. 사용되지 않는 slot은 "BE"로 표시되어 best-effort traffic이 사용할 수 있음을 의미한다. 시간이 흐르면 포인터는 다음 entry로 증가하며, 끝에 도달하면 다시 처음으로 돌아간다.
15.4 Implementation of Best-Effort Services
Best-effort 서비스 구현에서 QoS 측면의 핵심은 여러 best-effort flow 간의 공정성(fairness)을 제공하는 것이다. 마찬가지로, guaranteed service 내에서도 자원이 완전히 예약되지 않았을 경우에는 유사한 공정성 문제가 발생할 수 있다. 여기서는 두 가지 공정성 정의—latency fairness와 throughput fairness—를 소개하고, 각각의 구현 이슈를 설명한다.
15.4.1 Latency Fairness
latency fairness의 목적은 동일한 자원을 경쟁하는 여러 flow에 대해 동일한 지연을 제공하는 것이다. 이 개념을 설명하기 위해, 그림 15.7처럼 복잡한 주차장에서 차들이 출구로 나가는 상황을 예로 들어보자. 각 열에는 차들이 줄지어 서 있으며, 출구는 하나의 공유 경로다.

일반적인 운전 예절에서는 병합 지점에서 번갈아 차를 보내는 것이 공정하다. 이를 locally fair arbitration이라 부른다. 이 방식에서는 각 병합 지점에서 차들이 번갈아 나가므로 겉보기에 공정해 보인다. 하지만 D1은 가장 먼저 도착했음에도 불구하고, A열 차들보다 훨씬 늦게 출구에 도달한다. 24열까지 확장하면 마지막 열의 첫 번째 차량은 1년 이상 기다려야 나갈 수 있을 것이다.
이러한 문제를 해결하려면, 자원 요청자 중 가장 오래된 요청이 우선권을 가지는 latency fair arbitration을 도입해야 한다. 이 방식은 각 merge point에서 두 요청 중 더 오래된 요청을 먼저 처리하며, 결과적으로 각 열에서 한 대씩 돌아가며 나가는 구조가 된다. 네트워크에서는 이를 age-based arbitration이라고 하며, 패킷이 network에 inject된 시간 기준으로 가장 오래된 packet이 우선 접근권을 가진다.
이 방식은 latency fairness를 크게 향상시키지만, 전체 네트워크에서 완전한 latency fairness를 달성하는 것은 어렵다. 이유는 priority inversion 문제가 발생할 수 있기 때문이다. 즉, 우선순위가 높은(오래된) 패킷이 우선순위가 낮은(최근) 패킷 뒤에 막히는 현상이다. 이러한 문제는 다음에 소개할 throughput fairness에서도 동일하게 발생하며, Section 15.5에서 소개할 non-interfering network 설계를 통해 해결할 수 있다.
15.4.2 Throughput Fairness
latency 중심의 fairness와 달리, throughput fairness는 동일한 자원을 경쟁하는 flow들에 대해 동일한 bandwidth를 제공하는 것을 목표로 한다. 그림 15.8(a)는 세 개의 flow가 하나의 공유 채널을 사용하는 상황이다. 각 flow는 0.5 packet/cycle을 요청하지만 채널은 총 0.75 packet/cycle만 처리 가능하다. 따라서 각각의 flow는 0.25 packet/cycle씩 할당받는 것이 throughput 공정한 할당이다.

하지만 각 flow의 요청률이 달라지면 상황은 더 복잡해진다. 그림 15.8(b)에서는 각각 0.15, 0.5, 0.5 packet/cycle을 요청한다. 이 경우에는 여러 정의가 있을 수 있으나, 일반적으로 사용되는 정의는 max-min fairness이다. max-min fairness란, 어떤 flow의 할당량을 늘리면 그것보다 같거나 적은 할당을 가진 다른 flow의 할당량을 줄이지 않고는 늘릴 수 없는 상태를 말한다. 이 조건을 만족하는 할당이 바로 그림 15.8(b)에서 보여진 상태다.
max-min fairness는 다음과 같은 알고리즘으로 달성할 수 있다. N개의 flow가 있을 때, 각 flow i는 요청 bandwidth bᵢ를 갖고 있고, 모든 bᵢ를 오름차순으로 정렬한다고 하자. 그 후에는 가장 작은 요청을 가진 flow부터 bandwidth를 할당하면서, 나머지 자원이 고갈될 때까지 진행한다.
bandwidth는 다음과 같은 점화식으로 할당할 수 있다:
R₀ = b
aᵢ = min [bᵢ, Rᵢ / (N - i)]
Rᵢ₊₁ = Rᵢ - aᵢ
여기서 b는 전체 bandwidth, Rᵢ는 i번째 요청까지 처리한 후 남은 bandwidth, aᵢ는 i번째 요청에 할당된 bandwidth이다. 이 알고리즘은 가장 작은 요청부터 먼저 할당하며, 남는 자원은 더 큰 요청들 사이에 균등하게 나누어진다.
max-min fairness는 하드웨어적으로는 각 flow의 요청을 별도의 queue로 분리하고, queue를 round-robin 방식으로 서비스함으로써 구현할 수 있다. 빈 queue는 건너뛴다. 이 구현 방식은 흔히 fair queueing이라 불린다. 개념적으로는 간단하지만, 현실에서는 몇 가지 문제점이 있다. 예를 들어, packet 길이가 다를 경우 추가적인 처리 로직이 필요하고, weighted fair queueing은 특정 flow에 더 높은 우선순위를 부여할 수 있는 기능도 제공한다. latency fairness에서와 마찬가지로, 진정한 throughput fairness도 네트워크 내 각 자원에서 per-flow 구조를 유지해야만 가능하다.
15.5 Separation of Resources
서비스 보장과 공정성 보장을 달성하려면 traffic class 간 격리(isolation)가 필요하다. 때로는 하나의 클래스 내부에서도 flow 간 구분이 필요할 수 있다. 이 절에서는 class와 flow를 통칭하여 class라 표현한다.
TDM 같은 예약 기반 기법에서는 자원 예약 정보를 저장하는 table이 필요하며, 그에 따른 비용이 든다. 반면, 자원이 동적으로 할당되는 경우에는 상황이 훨씬 복잡해진다. 이상적으로는 global하게 자원을 스케줄링하여 서로 영향을 주지 않도록 해야 하지만, interconnection network는 분산 시스템이기 때문에 global approach는 현실적이지 않다. 대신 fair queueing, age-based arbitration 같은 local 알고리즘을 사용하여 자원을 분배하고, 하드웨어 수준에서의 class 간 자원 분리가 필요하다.
본격적으로 non-interfering network를 소개하기 전에, 자원 분리 실패로 인한 대표적 병목 현상인 tree-saturation에 대해 설명한다.
15.5.1 Tree Saturation
어떤 자원이 평균보다 훨씬 많은 traffic을 수신하면, 네트워크 내 특정 지점이 hot-spot이 되어 문제가 생긴다. 예를 들어, shared memory 시스템에서는 여러 processor가 동시에 하나의 memory 주소에 lock을 얻기 위해 polling할 경우, 해당 노드가 과부하되고 hot-spot이 된다. IP router에서도 특정 output port로의 traffic이 집중되거나 routing table 설정 오류로 인해 hot-spot이 발생할 수 있다.
이러한 hot-spot은 단순히 해당 자원만이 아니라, 전혀 관련 없는 traffic에도 영향을 줄 수 있다. tree-saturation이란, hot-spot 자원을 향하는 packet들로 인해 인접 채널이 막히고, 그 인접 채널들로 향하는 경로도 차례로 막히면서 나무 형태의 정체 패턴이 형성되는 현상을 말한다.

그림 15.9는 이 개념을 보여준다. 예를 들어 destination 4가 과부하되어 해당 방향 채널들이 막히면, 그 채널로 이어지는 다른 채널들도 전파적으로 막히게 된다. 이때 어떤 packet이 destination 7로 가고자 하더라도, 해당 경로가 saturation tree에 포함되어 있다면 직접적으로 연관되지 않은 hot-spot 때문에 간접적 정체가 발생할 수 있다. 이 문제는 단지 목적지 노드에 국한되지 않고, 네트워크 채널 자체의 과부하로도 발생할 수 있다.
15.5.2 Non-interfering Networks
두 클래스 A와 B가 서로 non-interfering하려면, A가 사용하는 자원을 무기한 점유하여 B가 접근하지 못하게 하는 일이 없어야 한다. 이 조건을 만족하는 네트워크를 non-interfering network라 부른다.
예를 들어 virtual-channel flow control을 사용할 경우, 각 클래스별로 별도의 virtual channel을 구성하면 non-interfering 구조가 된다. 반면, physical channel은 매 사이클마다 재할당되므로, 한 클래스가 무한정 점유할 수 없기 때문에 반드시 복제할 필요는 없다. 입력 buffer 또한 클래스별로 분리되어야 하며, 각 client는 클래스마다 별도의 injection buffer를 가져야 한다.
non-interfering network는 서비스 보장과 공정성을 만족시키기 위해 필요한 자원 격리를 제공하지만, 하드웨어 복잡도가 매우 높아질 수 있다. 예를 들어, Internet router에서 output 간 간섭을 막기 위해 각 output마다 하나의 traffic class를 지정하고, virtual channel 및 injection buffer를 완전히 분리하려면 수백 개의 class를 지원해야 하며, 이는 라우터 설계를 크게 복잡하게 만든다.
따라서 진정한 격리가 필요한 클래스 수는 최소화하는 것이 설계상 바람직하다. 많은 경우 클래스 간 병합이 가능하며, 하드웨어 복잡도 감소와 서비스 품질 간 균형을 맞추는 것이 중요하다.
15.6 Case Study: ATM Service Classes
ATM(Asynchronous Transfer Mode)은 음성, 영상 등 멀티미디어 트래픽을 지원하면서, 동시에 best-effort traffic까지 수용 가능한 유연성을 갖춘 네트워크 기술이다. ATM은 주로 기업용 통합 네트워크, 캠퍼스 백본, 인터넷 백본 등에 사용된다.
ATM은 connection-based 방식이므로, 데이터 전송 전에 source와 destination 간의 virtual circuit이 먼저 설정되어야 한다. 연결은 회선 기반이지만, 데이터 전송 및 switching은 packet 기반이다. ATM의 독특한 특징 중 하나는 packet 크기가 고정(53 bytes)이라는 점이며, 이는 packetization latency를 줄이고 router 설계를 단순하게 만든다.
ATM은 다음과 같은 5가지 기본 서비스 클래스를 정의한다:
- CBR(Constant Bit Rate): 예) 실시간 uncompressed 음성
- VBR-rt(Variable Bit Rate, real-time): 예) 화상회의용 압축 영상
- VBR(Variable Bit Rate): VBR-rt와 유사하나 delay/jitter 요구는 덜함
- ABR(Available Bit Rate): 대역폭 수요는 알려져 있고 동적으로 조절 가능
- UBR(Unspecified Bit Rate): best-effort traffic
UBR을 제외한 서비스 클래스들은 class type 외에도 추가적인 service parameter를 요구한다. 예를 들어 VBR-rt는 (σ, ρ) regulated flow로, SCR(Sustained Cell Rate)과 BT(Burst Tolerance)를 명시해야 한다. 또한 MCR(Minimum Cell Rate), PCR(Peak Cell Rate), CLR(Cell Loss Ratio) 등 다양한 파라미터를 통해 flow 특성을 상세히 정의할 수 있다.
ATM은 CBR 트래픽에 대해서는 TDM 기반 전달 방식도 사용 가능하지만, 나머지 클래스들은 대부분 동적 자원 할당을 필요로 한다. 대부분의 switch는 throughput fairness를 보장하며, virtual circuit 간 자원 분리를 통해 간섭을 방지한다.
15.7 Case Study: Virtual Networks in the Avici TSR
앞서 Section 9.5에서 소개한 Avici TSR 네트워크는 oblivious source routing을 사용해 load를 균형 있게 분산시킨다. 이번 절에서는 이 시스템이 어떻게 virtual channel을 활용하여 non-interfering network를 구현했는지를 살펴본다.
Avici TSR은 각 목적지 노드 쌍마다 별도의 virtual channel을 할당하여, 네트워크 내 트래픽이 완전히 독립되도록 구성되어 있다. 즉, A로 가는 트래픽은 B로 가는 트래픽과 어떤 buffer도 공유하지 않으며, 따라서 B가 과부하되어 buffer를 가득 채우더라도 A로 가는 트래픽은 영향을 받지 않는다. 단, physical channel은 공유하지만, 전체 네트워크의 fabric channel에서 load balancing이 이루어지므로 steady state에서는 B가 자신의 output bandwidth 이상을 초과할 수 없다.
이 문제는 그림 15.10에서 잘 나타난다. B가 과부하되면 해당 방향의 모든 링크가 정체되며, 이는 tree saturation 현상으로 나타난다.

그림 15.10은 2D mesh 네트워크의 일부 구간을 보여주며, 목적지 노드 B로의 과부하로 인해 발생한 tree-saturation 현상을 나타낸다. 회색 경로 a, b, c, d를 따라 노드 A로 가는 패킷은 링크 d를 제외한 모든 지점에서 B로 향하는 트래픽과 자원을 공유하면 지연될 수 있다. 링크 d에서는 방향이 반대이므로 다른 virtual channel과 flit buffer를 사용하게 되어 지연이 발생하지 않는다.
B로 향하는 트래픽이 소비하는 bandwidth 자체는 문제가 아니다. B가 소비할 수 있는 bandwidth는 최대 1이고, 그 load가 모든 경로에 고르게 분산되어 있다고 가정하면, 링크 c에서는 B로 향하는 트래픽이 전체의 1/12, 링크 a에서는 1/20 정도만 사용하게 된다. 이는 A로 가는 패킷을 처리하기에 충분한 bandwidth를 남겨둔다. 하지만 문제는 B로 향하는 트래픽이 virtual channel과 flit buffer를 모두 점유하고, backup 상태이기 때문에 이 자원들을 매우 천천히 해제한다는 점이다. 이는 마치 축구장(노드 B) 근처에 위치한 식료품점(노드 A)으로 가려 할 때, 경기장으로 가는 차들로 인해 도로가 막혀 목적지에 도달하지 못하는 상황과 유사하다.
해결책은 각 목적지에 대해 별도의 virtual network를 제공하는 것이다. Avici TSR은 이를 실현하며, 두 개의 traffic class에 대한 differentiated service까지 제공한다. TSR은 각 physical channel당 512개의 virtual channel을 제공하며, 목적지 d마다 해당 방향의 모든 링크에 대해 두 개의 virtual channel을 예약한다. 하나는 일반 트래픽용, 다른 하나는 premium 트래픽용이다. 또한 source queue도 목적지와 서비스 class별로 분리되어 있어, source queue에서도 간섭이 발생하지 않는다. 이 구조에서는 A로 가는 트래픽이 B로 가는 트래픽과 virtual channel이나 buffer를 공유하지 않기 때문에 간섭이 발생하지 않는다. bandwidth만 공유할 뿐이며, 그 외 자원은 공유되지 않는다.
이는 마치 각 목적지마다 별도의 차선을 가진 도로와 같다. 경기장으로 가는 차들은 해당 차선에서 정체되어 있지만, 식료품점으로 가는 차는 별도의 차선을 통해 문제없이 진행된다. interconnection network의 장점은, 비용이 저렴한 buffer 같은 자원은 복제하고, 고비용인 bandwidth는 공유함으로써 이런 격리를 구현할 수 있다는 것이다. 불행히도 도로와 자동차에는 이 방법을 적용할 수 없다.
TSR은 2개의 traffic class를 가진 512개의 노드를 512개의 virtual channel만으로 지원하기 위해, 거리상 최대한 멀리 떨어진 두 노드는 최소 경로를 기준으로 공통 physical channel을 사용하지 않음을 이용한다. 따라서 두 노드는 같은 virtual channel 번호를 사용하더라도 간섭이 없다. 그림 15.11은 8-node ring에서 이를 설명한 예다. 노드 X로 가는 패킷은 화살표 방향의 링크만 사용하고, 노드 Y로 가는 패킷은 반대 방향 링크만 사용한다. 따라서 경로가 겹치지 않기 때문에 같은 virtual channel을 사용해도 문제가 없다.

15.8 참고 문헌 노트
QoS의 일반적인 주제 및 대규모 네트워크(예: 인터넷)에서의 구현 이슈에 대한 상세한 논의는 Peterson과 Davie의 저서에서 다루어진다. QoS가 라우터 설계에 미치는 영향은 Kumar 등이 다루었다. (σ, ρ) flow에 대한 정밀한 해설과 network delay 계산에의 활용은 Cruz가 설명하였다.
네트워크에서의 공정성 정의는 Jaffe가 초기에 다루었고, throughput fairness는 Nagle이 도입하였으며, Demers 등이 이를 실용적인 조건에 맞게 확장하였다. max-min fairness는 구현 비용이 높아 approximation 기법이 사용되며, 예로 Golestani의 stop-and-go queueing, Kim과 Chien의 rotating combined queueing 알고리즘이 있다. 후자는 interconnection network에 맞춰 설계되었다.
Yum 등은 virtual clock 알고리즘을 확장하여 MediaWorm router에서 rate 기반 서비스를 구현하였다. SGI SPIDER, Tandem ServerNet, MMR 등도 다양한 수준의 QoS를 적용한 상용/학술용 라우터이다. tree saturation은 Pfister와 Norton이 shared memory 시스템에서 동일한 메모리 주소로의 요청을 하나로 통합하는 buffer 구조를 통해 처음 지적하였다. flow 간 자원을 분리하는 대표적 기법으로는 virtual output queueing이 있으며, Tamir와 Frazier가 이를 다루었다.
15.9 연습문제
15.1 Burstiness 예제
Figure 15.1의 예제가 Section 15.2.2의 일반 multiplexer 모델에서 제시된 delay bound를 만족함을 확인하라.
15.2 동일 분할된 flow의 burstiness
하나의 (σ, ρ) flow를 rate가 ρ/2인 두 개의 flow로 나누었을 때, 각각의 sub-flow의 burstiness 상한이 (σ + L)/2임을 설명하라.
15.3 First-Come, First-Served Multiplexer
Section 15.2.2의 접근을 FIFO 방식의 multiplexer에 적용하라. 입력 flow가 각각 (σ₁, ρ₁), (σ₂, ρ₂)일 때, 최대 delay는 얼마인가?
15.4 Tree-Saturation의 영향
각각 processor와 memory module을 가진 p개의 노드가 존재한다고 하자. 각 노드는 일정 길이의 memory request를 생성하고, 이 중 h 비율은 “hot” memory location으로 향하고, 나머지는 균등하게 분산된다. hot memory로의 총 요청률은 얼마인가? hot module이 포화될 경우 모든 요청이 block된다고 할 때, p = 100, h = 0.01이라면 전체 시스템에서 활용 가능한 memory bandwidth의 비율은?
15.5 시뮬레이션
4×4 mesh network에서 TDM flow 예약을 고려하라. 시간은 T개의 slot으로 나뉘며, 각 flow는 하나의 slot을 요구한다. 각 flow는 source-destination 쌍에 대해 greedy 방식으로 가장 낮은 비용의 경로에 예약된다. 경로의 비용은 경로 상 모든 채널에서의 slot 사용량 중 최대값이다. 예약 품질은 가장 혼잡한 채널의 slot 수로 평가된다. 이 heuristic을 이용해 랜덤 연결을 예약하고, 식 (3.9)의 최적화 문제에 기반한 이론적 하한값과 비교하라.
'System-on-Chip Design > NoC' 카테고리의 다른 글
| Router Datapath Components (0) | 2025.06.16 |
|---|---|
| Router Architecture (2) | 2025.06.05 |
| Deadlock and Livelock (2) | 2025.06.05 |
| Buffered Flow Control (1) | 2025.06.05 |
| Flow Control Basics (2) | 2025.06.02 |















































