4. Cấu trúc nội dung của luận án
2.5.2.4. Mở rộng bản tin OpenFlow cho các chế độ làm việc
Để thực hiện các chế độ hoạt động mới cho chuyển mạch nhằm tiết kiệm năng, tác giả mở rộng bản tin điều khiển OpenFlow [44] được định nghĩa như sau:
• Bản tin OFPT_ SWITCH _MOD:
Chiều bản tin: Bộ điều khiển xuống chuyển mạch Độ dài: 32 Bytes
Chức năng: Thay đổi hoạt động của chuyển mạch Cấu trúc:
struct ofp_switch_mod {
struct ofp_header header; uint8_t switch_mode;
uint8_t pad[3]; };
Trường Switch_mode lưu trữ các thông tin cấu hình chuyển mạch như trong Bảng 2.6. Giá trị „1‟ ở vị trí cờ (F) cho phép chuyển mạch thay đổi trạng thái. Trường Switch_ mode chỉ ra chế độ làm việc của chuyển mạch như sau: chế độ công suất cao (M1M0=00), chế độ công suất thấp (M1M0=01) và chế độ ngủ (M1M0=10). M1M0=11 dự phòng (Hình 2.19).
43
Bảng 2.6. Bản tin OFPT_Switch_mode cho 3 chế độ hoạt động
OpenFlow Header Switch Mode Pad
8 Bytes 1 Bytes 3 Bytes
F - - - - - M1 M0
7 0
Reserved Mode
Flag
Hình 2.19. Trường Switch Mode định nghĩa các chế độ hoạt động
Bắt đầu Bắt ta với NOX Nhận bản tin Chế độ: Công suất cao? Thiết lập cổng băng thông 1Gbps Y Chế độ: Công suất thấp? Thiết lập cổng băng thông 100Mbps Y N Chế độ: ngủ? Thiết lập cổng idle Y N N OK? Kết thúc Y N F = 125 Mhz F = 62.5Mhz F = 3.9065Mhz Hàng đợi trống? N Y
Hình 2.20. Lưu đồ thuật toán điều khiển các chế độ hoạt động
Thuật toán thể hiện trên sơ đồ trong Hình 2.20 dưới đây minh họa quá trình tiếp nhận và xử lý bản tin điều khiển trên chuyển mạch OpenFlow. Sau khi hoàn thành giao thức “bắt tay” với bộ điều khiển, chuyển mạch sẽ chạy trong chế độ nghe theo dõi tất cả các bản tin điều khiển và chỉ dẫn lệnh gửi đến nó. Ngay sau khi nhận được bản tin về chế độ hoạt động mới (Bản tin OFPT_SWITCH_MOD cho 3 chế độ hoạt động), chuyển mạch sẽ giới hạn băng thông trên mỗi cổng và thiết lập các giá trị tần số tương ứng nhờ vào các bản tin điều khiển: OFPT_PORT_MOD (Mục 2.4.2) và OFPT_SWITCH_MOD giảm tần (Mục 2.3.3). Cần chú ý là trước khi chuyển sang chế độ ngủ trên mỗi cổng phải chắc chắn rằng
44
không có gói tin nào còn lại trong hàng đợi của nó. Do vậy, một số khối theo dõi hàng đợi được sử dụng để kiểm tra hàng đợi rỗng hay không.
2.6. Giải pháp thiết kế chuyển mạch OpenFlow tự động tiết kiệm năng lƣợng theo lƣu lƣợng đầu vào
Trong [19][40], cho thấy lưu lượng truy cập thông qua chuyển mạch và bộ định tuyến thay đổi đáng kể với thời gian. Lưu lượng thường lên mức đỉnh vào ban ngày và hạ xuống rất thấp vào ban đêm. Khi lưu lượng thấp các thiết bị mạng vẫn đang ở trạng thái hoạt động, điều này gây ra tiêu tốn nhiều năng lượng không cần thiết để chạy các thiết bị mà không có lưu lượng đi qua. Vì vậy để tăng hiệu quả tiết kiệm năng lượng cho chuyển mạch, tác giả đề xuất một giải pháp khác giúp chuyển mạch Openflow có thể tự động tiết kiệm năng lượng theo lưu lượng đầu vào mà không cần sự can thiệp của bộ điều khiển NOX /POX. Trong thực tế, ta có thể áp dụng cả hai giải pháp điều khiển bằng NOX /POX và giải pháp tự động tiết kiệm năng lượng cho chuyển mạch để mang lại hiệu quả cao nhất.
2.6.1. Giải pháp thiết kế
Thông thường một thiết bị mạng có chức năng tiết kiệm năng lượng tiêu thụ thì nó thường hoạt động ở hai chế độ: chế độ làm việc (working mode) và chế độ ngủ (sleep mode). Khi thiết bị xử lý lưu lượng truy cập, nó hoạt động ở chế độ làm việc. Khi không có lưu lượng để xử lý, thiết bị chuyển qua chế độ ngủ để tiết kiệm năng lượng. Như vậy, năng lượng tiêu thụ của một thiết bị mạng nói chung có thể được mô hình hóa như sau:
E = Pworking * Tworking + Psleep * Tsleep (2.2) Trong đó Tworking và Tsleep là thời gian thiết bị hoạt động ở chế độ làm việc và chế độ ngủ, Pworking và Psleep là công suất tiêu thụ của thiết bị tương ứng trong mỗi chế độ. Trong các công trình được công bố [31][30] công suất tiêu thụ của một chuyển mạch NetFPGA được tính bằng phương trình dưới đây:
P(f) = PC(f) + KPE(f) +NIEp(f) + RIEr(f) + R0Et(f) (2.3) Trong đó f là tần số hoạt động của NetFPGA. Dựa vào công thức (2.3) ta thấy năng lượng tiêu thụ của chuyển mạch phụ thuộc vào tần số hoạt động.
Ngoài ra, bình thường khi một gói tin được gửi đến một chuyển mạch OpenFlow, chuyển mạch nhận được hoàn toàn gói tin này trong hàng đợi thì nó mới bắt đầu xử lý và chuyển tiếp đến các thiết bị khác trong mạng. Do vậy, để tăng sự tiết kiệm năng lượng cho chuyển mạch OpenFlow, chúng ta có thể tăng thời gian Tsleep bằng cách cho gói tin chứa trong hàng đợi đầu vào và chờ đợi đến một ngưỡng lớn nhất có thể mà không ảnh hưởng
45
đến chất lượng truyền dữ liệu thì chuyển mạch sẽ tự động được đánh thức (Wake up) để xử lý và chuyển tiếp các gói tin.
Từ đó, tác giả đã đề xuất một giải pháp mới để tiết kiệm năng lượng cho chuyển mạch như sau:
Khi gói tin đi vào chuyển mạch, nó sẽ được chứa trong các hàng đợi, hệ thống sẽ chuyển về chế độ hoạt động bình thường (f = 125MHz) trong các trường hợp sau: Khi số gói tin đi vào lớn hơn số gói tin lớn nhất (Max Packet Number) hoặc khi chiều dài hàng đợi lớn hơn chiều dài hàng đợi lớn nhất (Max Queue Length) hoặc khi thời gian đợi của gói tin lớn hơn Wait Timeout (sau khi 1 gói tin đầu tiên nhận hoàn chỉnh thì Wait Timeout bắt đầu được tính) như mô tả trên Hình 2.21. Khi hệ thống xử lý xong các gói tin đang chờ và các gói tin mới đến hoàn chỉnh ở trong hàng đợi. Nếu không còn gói tin đến hoặc gói tin đến đang đợi mà hết thời gian Idle Timeout thì hệ thống sẽ sleep (chuyển tần số về 0 MHz) để tiết kiệm năng lượng.
Chiều dài hàng đợi lớn nhất Số gói tin lớn nhất Tín hiệu đầu ra Th i gian h Tín hiệu đầu vào Th i gian (Phút) Lư u lư ợ ng (M bp s)
Hình 2.21. Hoạt động của chuyển mạch tự động tiết kiệm năng lượng
2.6.2. Thiết kế khối phát hiện dữ liệu trên chuyển mạch OpenFlow
Để thiết kế chuyển mạch tự động tiết kiệm năng lượng theo dữ liệu đầu vào, tác giả xây dựng thêm khối phát hiện dữ liệu DD (Data Detector) và khối điều khiển tần số FC
(Frequency Controller) cho chuyển mạch OpenFlow như mô tả Hình 2.22. Khối phát hiện dữ liệu này có chức năng quản lý các trạng thái của chuyển mạch và đưa ra tín hiệu điều khiển đến khối điều khiển tần số để thay đổi tần số cho chuyển mạch nhằm tiết kiệm năng lượng.
2.6.2.1. Vị trí khối phát hiện dữ liệu
Khối phát hiện dữ liệu được thiết kế nằm trong NF2 Core như mô tả trên Hình 2.22, nhằm lấy tín hiệu đầu vào từ các khối CPCI Bus, NF2 DMA, CPU DMA Queue, NF2 Reg grp, User Data Path và NF2 Mac [27][45].
46
NF2 TOP
NF2 CORE
USER DATA PATH NF2_MAC DD (Data Detector) Input Arbiter VLAN remover Watchdog Output Port Lookup VLAN adder Output Queues TX Queue Ethernet MAC RX Queue CPU DMA QUEUE
NF2 DMA CPCI BUS
NF2 REG GRP CPU RX Queue CPU TX Queue FC (Frequency Controller)
Hình 2.22. Vị trí khối phát hiện dữ liệu trong chuyển mạch
• CPCI BUS
Khối này có chức năng giao tiếp với Chip Virtex II [39] (Chip kết nối với Bus PCI) bằng giao tiếp dạng Bus (cấu trúc tương tự như Bus memory đơn giản). Ở thiết kế của OpenFlow, khối này có chức năng giúp PC giao tiếp với thanh ghi. Các thanh ghi có chức năng điều khiển và đọc thông số của kit NetFPGA. Bộ nhớ SRAM chứa các bảng flow cũng nằm ở khối này.
• NF2 DMA
Khối này cũng kết nối với chip Virtex II nhưng sử dụng DMA bus (giao tiếp kiểu DMA). Khối này có chức năng truyền và nhận dữ liệu (các gói tin Ethernet/IP) cho CPU DMA Queue. Nó không có chức năng điều khiển mà tương tự như một cổng mạng với băng thông tối đa là 1.06 Gbps.
• CPU DMA QUEUE
Gồm 2 khối chính CPU Rx Queue và CPU Tx Queue, là hàng đợi để truyền nhận dữ liệu (gói tin) từ PC thông qua khối NF2 DMA.
• NF2 REG GRP
Là khối giải mã địa chỉ để tạo ra các nhóm thanh ghi giao tiếp với CPCI bus. Khối này còn kết nối với các khối thanh ghi trong User Data Path.
• USER DATA PATH (UDP)
Bao gồm các khối: Input Arbiter, VLan Remover, Watchdog, Output Port Lookup, VLan Adder và Output Queue. Khối này có nhiệm vụ xử lí gói tin, nó gom các gói tin từ 8
47
đầu vào (4 CPU queue, và 4 DMA queue) và chuyển các gói tin ra 8 đầu ra. Trong [15], các gói tin được tách thông tin header và thực hiện kiểm tra với flow table: qua 2 khối là exact match và wildcard match trong Output Port Lookup. Từ đó thực hiện action (OpenFlow protocol) và chuyển tiếp ra đầu ra được nêu trong action.
• NF2 MAC
Khối này làm nhiệm vụ khối MAC giao tiếp với chip PHY (broadcom) ở bên ngoài để truyền và nhận dữ liệu qua Ethernet.
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)