4. Cấu trúc nội dung của luận án
2.6.2.2. Xây dựng khối phát hiện dữ liệu
Dựa trên cấu trúc của chuyển mạch OpenFlow trên nền tảng NetFPGA, tác giả đã tổng hợp và tìm ra các tín hiệu báo có gói tin tới chuyển mạch và tín hiệu báo chuyển mạch đã chuyển hết các gói tin tới các thiết bị khác trong mạng. Từ đó, khối phát hiện dữ liệu dựa vào các tín hiệu đầu vào này đã được đề xuất. Các tín hiệu được trình bày trong Hình 2.23.
Data Detector CPCI BUS NF2 REG GROUP USER DATA PATH CPU QUEUE NF2 DMA System States Frequency Controller Packets Manager Queue Condition Registers Manager Working state NF2 MAC Mac_grp_core_en Registers Core Clock Controller Idle timeout Core_clk_packet_en Core_clk_reg_en Core_clk_en Software Register Max Queue L Max Num Packet
Wait timeout
Hình 2.23. Thiết kế chi tiết khối phát hiện dữ liệu
Trong thiết kế này bao gồm các khối chức năng nhỏ: Khối trạng thái hệ thống (System States), khối thanh ghi (Registers), khối điều kiện hàng đợi (Queue Condition), khối quản lý gói tin (Packets Manager), khối quản lý thanh ghi (Registers Manager) và khối điều khiển Core Clock (Core Clock Controller). Chi tiết các khối được thiết kế như sau:
48
Khối trạng thái hệ thống (System States)
Khối này có nhiệm vụ báo hiệu hệ thống bên trong chuyển mạch đang hoạt động hay ở chế độ chờ (idle). Đầu vào của khối này là các tín hiệu từ các khối User Data Path và CPU Queue. Dưới đây là bảng chức năng các tín hiệu đầu vào từ các khối:
Bảng 2.7. Mô tả chức năng các tín hiệu đầu của khối System States
Tín hiệu Chức năng Vị trí
udp_in_wr Tín hiệu báo có dữ liệu ghi vào khối UDP từ
các hàng đợi CPU Queue và Ethernet QUEUE.
Là đầu ra của các khối bên trong User Data Path
udp_out_wr Tín hiệu báo UDP có dữ liệu ghi ra các hàng
đợi CPU Queue và Ethernet QUEUE.
vlan_remover_out_wr Tín hiệu báo có dữ liệu ghi ra ngoài từ khối
VLAN Remover.
vlan_adder_out_wr Tín hiệu báo có dữ liệu ghi ra ngoài từ khối
VLAN Adder.
opl_in_fifo_empty Tín hiệu báo FIFO pipeline của Output port
lookup rỗng.
cpu_q_dma_wr_pkt_vld Tín hiệu báo có gói tin từ khối NF2 DMA tới
khối CPU DMA Queue.
Là đầu ra của các khối CPU DMA Queue.
cpu_q_dma_wr Dữ liệu báo có dữ liệu ghi vào khối CPU
DMA Queue.
cpu_q_dma_pkt_avail Tín hiệu báo khối CPU DMA Queue có gói
tin cần nhận.
cpu_q_dma_rd_rdy Tín hiệu báo khối CPU DMA Queue sẵn
sàng nhận dữ liệu.
Dựa vào các tín hiệu báo hiệu trên Bảng 2.7, tác giả đã nhóm các tín hiệu và đưa ra trạng thái hoạt động của từng khối bên trong chuyển mạch như Bảng 2.8. Từ các tín hiệu này khối trạng thái hệ thống (System States) sẽ tổng hợp ra tín hiệu working_state để thông báo trạng thái đang hoạt động của chuyển mạch. Nếu working_state = 1 thì hệ thống đang làm việc và chuyển mạch vẫn phải hoạt động bình thường. Nếu working_state = 0, thì các gói tin đã xử lý xong và lúc đó ta có thể giảm tần số của chuyển mạch về 0 MHz để tiết kiệm năng lượng.
49
Bảng 2.8. Nhóm tín hiệu báo hiệu trạng thái của các khối
Nh m tín hiệu Chức năng
work_udp_grp0 = udp_in_wr| vlan_remover_out_wr| (!opl_in_fifo_empty);
Nhóm tín hiệu báo UDP đang xử lý và forward các gói tin.
work_udp_grp1 = vlan_adder_out_wr | udp_out_wr;
work_cputx_grp = cpu_q_dma_wr_pkt_vld | cpu_q_dma_wr;
Nhóm tín hiệu báo có dữ liệu gửi từ khối NF2 DMA tới khối CPU DMA Queue. work_cpurx_grp = cpu_q_dma_pkt_avail |
cpu_q_dma_rd_rdy;
Nhóm tín hiệu báo hiệu khối CPU DMA Queue đang gửi tín hiệu ra ngoài.
Khối thanh ghi (Registers)
Khối này chịu trách nhiệm giao tiếp với các thanh ghi để đọc và ghi các giá trị được cấu hình bằng phần mềm. Một số ngưỡng có thể được thiết lập và cung cấp cho các khối khác như:
Max Queue Length - chiều dài hàng đợi lớn nhất. Khi chiều dài hàng đợi bằng
ngưỡng này thì chuyển mạch sẽ tự động chuyển về trạng thái hoạt động bình thường.
Max Packet Number - Số gói tin lớn nhất trong hàng đợi. Khi số lượng gói tin
trong hàng đợi bằng ngưỡng này thì chuyển mạch sẽ tự động chuyển về trạng thái hoạt động bình thường.
Idle timeout - Thời gian chờ, sau khi chuyển mạch xử lý xong, nếu quá thời gian này mà không có yêu cầu bật thì chuyển mạch sẽ sleep để tiết kiệm năng lượng. Wait timeout - Thời gian chờ tối đa của các gói tin đi vào hàng đợi. Nếu quá thời
gian này thì chuyển mạch sẽ tự động chuyển về trạng thái hoạt động bình thường. Sau khi 1 gói tin nhận hoàn chỉnh thì wait timeout bắt đầu được tính.
Khối điều kiện hàng đợi (Queue Condition)
Đầu vào của khối này là các tín hiệu từ khối NF2 MAC như: rx_data_count là kích thước của hàng đợi đầu vào, rx_packet_count là số lượng các gói tin vào hàng đợi đầu vào. Khối điều kiện hàng đợi so sánh các tín hiệu này với các ngưỡng tín hiệu đầu ra của khối thanh ghi. Nếu giá trị của rx_data_count là lớn hơn Max Queue Length hoặc giá trị của rx_packet_count lớn hơn Max Packet Number hoặc thời gian chờ của một gói lớn hơn
50
Wait timeout thì khối này sẽ báo tín hiệu đầu ra mac_grp_core_en để yêu cầu hệ thống chuyển về chế độ hoạt động bình thường như nguyên lý hoạt động thể hiện trên Hình 2.24.
rx_data_count >= Max queue length Nhận và đếm gói tin
đầu vào hàng đợi
rx_packet_count >= Max packet number
Timeout >= wait timeout N N Bắt đầu mac_grp_core_en = 1 Y Y Y Kết thúc N mac_grp_core_en = 0
Hình 2.24. Nguyên l hoạt động của khối điều kiện hàng đợi (Queue Condition)
Khối quản lý g i tin (Packets Manager)
Chức năng của khối này là để quản lý các trạng thái hoạt động của chuyển mạch. Một tín hiệu đầu vào của khối này là dma_vld_c2n báo hiệu chuyển mạch sẽ nhận các gói tin qua DMA Bus. Ngoài ra, còn có các tín hiệu đầu vào khác là mac_grp_core_en được cung cấp từ khối điều kiện hàng đợi (Queue Condition), tín hiệu working_state thông báo trạng thái của User Data Path và CPU Queue, nó được gửi từ khối trạng thái hệ thống (System States). Tín hiệu idle timeout được nhận từ phần mềm điều khiển thông qua khối thanh ghi (Registers).
Từ những tín hiệu này, ba trạng thái mới cho chuyển mạch tiết kiệm năng lượng OpenFlow được đề xuất như dưới đây:
WORKING mode: Đây là trạng thái làm việc bình thường của chuyển mạch. Tần số
hoạt động ở trạng thái này 125MHz để chuyển mạch có thể truyền nhận các gói tin trong mạng.
51
IDLE mode: Là trạng thái chờ của chuyển mạch. Khi chuyển mạch xử lý xong hết
các gói tin và không có lưu lượng tới chuyển mạch thì chuyển mạch chuyển sang trạng thái này. Tần số hoạt động ở trạng thái này vẫn duy trì ở 125MHz để đợi gói tin tiếp theo.
SLEEP mode: Là trạng thái chuyển mạch nghỉ để tiết kiệm năng lượng khi không có
lưu lượng chuyển qua. Sau khi chuyển mạch chờ tới ngưỡng – idle timeout thì tần số hoạt động được giảm về 0 MHz.
IDLE core_clk_packet_en = 1 WORKING core_clk_packet_en = 1 SLEEP core_clk_packet_en = 0 mac_grp_core_en |dma_vld_c2n | working_state = 1 Idle tim e > id le tim eo ut mac _grp _cor e_en |dm a_vl d_c2 n = 1 mac_grp_core_en |dma_vld_c2n | working_state = 0
Hình 2.25. Sơ đồ chuyển trạng thái của chuyển mạch tiết kiệm năng lượng
Sự thay đổi các trạng thái này được biểu diễn như trên Hình 2.24. Tại WORKING mode và IDLE mode thì tín hiệu core_clk_packet_en = 1 để yêu cầu duy trì tần số hoạt động ở 125 MHz. Tần số hoạt động này sẽ được giảm xuống 0 MHz ở SLEEP mode (tín hiệu core_clk_packet_en= 0) để tiết kiệm năng lượng tiêu thụ của chuyển mạch OpenFlow.
Khối quản lý thanh ghi (Registers Manager)
Khối này có trách nhiệm báo hiệu tình trạng của hệ thống các thanh ghi bên trong chuyển mạch. Nó nhận tín hiệu từ các thanh ghi bao gồm: tín hiệu work_reg_grp báo hiệu hàng đợi của NF2 Reg Group đang xử lý và tín hiệu cpci_bus_dv báo hiệu chuyển mạch sẽ nhận các gói tin thông qua bus PCI. Khi một trong hai tín hiệu này hoặc work_reg_grp = 1 hoặc cpci_bus_dv = 1 thì khối quản lý thanh ghi sẽ báo hiệu một tín hiệu đầu ra core_clk_reg _en = 1 để yêu cầu chuyển mạch trở về trạng thái hoạt động bình thường với tần số là 125 MHz.
Khối điều khiển Core Clock (Core Clock Controller)
Dựa trên các tín hiệu báo hiệu core_clk_packet_en từ khối quản lý gói tin (Packets Manager) và tín hiệu core_clk_reg_en từ khối quản lý thanh ghi (Register Manager), khối
52
điều khiển Core Clock sẽ báo hiệu một tín hiệu core_clk_en để thay đổi tần số hoạt động chuyển mạch OpenFlow như nguyên lý làm việc trên Hình 2.26.
Core_clk_packet_en = 1 N Core_clk_reg_en = 1 Bắt đầu core_clk_en = 1 Y Y Kết thúc core_clk_en = 0 N
Hình 2.26. Nguyên l hoạt động của khối điều khiển Core Clock