Tải bản đầy đủ (.doc) (16 trang)

TÌM HIỂU THUẬT TOÁN SFB Stochastic Fair Blue

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.81 MB, 16 trang )

TIỂU LUẬN MÔN HỌC
MẠNG VÀ KỸ THUẬT TRUYỀN DỮ LIỆU
ĐỀ TÀI
TÌM HIỂU THUẬT TOÁN SFB
(Stochastic Fair Blue)

I. PHẦN MỞ ĐẦU
Một yếu tố quan trọng mạng Internet là tránh tình trạng mất gói tin ở mức độ cao.
Khi một gói tin bị rớt trước khi nó đến được nơi nhận thì tài nguyên nó sử dụng trong
quá trình lưu chuyển cũng bị mất theo. Trong trường hợp xấu, tình huống mất gói tin
có thể dẫn đến sự sập mạng. Việc cải tiến điều khiển tắc nghẽn và quản lý hàng đợi
trong mạng Internet là một trong những lĩnh vực được tập trung nghiên cứu trong
những năm gần đây. Đã có một vài giải pháp được đề xuất và tiến hành áp dụng trên
thực tế, tuy nhiên sự mất gói tin ở mức độ cao vẫn diễn ra. Mức độ mất gói tin đặc biệt
cao trong thời kỳ có tắc nghẽn lớn, khi mà một số lượng lớn các kết nối cạnh tranh
nhau trong một khoảng băng thông hẹp.
II. NỘI DUNG
1. THUẬT TOÁN SFB (Stochastic Fair Blue)
a) ý tưởng của thuật toán SFB
Cho đến gần đây, Internet chủ yếu dựa vào tính chất tích hợp tự nhiên của điều
khiển tắc nghẽn TCP để hạn chế mất gói tin và chia sẻ cân bằng các tài nguyên mạng.
Tuy nhiên, ngày càng nhiều các ứng dụng được triển khai mà không sử dụng điều
khiển tắc nghẽn của TCP và không hồi đáp lại các tín hiệu tắc nghẽn của mạng. Các
ứng dụng như vậy tiềm ẩn những nguy hại vì chúng làm tăng tỉ lệ mất gói tin trong
mạng và có thể là nguyên nhân gây ra sự tắc nghẽn sụp đổ [17,23]. Để giải quyết các
luồng không phản hồi, đã có nhiều việc làm để cung cấp các router với các công cụ để
chống lại chúng [6,18]. Ý tưởng của các phương pháp tiếp cận là để phát hiện các
luồng không hồi đáp và hạn chế tỉ lệ của chúng, làm cho nó không ảnh hưởng đến hiệu
suất của các luồng có hồi đáp. Phần này mô tả và đánh giá Stochastic Fair Bue (SFB),
một kỹ thuật mới bảo vệ các luồng TCP chống lại các luồng không hồi đáp, sử dụng
thuật toán BLUE. SFB có khả năng mở rộng cao và thực thi công bằng sử dụng một


khoảng rất nhỏ của trạng thái và một không gian đệm nhỏ.
2. Thuật toán:
Hình 1. Thuật toán SFB
Hình 1 cho thấy thuật toán SFB cơ bản. SFB là một thuật toán hàng đợi FIFO xác
định và hạn chế các luồng không hồi đáp dựa vào các máy đếm tương tự như với
BLUE. SFB duy trì N x L bin đếm. Các bin được tổ chức với L mức, mỗi mức có N
bin. Ngoài ra, SFB duy trì L hàm băm độc lập, mỗi hàm gắn với một mức của các bin
đếm. Mỗi hàm băm ánh xạ một luồng vào một trong N bin. Các bin được sử dụng để
theo dõi và thống kê sự chiếm giữ hàng đợi của các gói tin thuộc về các bin cụ thể.
Điều này khác với Stochastic Fair Queueing [20] (SFQ) trong đó hàm băm ánh xạ các
luồng vào các hàng đợi khác nhau. Mỗi bin trong SFB giữ một xác suất đánh giấu
hoặc rơi gói tin p
m
tương tự như BLUE, được cập nhật dựa trên thời gian chiếm giữ
bin. Khi một gói tin đến hàng đợi, nó được băm vào một trong N bin trong mỗi mức L.
Nếu số lượng các gói được ánh xạ vào một bin vượt quá một ngưỡng nhất định (ví dụ,
kích thước của bin) thì p
m
của bin đó được tăng lên. Nếu số lượng gói tin giảm về 0 thì
p
m
được giảm xuống.
Hướng quan sát và điều chỉnh của SFB là một luồng không hồi đáp nhanh chóng
điều khiển p
m
thành 1 trong tất cả L bin mà nó được băm vào. Các luồng có hồi đáp có
thể chia sẻ một hoặc hai bin với các luồng không hồi đáp, tuy nhiên, trừ khi số lượng
các luồng không hồi đáp là quá lớn so với số lượng các bin, một luồng có hồi đáp sẽ
được băm vào ít nhất một bin mà không có lẫn với các luồng không phản hồi và như
thế có một giá trị p

