Điều khiển luồng là cơ chế nhằm đảm bảo việc truyền tin của bên phát không vượt quá khả năng xử lý của bên thu (thực hiện trong môi trường không có lỗi). Như trong truyền thông trên NoC, điều khiển luồng đảm bảo dữ liệu được truyền từ nguồn tới đích thông qua mạng một cách chính xác, tận dụng tối ưu tài nguyên mạng và định trước hiệu suất của dịch vụ truyền thông. Để làm được điều đó, kỹ thuật điều khiển luồng phải đảm bảo các vấn đề đồng bộ toàn cục và đồng bộ cục bộ. Có nhiều kỹ thuật điều khiển luồng dữ liệu như kỹ thuật dừng và đợi (Stop and Wait), kỹ thuật cửa sổ trượt (Sliding Window), kỹ thuật điều khiển luồng dữ liệu sử dụng kênh ảo... Trong đó, kỹ thuật điều khiển luồng dữ liệu sử dụng kênh ảo là một kỹ thuật điều khiển luồng hữu hiệu, nó có khả năng tránh được sự tắc nghẽn (deadlock), tận dụng dây dẫn triệt để, cải thiện hiệu suất và cho ra sự khác nhau về chất lượng dịch vụ,… Nên để đảm bảo dữ liệu truyền trong mạng được chính xác, yêu cầu kỹ thuật điều khiển luồng dữ liệu phải tránh deadlock và livelock.
Deadlock (còn gọi tắc nghẽn tĩnh): Hiện tượng deadlock xảy ra khi một hoặc nhiều gói tin (packet) bị treo trong một khoảng thời gian không xác định. Hình 2.6 chỉ ra một trường hợp tắc nghẽn của deadlock. Packet 1 được định tuyến từ R1 đến R2 đến R3 và đến R4, còn packet 2 được định tuyến từ R3 đến R4 đến R1 và đến R2. Hai packet này đồng thời được gửi đi, packet 1 xuất phát từ R1 nhưng đến R3 bị chặn lại, còn packet 2 bắt đầu xuất phát R3 nhưng đến R1 cũng bị chặn lại vì các bộ định tuyến này thiếu không gian bộ đệm. Chính vì vậy, hai gói tin đều bị chặn không gói nào được truyền đến đích do cả hai gói cùng chờ quá trình giải phóng nguồn tài nguyên bị gói tin còn lại chiếm dụng.
Hình 2.6: Hiện tượng tắc nghẽn tĩnh (deadlock).
Để tránh deadlock người ta có thể sử dụng kênh ảo như mô tả trong Hình 2.7. Trường hợp trong mạng không có kênh ảo (Hình 2.7a), khi gói tin 1 bị nghẽn thì gói tin 2 không đến được đích vì bị cản trở bởi gói tin 1. Ở Hình 2.7b, trong mạng có kênh ảo nên gói tin 2 được đưa vào bộ đệm hàng đợi (buffer queue) và truyền đến đích. Vì vậy, mà gói tin 1 có bị nghẽn thì luồng dữ liệu 2 vẫn có thể đi qua.
(a) Gói tin 2 Gói tin 1 Gói tin 1 đang bị treo Điểm đến của gói tin 2
Gói tin 1
(b)
Gói tin 1 đang bị treo
Điểm đến của gói tin 2 Gói tin 2
Bộ đệm được sử dụng bởi gói tin 1 Bộ đệm được sử dụng bởi gói tin 2 Bộ đệm rỗng
Hình 2.7: Sử dụng kênh ảo để tránh deadlock.
Livelock (còn gọi tắc nghẽn động): Hiện tượng livelock xảy ra khi một gói tin muốn truyền trong mạng nhưng bị giữ lại ở một vòng nào đó (spinning around) mà không bao giờ đi đến đích của nó. Hiện tượng tắc nghẽn này được minh họa như trong
Hình 2.8. Muốn truyền gói dữ liệu từ nút nguồn (là một trong bốn nút mạng) ở vòng ngoài tới nút đích (là một trong bốn nút mạng) ở trong nhưng do 4 nút phía trong bị deadlock nên dữ liệu cứ truyền quay vòng ở 4 nút mạng ngoài mà không sao vào tới nút đích. Router Router Router Router Router Router Router Router
Hình 2.8: Hiện tượng t ắc nghẽ n độ ng ( Livelock).
Có hai phương pháp để tránh livelock. Phương pháp thứ nhất sử dụng bộ đếm thời gian sống (TTL: Time to live) để đếm thời gian gói tin truyền trong mạng trong bao lâu. Khi bộ đếm đạt đến một giá trị định trước thì gói tin đó sẽ được xóa bỏ khỏi mạng. Phương pháp thứ hai trao cho các gói quyền ưu tiên (priority) dựa trên thời gian tồn tại gói tin trên mạng, gói tin nào tồn tại trên mạng lâu nhất sẽ có quyền ưu tiên cao nhất và được định tuyến trước.
Tóm lại, các phương pháp để tránh deadlock và livelock có thể áp dụng một cách cục bộ tại các nút để hỗ trợ những dịch vụ ban đầu như thực thi phần cứng hoặc áp dụng toàn cục đảm bảo điều khiển lôgíc luồng dữ liệu bằng việc ứng dụng cơ cấu điều khiển luồng đầu-cuối (end-to-end flow control).