6. Quản lý hàng đợi và định trình gói
6.3 Các kiểu khác nhau của đối tượng Queue
Một đối tượng hàng đợi là một lớp đối tượng chung có khả năng lưu giữ và có thể đánh dấu hay loại bỏ các gói khi chúng đi qua qua topo mô phỏng. Các tham số cấu hình được sử dụng cho đối tượng hàng đợi là:
limit_ Kích thước hàng đợi trong các gói.
blocked_ Mặc định được thiết lập giá trị false, giá trị này là true nếu hàng đợi bị khóa (không thể gửi gói đến luồng xuống lân cận của nó).
unblocked_on_resume_ Mặc định được thiết lập giá trị true, chỉ ra rằng một hàng đợi cần tự mở khóa lúc gói cuối cùng được gửi đã truyền đi (nhưng không cần thiết phải nhận được).
Các đối tượng hàng đợi khác nhận được từ lớp cơ sở Queue là các đối tượng hàng đợi drop-tail, FQ, SFQ, DRR, RED và CBQ. Mỗi đối tượng được mô tả như sau:
• Đối tượng drop-tail: là lớp con của đối tượng Queue thực thi các hàng đợi FIFO đơn giản. Không có phương thức, tham số cấu hình, hay biến trạng thái nào được chỉ định.
• Đối tượng FQ: là lớp con của đối tượng Queue thực thi hàng đợi cân bằng. Không có phương thức nào được chỉ định đối với đối tượng FQ. Các tham số cấu hình là:
secsPerByte_
Không có biến trạng thái nào có liên quan đến đối tượng này.
• Đối tượng SFQ: là lớp con của đối tượng Queue thực thi hàng đợi cân bằng ngẫu nhiên. Không có phương thức nào được chỉ định cho các đối tượng SFQ. Các tham số cấu hình là:
maxqueue_ buckets_
• Đối tượng DRR: là lớp con của đối tượng Queue thực thi định trình Deficit Round Robin. Các đối tượng này thực hiện định trình DDR trong số các luồng khác nhau (một luồng cụ thể là luồng có các gói với cùng một node và port id hoặc các gói chỉ có cùng node id). Không như các đối tượng đa hàng đợi khác, đối tượng hàng đợi này thực hiện một không gian bộ nhớ đệm dùng chung cho các luồng khác nhau của nó. Các tham số cấu hình là:
buckets_ chỉ ra tổng số vùng nhớ dữ liệu được dùng để băm nhỏ các luồng. blimit_ chỉ ra kích thước bộ nhớ đệm dùng chung theo byte.
quantum_ chỉ ra bao nhiêu byte một luồng có thể gửi trong lượt của nó.
mask_ mặt nạ, khi được thiết lập 1, nghĩa là một luông cụ thể bao gồm các gói có chứa cùng node id (và có thể có các port id khác nhau), nếu khác, một luồng chứa các gói có cùng node và port id.
• Đối tượng RED: là lớp con của đối tượng Queue thực thi các cổng phát hiện sớm ngẫu nhiên (random early-detection gateway). Đối tượng có thể được lập cấu hình để hoặc loại bỏ hoặc “mặt nạ” các gói . Không có phương thức nào được chỉ định cho các đối tượng RED. Các tham số cấu hình là:
bytes_ Thiết lập “true” để cho phép “byte-mode” RED, trong đó kích thước của các gói đến có ảnh hưởng tới khả năng tạo mặt nạ (loại bỏ) các gói.
queue-in-bytes_ Thiết lập “true” để đánh giá kích thước trung bình của hàng đợi theo byte hơn là các gói. Cho phép tùy chọn này cũng làm cho thresh_ và maxthresh_ được điều chỉnh tự động bởi mean_pksize_ ,cụ thể như sau:
thresh_ ngưỡng tối thiểu cho kích thước trung bình hàng đợi trong các gói. maxthresh_ ngưỡng tối đa cho kích thước trung bình hàng đợi trong các gói. mean_pksize_ ước lượng thô về kích thước trung bình của hàng đợi theo byte. Dùng để cập nhật kích thước trung bình của hàng đợi tính được sau một khoảng thời gian rỗi.
q_weight_ Trọng số hàng đợi, được dùng trong việc tính trung bình động trọng số theo hàm mũ để tính toán kích thước trung bình của hàng đợi.
wait_ Thiết lập true để duy trì một khoảng thời gian giữa các gói được loại bỏ. linterm_ Khi kích thước trung bình của hàng đợi biến đổi giữa “thresh_” và “maxthresh_”, xác suất lấy gói ra biến đổi giữa 0 và “1/linterm”.
setbit_ Thiết lập “true” để đánh dấu các gói bằng cách thiết lập bit chỉ thị nghenxtrong các mào đầu gói hơn là các gói được loại bỏ.
drop-tail_ Thiết lập true để sử dụng drop-tail hơn là random-drop khi có sự tràn bộ nhớ hàng đợi hoặc kích thước trung bình của hàng đợi vượt quá “maxthresh_”. Để có sự giải thích kỹ hơn về các biến này.
Không thể truy nhập vào các biến trạng thái của đối tương RED.
• Đối tượng CBQ: là lớp con của đối tượng Queue thực thi tạo hàng đợi lớp cơ sở.
$cbq insert <class>
Chèn lưu lượng lớp <class> vào cấu trúc dùng chung liên kết có liên quan tới cbq đối tượng liên kết.
$cbq algorithm <alg>
Chọn thuật toán nội bộ cbq. <alg> có thể được thiết lập với một trong các giá trị: “ancestor-only”, “top-level” hoặc “formal”.
• Đối tượng CBQ/WRR: là lớp con của đối tượng Queue thực thi định trình luân chuyển theo trọng số giữa các lớp có cùng mức ưu tiên. Ngược lại, các đối tượng CBQ thực thi định trình luân chuyển từng gói giữa các lớp có cùng mức ưu tiên. các tham số cấu hình là:
maxpkt_ Kích thước tối đa của gói theo byte. Chỉ được sử dụng bởi các đối tượng CBQ/WRR trong việc tính toán cấp phát băng thông tối đa cho bộ định trình luân chuyển theo trọng số.
CÁC ĐỐI TƯỢNG CBQCLASS
Các đối tượng CBQClass thực thi các lớp lưu lượng có liên quan tới các đối tượng CBQ.
$cbqclass setparams <parent> <okborrow> <allot> <maxidle> <prio> <level> Thiết lập nhiều tham số cấu hình cho lớp lưu lượng CBQ (xem dưới đây). $cbqclass parent <cbqcl|none>
Chỉ định lớp cha của của lớp này trong cây liên kết dùng chung. Lớp cha có thể được chỉ định là “none” để chỉ ra đây là một gốc.
$cbqclass newallot <a>
Thay đổi cấp phát liên kết của lớp này tới một số lượng cụ thể (trong phạm vi 0.0 đến 1.0). Chỉ những lớp được chỉ định bị ảnh hưởng.
$cbqclass install-queue <q>
Cài đặt một đối tượng Queue vào trong cấu trúc liên kết CBQ hay CBQ/WRR ghép. Khi một đối tượng được tạo ra ban đầu, nó không có hàng đợi nội tại (chỉ có một bộ phân loại và định trình gói).
Các tham số cấu hình là:
okborrow_ là giá trị logic Bool chỉ ra lớp được phép mượn băng thông từ cha của nó.
allot_ là tỷ số băng thông được cấp phát tối đa cho một lớp được thể hiện như một số thực giữa 0.0 và 1.0.
maxidle_ là tổng thời gian tối đa một lớp có thể đòi hỏi để đưa các gói của nó vào hàng đợi trước khi chúng được phép chuyển tiếp.
level_ là mức của lớp này trong cây liên kết dùng chung. Các node lá trong cây được xem là mức 1; cha của chúng là mức 2, v.v.
extradelay_ tăng thời gian trễ bởi một lớp bị trễ trong một khoảng thời gian cụ thể.
CÁC ĐỐI TƯỢNG GIÁM SÁT HÀNG ĐỢI (QUEUE-MONITOR )
Các đối tượng QueueMonitor được dùng để giám sát tập hợp các bộ đếm của điểm đi, đến và loại bỏ của gói và byte. Nó cũng bao gồm hỗ trợ cho việc thống kê chung như kích thước hàng đợi, v.v.
$queuemonitor
thiết lập lại tất cả các bộ đém tích lũy được mô tả dưới đây (đi, đến và loại bỏ) về zero. Nó cũng thiết lập lại các bộ tích hợp và các bộ lấy mẫu trễ nếu được chỉ định.
$queuemonitor set-delay-samples <delaySamp_>
Thiết lập đối tượng lấy mẫu delaySamp_ để ghi lại các thống kê về trễ hàng đợi. delaySamp_ cũng là bộ xử lý lỗi đối với đối tượng Sample tức là đối tượng Sample đã được tạo ra.
$queuemonitor get-bytes-integrator
Trả về một đối tượng Intrgrator mà có thể được dùng để tìm ra toàn bộ của kích thước hàng đợi trong các byte.
$queuemonitor get-pkts-integrator
Trả về một đối tượng Integrator mà có thể được dùng để tìm ra toàn bộ kích thước hàng đợi trong gói.
$queuemonitor get-delay-samples
Trả về một đối tượng Samples delaySamp_ để ghi lại các thống kê về trễ hàng đợi.
Không có tham số cấu hình nào được chỉ định cho đối tượng này. Các biến trạng thái là:
size_ kích thước tức thời của hàng đợi trong các byte. pkts_ kích thước tức thời của hàng đợi trong các gói. parrivals_ tổng số hiện có của các gói đi
barrivals_ Tổng số byte hiện có chứa trong các gói đi.
pdeparture_ Tổng số hiện có các gói đến (không phải gói được loại bỏ).
bdepartures_ Tổng số byte hiện có chứa trong các gói đến (không phải gói được loại bỏ).
pdrops_ tổng số gói được loại bỏ. bdrops_ tổng số byte được loại bỏ.
bytesInt_ đối tượng Integrator tính toán tổng kích thước hàng đợi trong các byte. Biến sum_ của đối tượng này có tổng hiện tại (tổng số) của kích thước hàng đợi trong các byte.
pktsInt_ đối tượng Integrator tính toán tổng số kích thước hàng đợi trong các gói. Biến sum_ của đối tượng này có tổng hiện tại (tổng số) của kích thước hàng đợi trong các gói.
CÁC ĐỐI TƯỢNG QUEUEMONITOR/ED
Các đối tượng thừa kế này có thể phân biệt việc loại bỏ gói thông thường so với gói loại bỏ sớm. Một vài hàng đợi phân biệt việc loại bỏ thông thường (ví dụ loại bỏ hết bộ nhớ đệm) so với các trường hợp loại bỏ khác (ví dụ loại bỏ ngấu nhiên trong các hàng đợi RED). trong một trường hợp, việc phân biệt được hai kiểu loại bỏ này rất có ích.
Các biến trạng thái là:
epdrops_ Số gói được loại bỏ “sớm”.
ebdrops_ Số byte chứa các gói được loại bỏ “sớm”.
Chú ý: vì lớp này là một lớp con của QueueMonitor, các đối tượng kiểu này cũng có các trường như pdrops_ và bdrops_. Các trường này mô tả tổng số các gói và byte được loại bỏ, bao gồm cả loại bỏ sớm và loại bỏ không sớm.
CÁC ĐỐI TƯỢNG QUEUEMONITOR/ED/FLOWMON
Các đối tượng này có thể được dùng trong vị trí của đối tượng QueueMonitor quy ước khi muốn thu thập các biến đếm và thống kê trên luồng (per-flow) so với các biến đếm và thống kê tổng số được cung cấp bởi QueueMonitor cơ sở.
$fmon classifier <cl>
Chèn (đọc) các bộ phân loại cụ thể vào (từ) đối tượng giám sát luồng. Được dùng để ánh xạ các gói đến vào các luồng có liên quan đến các gói đó.
$fmon dump
Đổ số liệu từ các bộ đếm trên luồng và thống kê đối với các kênh I/O được chỉ định trong một hoạt động đính kèm trước đó.
$fmon flows
Trả về chuỗi ký tự chứa tên của tất cả các đối tượng luồng được biết đến bởi quá trình giám sát luồng. Mỗi đối tượng này có kiểu QueueMonitor/ED/Flow.
$fmon attach <chan>
Đính kèm một kênh tcl I/O vào quá trình giám sát luồng. Thống kê luồng được ghi vào kênh khi hoạt động đỏ số liệu được thi hành.
enable_in_ Mặc định được thiết lập true, chỉ ra rằng trạng thái đi trên luồng cần được giữ quá trình giám sát luồng. Nếu thiết lập false, chỉ có thông tin đi tổng thể được giữ.
enable_out_ Mặc định thiết lập true, chỉ ra trạng thái đến trên luồng cần được giữ bởi quá trình giám sát luồng. Nếu thiết lập false, chỉ có thông tin đến tổng thể được giữ.
enable_drop_ Mặc định thiết lập true, chỉ ra trạng thái loại bỏ trên luồng cần được giữ bởi quá trình giám sát luồng. Nếu thiết lập false, chỉ có thông tin loại bỏ tổng thể được giữ.
enable_edrop_ Mặc định thiết lập true, chỉ ra trạng thái loại bỏ sớm trên luồng cần được giữ bởi quá trình giám sát luồng. Nếu thiết lập false, chỉ có thông tin loại bỏ sớm tổng thể được giữ.
CÁC ĐỐI TƯỢNG QUEUEMONITOR/ED/FLOW
Các đối tượng này chứa số đếm và thống kê trên luồng được quản lý bởi đối tượng QueueMonitor/ED/FlowMon. Chúng thường được tạo ra trong một thủ tục goi lại OTcl khi một quá trình giám sát luồng được đưa ra trong một gói không thể ánh xạ vào một luồng đã biết. Lưu ý rằng bộ phân loại của quá trình giám sát luồng chịu trách nhiệm ánh xạ các gói vào các luồng theo cách tùy ý. Do đó, tùy vào kiểu bộ phân laoij được sử dụng, không phải tất cả các biến trạng thái đều có liên quan (ví dụ một biến có thể phân loại các gói chỉ dựa vào id của luồng, khi đó địa chỉ nguồn và đích có thể không quan trọng).
Các biến trạng thái là:
src_ địa chỉ nguồn của gói thuộc luồng này. dst_ địa chỉ đích của gói thuộc luồng này. flowid_ id luồng của gói thuộc luồng này.