m
bình thường. Quyết định đánh dấu một gói tin dựa trên cơ sở p
min
, giá trị
xác suất nhỏ nhất p
m
của các bin mà luồng đã được ánh xạ vào. Nếu p
min
là 1, gói tin được xác
định thuộc về một luồng không có hồi đáp và giới hạn tỉ lệ. Chú ý rằng: cách tiếp cận này
giống như áp dụng bộ lọc Bloom trên các luồng đến.
Khi một luồng không hồi đáp xác định được bằng các kỹ thuật này, một số trong các tùy
chọn có hiệu lực để hạn chế tỉ lệ truyền của luồng. Ở đây, những luồng được xác định như
những luồng không hồi đáp được giới hạn một cách đơn giản để tiết kiệm băng thông. Chiến
lược này được thực hiện bằng cách hạn chế tỉ lệ các gói tin hàng đợi cho các luồng với giá trị
p
min
là 1. Hình 2 là một ví dụ cho thấy SFB làm việc như thế nào. Như hình đã chỉ ra, một
luồng không hồi đáp dẫn đến xác suất đánh dấu của tất cả các bin mà nó ánh xạ vào. Trong
khi các luồng TCP có thể ánh xạ vào cùng bin với các luồng không hồi đáp tại một mức cụ
thể, nó cũng có thể ánh xạ vào các bin tại các mức khác. Do đó, xác suất đánh dấu thấp nhất
của các luồng TCP là thấp hơn 1 và vì thế nó không được xác định như các luồng không hồi
đáp. Mặt khác, khi xác suất đánh dấu các luồng không hồi đáp là 1, nó sẻ bị giới hạn tỉ lệ.
Hình 2. Ví dụ SFB
Chú ý rằng, xác suất đánh dấu như BLUE có thể được sử dụng trong SFB để chống lại
các luồng không hồi đáp, cũng có thể áp dụng tham số max
p
của RED để làm việc này. Trong
trường hợp này, giá trị max
p

của bin được giữ và cập nhập theo hành vi của các luồng ánh xạ
vào bin. Tương tự RED, tuy nhiên có hai vấn đề làm cho phương pháp này không hiệu quả.
Thứ nhất là: thực tế đòi hỏi một không gian bộ nhớ đệm lớn để RED thực hiện tốt. Thứ hai là:
hiệu suất của RED bị giới hạn khi mức độ tắc nghẽn vừa phải đòi hỏi giá trị max
p
thiết đặt là
1. Như vậy, sử dụng RED theo cách này có một khoảng rất lớn thời gian khó phân biệt được
giữa một luồng không hồi đáp và một mức độ tắc nghẽn vừa phải. Để so sánh các phương
pháp, Stochastic Fair RED (SFRED) cũng được áp dụng kỹ thuật tương tự SFB cho RED.
3. Đánh giá thuật toán SFB:
a) Đánh giá mô hình mạng mô phỏng với NS_2 của thuật toán
Sử dụng NS, thuật toán SFB đã được mô phỏng với topo mạng như hình 3 với độ trể tất
cả các liên kết được thiết đặt là 10ms. Hàng đợi SFB được cấu hình 200KB của không gian
đệm và duy trì hai hàm băm mỗi hàm ánh xạ đến 23 bin. Kích thước của mỗi bin được đặt là
13.
Kết quả mô phỏng được so sánh như sau:
Hình 3. Mô hình mạng mô phỏng
Hình 4. Tỉ lệ mất gói Mbs (1 non-responsive)
Hình 5. Băng thông của các luồng TCP (45Mbs non-responsive flow)
b) Hạn chế của SFB:
Trong khi rõ ràng rằng thuật toán SFB cơ bản có thể bảo vệ các luồng TCP thân thiện từ
các luồng không hồi đáp mà không cần duy trì trạng thái luồng, điều quan trọng là phải hiểu
cách hoạt động và những giới hạn của nó. SFB sử dụng hiệu quả L mức với N bin trong mỗi
mức để tạo ra N
L
thùng ảo. Điều này cho phép SFB xác định một cách hiệu quả một luồng
không hồi đáp trong một tổng thể N
L
luồng sử dụng O(L * N) khoảng của trạng thái. Ví dụ,
trong phần trước, sử dụng 2 mức với 23 bin mỗi mức, tạo ra 529 thùng. Trong khi đó chỉ có

400 luồng thử nghiệm, SFB có thể xác định chính xác và hạn chế một luồng không hồi đáp
mà không ảnh hưởng đến hiệu năng của bất kì một luồng TCP nào. Khi số lượng các luồng
không hồi đáp tăng, một số bin trở thành "rác" (polluted) hoặc tăng số lượng các giá trị p
m
bằng 1. Vì thế, xác suất mà một luồng có hồi đáp được băm vào các bin "rác", và do đó trở
thành lớp lỗi. Rõ ràng những lỗi này làm hạn chế khả năng bảo vệ các luồng có hành vi tốt.
Sử dụng những phân tích xác suất đơn giản, Công thức (1) cho một giới hạn đóng của
xác suất mà một luồng TCP có hành vi tốt gặp phải lớp lỗi như là luồng không hồi đáp.
Trong đó: L là số mức, B là số bin trong mỗi mức, M là số lượng các luồng không hồi
đáp/các luồng độc.
Khi L bằng 1, hành vi của SFB giống như SFQ. Điểm khác biệt chính là khi SFB sử
dụng một mức thì nó vẫn là một queue FIFO với một bộ đệm được chia sẻ. Trong khi đó,
SFQ có một số hàng đợi và không gian bộ nhớ đệm được chia cho chúng.
Sử dụng kết quả từ công thức (1), có thể tối ưu hóa hiệu suất của SFB cho ra một thông
tin dự báo về môi trường hoạt động của nó. Giả sử các luồng không hồi đáp hoạt động đồng
thời có thể ước tính (M) và một khoảng không gian nhớ sẵn sàng cho SFB sử dụng được ấn
định (C). Sau đó, bằng cách cực tiểu hóa hàm xác suất trong công thức (1) với việc bổ sung
điều kiện biên
CNL

, SFB có thể được điều chỉnh cho hiệu suất tối ưu. Để minh họa điều
này, xác suất lỗi lớp được đánh giá qua một số thiết đặt. Hình 6a cho thấy xác suất lỗi lớp một
luồng khi tổng số bin được đặt là 90. Hình 6b chỉ hàm xác suất tương tự với số lượng bin là
900. Trong các hình này, số lượng các mức sử dụng trong SFB với số lượng các luồng không
Hình 6. Xác suất của misclassification
hồi đáp là khác nhau. Các hình cũng chỉ ra rằng, khi số lượng các luồng không hồi đáp nhỏ
hơn so với số lượng bin, việc sử dụng nhiều mức giữ cho xác suất của lỗi lớp rất thấp. Tuy
nhiên, khi số lượng các luồng không hồi đáp tăng lên quá một nửa số bin hiện tại, mức đơn lẻ
của hàng đợi SFB có thể có xác suất lỗi lớp nhỏ nhất. Điều này là do thực tế khi các bin được
phân tán qua nhiều mức, mỗi luồng không hồi đáp làm "rác" một số lượng lớn các bin. Ví dụ,

sử dụng hàng đợi SFB một mức với 90 bin, một luồng không hồi đáp làm rác chỉ một bin. Sử
dụng hàng đợi SFB hai mức với mỗi mức 45 bin, số bin có hiệu lực là 45x45=2025. Tuy
nhiên, một luồng không hồi đáp đơn làm rác hai bin (mỗi mức một bin). Do đó, lợi thế của
việc sử dụng hàng đợi SFB hai mức bị mất khi các luồng không hồi đáp được tăng thêm.
c) SFB với hàm băm thay đổi:
Trong phần này, hai vấn đề cơ bản với thuật toán SFB được thảo luận. Thứ nhất, như
mô tả ở trên, là để giảm thiểu những ảnh hưởng của sự lỗi lớp. Vấn đề thứ hai là có thể phát
hiện các luồng không hồi đáp trở thành có hồi đáp và phân lớp lại chúng khi chúng thực hiện.
Ý tưởng đằng sau SFB với các hàm băm di chuyển là định kỳ hoặc ngẫu nhiên đặt lại
các bin và thay đổi các hàm băm. Một luồng không hồi đáp sẽ tiếp tục được xác định và hạn
chế tỉ lệ bất kể sử dụng hàm băm nào. Tuy nhiên, bằng cách thay đổi hàm băm, các luồng
TCP hồi đáp băm vào bin rác sẽ có khả năng được băm lại vào ít nhất một bin không rác. Chú
ý rằng, kỹ thuật này tạo ra các bin ảo hiệu quả qua thời gian chỉ như nhiều mức của bin trong
thuật toán ban đầu tạo các bin ảo. Trong nhiều cách, hiệu quả của việc sử dụng hàm băm là
tương tự chuyển kênh trong hệ thống CDMA. Thực chất là nó làm giảm kết nối hồi đáp liên
tục bị ánh xạ vào bin rác.
Hình 7. Băng thông của các luồng TCP sử dụng SFB
Hình 8. Băng thông của các luồng TCP sử dụng thuật toán SFB
Để chỉ ra hiệu quả của phương pháp này, ý tưởng của các hàm băm thay đổi đã được áp
dụng để thử nghiệm trong hình 7b. Trong thử nghiệm này, 8 luồng không hồi đáp với 400
luồng hồi đáp chia sẻ một kiên kết nút cổ chai. Để chống lại sự lỗi lớp, hàm băm được liên tục
thay đổi sau mỗi 2 giây. Hình 8a chỉ ra lô băng thông của thử nghiệm. Như hình cho thấy,
SFB thực thi tốt công bằng. Trong khi các luồng thỉnh thoảng lỗi và gây ra một sự suy giảm
hiệu năng, không có các luồng TCP thân thiện bị tắt do sự lỗi lớp. Điều này trái ngược với
hình 7, nơi một số luồng TCP quan trọng nhận được rất ít băng thông.
Trong khi thay đổi các hàm băm cải thiện sự công bằng qua các luồng trong thử
nghiệm, Chú ý rằng, mỗi lần hàm băm được thay đổi và các bin được đặt lại, các luồng không
hồi đáp tạm thời được đặt tại "parole". Chỉ sau khi các luồng gây mất gói lâu, chúng được xác
định và hạn chế lại một lần nữa. Thật không may, điều này có tiềm ẩn cho phép các luồng như
thế giành nhiều băng thông hơn băng thông công bằng được giành cho nó. Ví dụ, như hình 8a

cho thấy, các luồng không hồi đáp được cho phép tiêu tốn 3.85Mbs của liên kết nút cổ chai.
Một cách để giải quyết vấn đề trên là sử dụng hai tập các bin. Một tập được sử dụng để quản
lí hàng đợi, tập thứ hai sử dụng lần thiết đặt kế tiếp của các hàm băm có thể được khởi động.
Trong trường hợp này, mỗi lần một luồng được phân lớp như là luồng không hồi đáp, nó
được băm bằng cách sử dụng tập thứ hai của các hàm băm và xác suất đánh dấu của các bin
tương ứng trong thiết đặt khởi động được cập nhật. Khi các hàm băm chuyển đổi, các bin đã
được khởi động được sử dụng sau đó. Do đó, các luồng không hồi đáp bị giới hạn ngay từ khi
bắt đầu. Hình 8b cho thấy hiệu năng của phương pháp này. Như hình chỉ ra, hàm băm đôi
kiểm soát hiệu quả băng thông của các luồng không hồi đáp và đáp ứng cho các luồng TCP
một mức bảo vệ cao.
Một trong những lợi thế của hàm băm động là nó có thể nhanh chóng phản ứng lại với
các luồng không hồi đáp. Trong trường hợp này, việc thay đổi các bin băm nơi luồng vừa
được tạo ra trên hy vọng cho hành vi tốt. Chỉ sau khi luồng truyền lại với tỉ lệ cao, là nó lại bị
giới hạn. Để chỉ ra điều này, một thử nghiệm bổ sung được chạy bằng cách sử dụng cài đặt
tương tự thử nghiệm trên. Trong thử nghiệm này, một luồng không hồi đáp với tốc độ truyền
5Mbs và một luồng biến đổi chạy giữa hai điểm cuối của mạng, luồng biến đổi truyền ở 5Mbs
từ t=10s đến t=30s và từ t=50s đến t=70s. Trong tất cả các thời gian, luồng truyền ở 0.10Mbs,
xấp xĩ một chia sẻ cân bằng của một kiên kết thắt nút cổ chai. Bảng sau cho thấy tỉ lệ mất gói
tin trong thử nghiệm.
PHẦN III: KẾT LUẬN
BLUE làm việc tốt hơn RED trong trường hợp kích cỡ của bộ đệm thấp. Mặc dù
thuật toán BLUE là đơn giản để thực hiện, nó còn phải được tham số hóa một cách
đúng đắn và các tham số cần phải được thay đổi liên tục để làm cho hàng đợi có thể
thích nghi với việc thay đổi lưu lượng thường xuyên. BLUE sẽ không hiệu quả trong
trường hợp không có dòng thông tin không phản hồi. SFB hoạt động tốt hơn RED và
BLUE, đặc biệt là khi trong mạng có nhiều luồng không hồi đáp. Giúp cải thiện hiệu
năng thực hiện của các luồng TCP.
MỘT SỐ MÔ PHỎNG THÊM
1. Mạng mô phỏng gồm hai router 12 và 13, liên kết chiều từ 12 sang 13 sử
dụng SFB, từ 13 sang 12 là Droptail. Mỗi router nối với sáu nút. (5TCP và 1 non-

TCP).Các thông tin chung của kết quả mô phỏng:

2. Mô phỏng như mạng trên với 1TCP và 5 non-TCP
Các thông tin kết quả mô phỏng:
VI. TÀI LIỆU THAM KHẢO
[1] B. Bloom. Space/time Trade-offs in Hash Coding with Allowable Errors.
Communications of the ACM, 13(7), July 1970.
[2] R. Braden, D. Clark, J. Crowcroft, B. Davie, S. Deering, D. Estrin, S. Floyd,
V. Jacobson, G. Minshall,
C. Partridge, L. Peterson, K. Ramakrishnan, S. Shenker, J. Wroclawski, and L.
Zhang. Recommenda-25tions on Queue Management and Congestion Avoidance in
the Internet. RFC 2309, April 1998.
[3] K. Cho. A Framework for Alternate Queueing: Towards Traffic Management
by PC-UNIX Based Routers. USENIX 1998 Annual Technical Conference, June 1998.
[4] I. Cidon,R. Guerin, and A.Khamisy. Protective BufferManagement Policies.
IEEE/ACMTransactions on Networking, 2(3), June 1994.
[5] S. Doran. RED Experience and Differentiated Queueing. In NANOG
Meeting, June 1998.
[6] K. Fall and S. Floyd. Router Mechanisms to Support End-to-End Congestion
Control.
February 1997.
[7] W. Feng, D. Kandlur, D. Saha, and K. Shin. Techniques for Eliminating
Packet Loss in Congested TCP/IP Networks. In UM CSE-TR-349-97, October 1997.
[8] W. Feng, D. Kandlur, D. Saha, and K. Shin. Understanding TCP Dynamics in
an Integrated Services Internet. In Proc. of NOSSDAV ’97, May 1997.
[9] W. Feng, D. Kandlur, D. Saha, and K. Shin. Adaptive Packet Marking for
Providing Differentiated Services in the Internet. In Proc. of ICNP ’98, October 1998.
[10] W. Feng, D. Kandlur, D. Saha, and K. Shin. A Self-Configuring RED
Gateway. In Proc. IEEE INFOCOM, March 1999.
[11] S. Floyd. TCP and Explicit Congestion Notification. Computer

Communication Review, 24(5):10–23,October 1994.
[12] S. Floyd and V. Jacobson. On Traffic Phase Effects in Packet-Switched
Gateways. Internetworking: Research and Experience, 3(3):115–156, September 1992.
[13] S. Floyd and V. Jacobson. Random Early Detection Gateways for
Congestion Avoidance. ACM/IEEE Transactions on Networking, 1(4):397–413,
August 1993.
[14] S. Floyd and V. Jacobson. Link-sharing and Resource Management Models
for Packet Networks. IEEE/ACM Transactions on Networking, 3(4), August 1995.
[15] R. Guerin, S. Kamat, V. Peris, and R. Rajan. Scalable QoS Provision
Through Buffer Management. In Proceedings of ACM SIGCOMM, September 1998.
[16] IEEE 802.11 Working Group. IEEE 802.11 Standard, June 1997.
[17] V. Jacobson. Congestion Avoidance and Control. In Proceedings of
ACMSIGCOMM, pages 314–329, August 1988.
[18] D. Lin and R.Morris. Dynamics of Random Early Detection. In Proc. of
ACM SIGCOMM, September 1997.
[19] S. McCanne and S. Floyd. ns-LBNL Network
Simulator, 1996.
[20] P. McKenney. Stochastic Fairness Queueing. In Proc. IEEE INFOCOM,
March 1990.
[21] R. Morris. TCP Behavior with Many Flows. In Proc. IEEE International
Conference on NetworkProtocols, October 1997.
PHỤ LỤC
A. Khai báo hàm băm trong thư viện fairblue.cc
int
hashit(unsigned int a, unsigned int b, unsigned int c, unsigned int d, int
modulus)
{
int h;
h = ((a << 6) + (b << 12) + (c << 18) + (d << 24) ) % modulus;
return h;

}
int
sfbhash(hdr_ip* pkt, int level, unsigned int fudge)
{
unsigned int i,j;
switch (level) {
case 0:
j = (unsigned int) (pkt->dport() * fudge);
i = hashit(int(pkt->daddr()), int(pkt->sport()), int(pkt->saddr()),
j, SFQ_BINS);
break;
case 1:
j = (unsigned int)(pkt->sport() * fudge);
i = hashit(int(pkt->saddr()),int(pkt->dport()),j,int(pkt->daddr()),
SFQ_BINS);
break;
}
/*If more levels are added to the bloom filter, the functions*/
/*go here. - Sunil.*/
return(i);
}
B. Các hàm xử lí bin trong lớp fairblue
void
FairBlue::reset_bins()
{
clearpkts_ = q_->length();
newsfq_ = cursfq_;
cursfq_ = 1 - cursfq_;
for (int i = 0; i < SFQ_LEVELS; i++)
for (int j = 0; j < SFQ_BINS; j++) {

bins[i][j][cursfq_].pkts = 0;
bins[i][j][cursfq_].freezetime = 0;
if (bins[i][j][cursfq_].pmark > 1.00)
bins[i][j][cursfq_].pmark = 1.00;
if (bins[i][j][cursfq_].pmark < 0)
bins[i][j][cursfq_].pmark = 0;
//keep pmark from before to identify
//non-responsives immediately
bins[i][j][newsfq_].pmark = 0.2;
}
}
void
FairBlue::dq_update_bins(hdr_ip* pkt)
{
double now;
int i,j,k;
for (i = 0; i < SFQ_LEVELS; i++) {
j = sfbhash(pkt,i,currfudge_);
k = sfbhash(pkt,i,currfudge_ + 1);
bins[i][j][cursfq_].pkts ;
if (bins[i][j][cursfq_].pkts <= 0) {
now = Scheduler::instance().clock();
bins[i][j][cursfq_].pkts = 0;
decrement_bin(decrement_,i,j,k);
}
}
}
void
FairBlue::eq_update_bins()
{

for (int i = 0; i < SFQ_LEVELS; i++)
bins[i][p_bins[i]][cursfq_].pkts++;
}
void
FairBlue::increment_bin(double increment, int i)
{
double now = Scheduler::instance().clock();
switch (algorithm_) {
case 0:
default:
if (now - bins[i][p_bins[i]][cursfq_].freezetime < holdtime_)
break;
bins[i][p_bins[i]][cursfq_].freezetime = now;
bins[i][p_bins[i]][cursfq_].pmark += increment;
if (bins[i][p_bins[i]][cursfq_].pmark > 1.00)
bins[i][p_bins[i]][cursfq_].pmark = 1.00;
bins[i][p_wbins[i]][newsfq_].pmark += increment;
}
}
void
FairBlue::increment_bins(double increment)
{
double now = Scheduler::instance().clock();
for (int i = 0; i < SFQ_LEVELS; i++) {
switch (algorithm_) {
case 0:
default:
bins[i][p_bins[i]][cursfq_].freezetime = now;
bins[i][p_bins[i]][cursfq_].pmark += increment;
if (bins[i][p_bins[i]][cursfq_].pmark > 1.00)

bins[i][p_bins[i]][cursfq_].pmark = 1.00;
bins[i][p_wbins[i]][newsfq_].pmark += increment;
}
}
}
void
FairBlue::decrement_bin(double decrement, int i, int j, int k)
{
double now = Scheduler::instance().clock();
switch (algorithm_) {
case 0:
default:
if (now - bins[i][j][cursfq_].freezetime < holdtime_)
break;
bins[i][j][cursfq_].freezetime = now;
bins[i][j][cursfq_].pmark -= decrement;
if (bins[i][j][cursfq_].pmark < 0)
bins[i][j][cursfq_].pmark = 0;
bins[i][k][newsfq_].pmark -= decrement;
}
}

×