nghiên cứu giải pháp phần cứng tiết kiệm năng lượng trong trung tâm dữ liệu
DESCRIPTION
Nghiên cứu giải pháp phần cứng tiết kiệm năng lượng trong trung tâm dữ liệuTRANSCRIPT
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ VIỄN THÔNG
====o0o====
ĐÔ AN
TỐT NGHIỆP ĐAI HOCĐỀ TÀI:
NGHIÊN CỨU GIẢI PHAP PHẦN CỨNG TIẾT KIỆM NĂNG LƯỢNG TRONG TRUNG TÂM
DỮ LIỆU
Sinh viên thực hiện : LÊ THÁI HƯNG
NGUYỄN DUY LINH
LÊ ANH VĂN
Lớp KSTN- ĐTVT- K52
Giảng viên hướng dẫn : TS TRẦN NGỌC LAN
TS. TRẦN MINH TRUNG
TS. NGUYỄN XUÂN DŨNG
Ha Nôi, 06-2012
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ VIỄN THÔNG
====o0o====
ĐÔ AN
TỐT NGHIỆP ĐAI HOCĐỀ TÀI:
NGHIÊN CỨU GIẢI PHAP PHẦN CỨNG TIẾT KIỆM NĂNG LƯỢNG TRONG TRUNG TÂM
DỮ LIỆU
Sinh viên thực hiện : LÊ THÁI HƯNG
NGUYỄN DUY LINH
LÊ ANH VĂN
Lớp KSTN- ĐTVT- K52
Giảng viên hướng dẫn : TS TRẦN NGỌC LAN
TS. TRẦN MINH TRUNG
TS. NGUYỄN XUÂN DŨNG
Can bô phản biện :
Ha Nôi, 06-2012
BỘ GIÁO DỤC VÀ ĐÀO TẠO CỘNG HÒA XÃ HÔI CHỦ NGHĨA VIỆT NAMTRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
--------------------------------------------------Độc lập - Tự do - Hạnh phúc
---------------------------------
NHIỆM VỤ ĐÔ AN TỐT NGHIỆP
Họ và tên sinh viên: Lê Thái Hưng Số hiệu sinh viên: 20072451
Nguyễn Duy Linh Số hiệu sinh viên: 20071721
Lê Anh Văn Số hiệu sinh viên: 20073425
Khoa: K52 Viện: Điện tử - Viễn thông Ngành: Điện tử-Viễn thông
1. Đầu đề đồ án:
………………………………………………..………………………………………………………………………
……………………………………………………………………………………………………………..………...
2. Các số liệu và dữ liệu ban đầu:
……………………………………..……………………………………………..……..……………………………
……………………………………………………………………………………………………………………………….
…..………………………..…………………………………………………………………………………….
3. Nội dung các phần thuyết minh và tính toán:
………………………………………………………………………………………………………………..….
………………………………………………………………………………………………………………………………
……..….
………………………………………………………………………………………………………………………………
………..….……………………………………………………………………………………………
4. Các bản vẽ, đồ thị ( ghi rõ các loại và kích thước bản vẽ ):
………………………………………………………………………………………………………………………..….
…………………………………………………………………………………………………………………………..
……….………………………………………………………………………………………………………….
5. Họ tên giảng viên hướng dẫn: TS. Trần Ngọc Lan
TS. Trần Minh Trung
TS. Nguyễn Xuân Dũng
6. Ngày giao nhiệm vụ đồ án: ………………………………………………….……………
7. Ngày hoàn thành đồ án: ………………………………………………………………………..………
Ngày tháng năm
Chủ nhiệm Bô môn Giảng viên hướng dẫn
Sinh viên đã hoàn thành và nôp đồ an tốt nghiệp ngày thang năm
Cán bô phản biện
BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
---------------------------------------------------
BẢN NHẬN XÉT ĐÔ AN TỐT NGHIỆP
Họ và tên sinh viên: .....................................................................Số hiệu sinh viên: ...........................
Ngành: ..........................................................................................Khoa: ...........................................
Giảng viên hướng dẫn: .....................................................................................................................
Can bô phản biện: .................................................................................................................................
1. Nôi dung thiết kế tốt nghiệp:
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
................
2. Nhận xét của cán bô phản biện:
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
....................................
Ngày thang năm
Cán bô phản biện
( Ký, ghi rõ họ và tên )
ĐỒ ÁN TỐT NGHIỆP 2012
LỜI NÓI ĐẦU
Ngày nay, cac trung tâm dữ liệu đóng vai trò quan trọng
trong cac hoạt đông thường ngày của cac tổ chức như trường
học, doanh nghiệp, viện nghiên cứu. Những trung tâm dữ liệu
này cùng với sự phat triển không ngừng của xã hôi đang tăng
lên nhanh chóng về cả quy mô và số lượng. Số lượng may chủ
trong mỗi trung tâm dữ liệu đang tăng lên rất nhanh chóng để
đap ứng nhu cầu trao đổi thông tin mọi người trong xã hôi. Do
đó môt điều tất yếu là số lượng cac thiết bị chuyển mạch để kết
nối cac may chủ lại với nhau cũng phải tăng lên. Điều này làm
cho nhu cầu về điện năng tiêu thụ bởi cac trung tâm dữ liệu
ngày càng tăng lên tỉ lệ với kích thước của cac trung tâm này.
Và bài toan được đặt ra cho cac nhà nghiên cứu và cac nhà phat
triển là làm sao có thể giảm tối đa lượng điện năng tiêu thụ của
cac trung tâm dữ liệu này mà khả năng xử lý thông tin vẫn được
đảm bảo. Từ yêu cầu thực tế trên, nhóm tac giả đã nghiên cứu
và chế tạo thành công thiết bị điểu khiển giúp tiết kiệm năng
lượng cho cac bô chuyển mạch trong trung tâm dữ liệu và cũng
đã chế tạo thành công cac bô chuyển mạch có khả năng tự tiết
kiệm năng lượng. Những kết quả đạt được đã và đang mở ra
môt hướng đi mới rất khả thi cho việc phat triển, sản xuất đại
trà cac thiết bị mạng tiết kiệm năng lượng cũng như giúp cac
nhà quản lý trung tâm dữ liệu theo dõi công suất tiêu thụ của
toàn trung tâm dữ liệu, mức tiết kiệm năng lượng.
Sau môt thời gian lao đông miệt mài, nhóm tac giả đã
hoàn thành đồ an với đề tài:“Nghiên cứu giải pháp phần cứng
tiết kiệm năng lượng cho các trung tâm dữ liệu”
Nhờ những cố gắng không ngừng, tac giả đã gặt hai được môt số kết quả
nhất định. Mặc dù vậy, do thời gian có hạn nên môt số ý tưởng vẫn chưa được thực
NETFPGA GROUP-KSTN-ĐTVT-K52 i
ĐỒ ÁN TỐT NGHIỆP 2012
hiện và kết quả nghiên cứu không tranh khỏi môt vài sai sót nhỏ. Vì vậy, tac giả rất
mong nhận được ý kiến đóng góp của cac thầy cô giao và bạn bè.
Tac giả xin được gửi lời cảm ơn chân thành, sâu sắc tới:
Cô giao TS. Trần Ngọc Lan
Thầy giao TS. Trần Minh Trung
Thầy giao TS. Nguyễn Xuân Dũng
Thầy giao TS. Phạm Ngọc Nam
Thầy giao PGS.TS. Nguyễn Hữu Thanh
Cô giao TS. Trương Thu Hương
Cac bạn K51, K52, K53 trong nhóm OpenFlow
Tập thể lớp KSTN-ĐTVT-K52
Viện Điện Tử - Viễn Thông, trường ĐH Bach Khoa Hà Nôi
Cùng toàn thể gia đình và bạn bè
đã giúp đỡ và tạo mọi điều kiện thuận lợi cho tac giả trong qua trình nghiên cứu.
Đồ án được thực hiện trong khuôn khổ của dự án
“Giảm điện năng tiêu thụ của mạng cơ sở dữ liệu dựa trên
kĩ thuật lưu lượng (ECODANE)“ do PGS.TS. Nguyễn Hữu
Thanh chủ trì.
Sinh viên thực hiện: LÊ THAI HƯNG
NGUYỄN DUY LINH
LÊ ANH VĂN
NETFPGA GROUP-KSTN-ĐTVT-K52 ii
ĐỒ ÁN TỐT NGHIỆP 2012
TÓM TẮT ĐÔ AN
“Nghiên cứu giải pháp phần cứng tiết kiệm năng lượng cho các trung tâm dữ
liệu”
Trung tâm dữ liệu đóng môt vai trò quan trọng trong cac hoạt đông thường
ngày của mọi người. Sự mở rông không ngừng cả về phạm vi và quy mô của cac
trung tâm dữ liệu dẫn đến thực trạng mức tiêu thụ năng lượng qua lớn. Cac ảnh
hưởng của điều này không chỉ về gia cả mà còn về môi trường khi lượng khí đôc
hại thải ra từ cac trung tâm dữ liệu là môt vấn đề rất đang quan tâm. Môt trong
những giải phap được đưa ra đó là điều khiển môt cach thông minh việc tiêu thụ
năng lượng của cac bô chuyển mạch được sử dụng trong cac trung tâm dữ liệu.
Nhóm tac giả thực hiện đồ an đã đưa ra cac cải tiến cho cac bô chuyển mạch
OpenFlow nhằm mục đích hỗ trợ cac chế đô tiết kiệm năng lượng khac nhau. Sự cải
tiến này bao gồm định nghĩa cac bản tin mới theo chuẩn giao thức OpenFlow, thiết
kế bô điều khiển cac chuyển mạch OpenFlow (OSC) có khả năng bật tắt cac bô
chuyển mạch và cac port. Hơn nữa, nhóm tac giả đã tích hợp cac cải tiến này lên
chính cac bô chuyển mạch OpenFlow trên nền tảng phần cứng khả trình NetFPGA
trong khuôn khổ dự an ECODANE[1]. Cac kết quả được trình bày trong đồ an này
có thể được sử dụng bởi cac nhà sản xuất chuyển mạch OpenFlow hoặc những nhà
nghiên cứu về năng lượng tiêu thụ của cac thiết bị mạng.
NETFPGA GROUP-KSTN-ĐTVT-K52 iii
ĐỒ ÁN TỐT NGHIỆP 2012
ABSTRACT
“Reseaching hardware solution for energy saving in Data centers”
Data centers play an important role in our daily
activities. The increasing demand for data centers in both scale
and size has led to huge energy consumption. The cost and
environmental impact of data centers increases due to large
amounts of carbon emissions. One solution to this problem is to
intelligently control the power consumption of switches used in
data centers. This thesis proposes an extension to OpenFlow
switches to support different power saving modes. The
extension includes defining new messages in OpenFlow
standard and designing an OpenFlow Switch Controller (OSC)
that is able to turn on/off switches and disable/enable ports.
Furthermore, the extension is integrated into the NetFPGA
based OpenFlow switches in the ECODANE[1] framework.
That brings an opportunity of producing self-power aware
OpenFlow switches. The results presented in this thesis can aslo
be used by the OpenFlow compliant switches manufacturer or
by power aware research community.
NETFPGA GROUP-KSTN-ĐTVT-K52 iv
ĐỒ ÁN TỐT NGHIỆP 2012
MỤC LỤC
LỜI NÓI ĐẦU............................................................................................................i
TÓM TẮT ĐÔ AN...................................................................................................iii
ABSTRACT..............................................................................................................iv
MỤC LỤC.................................................................................................................v
DANH MỤC HÌNH VẼ...........................................................................................ix
DANH MỤC BẢNG BIỂU......................................................................................xi
CAC THUẬT NGỮ VIẾT TẮT............................................................................xii
PHẦN MỞ ĐẦU........................................................................................................1
Chương 1. Vấn đề tiết kiệm năng lượng trong trung tâm dữ liệu va giải pháp
sử dụng mạng OpenFlow.........................................................................................2
1.1 Vấn đề tiết kiệm năng lượng cho trung tâm dữ liệu.............................2
1.2 Giải phap sử dụng mạng OpenFlow.....................................................6
1.2.1 Sự cần thiết cho môt kiến trúc mạng mới.......................................6
1.2.2 Mục tiêu của mạng OpenFlow........................................................7
1.2.3 Giao thức OpenFlow......................................................................9
1.2.4 Lợi ích của mạng SDN dựa trên giao thức OpenFlow.................11
1.3 Kết luận chương..................................................................................13
Chương 2. Ứng dụng mạng OpenFlow trong trung tâm dữ liệu trên nền tảng
NetFPGA..................................................................................................................15
2.1 Giới thiệu công nghệ mạch tổ hợp FPGA..........................................15
2.1.1 Cac công nghệ mạch tổ hợp..........................................................15
2.1.2 Ứng dụng của FPGA....................................................................16
2.1.3 Kiến trúc của FPGA.....................................................................17
2.1.4 Cac bước thiết kế với FPGA của Xilinx.......................................21
2.1.5 Phần mềm ISE..............................................................................23
2.2 Chuyển mạch OpenFlow trên nền tảng kit NetFPGA........................24
NETFPGA GROUP-KSTN-ĐTVT-K52 v
ĐỒ ÁN TỐT NGHIỆP 2012
2.2.1 Kiến trúc bô chuyển mạch OpenFlow..........................................24
2.2.2 Giới thiệu về NetFPGA................................................................26
2.2.3 Làm việc với môt dự an NetFPGA...............................................30
2.2.4 Xây dựng bô chuyển mạch OpenFlow trên nền tảng NetFPGA. .34
2.3 Kết luận chương..................................................................................38
Chương 3. Triển khai hệ thống mạng OpenFlow trên nền tảng kit NetFPGA
trong thực tế............................................................................................................39
3.1 Giới thiệu mô hình thử nghiệm...........................................................39
3.2 NOX controller...................................................................................40
3.3 Xây dựng chuyển mạch OpenFlow....................................................44
3.3.1 Cài đặt cac gói phần mềm cơ bản.................................................44
3.3.2 Biên dịch và tải Driver xuống NetFPGA......................................49
3.3.3 Cài đặt NetFPGA OpenFlow switch............................................50
3.3.4 Xây dựng mạng chuyển mạch OpenFlow....................................52
3.4 Kết luận chương..................................................................................55
Chương 4. Thiết kế bô điều khiển chuyển mạch..................................................56
4.1 Giải phap tiết kiệm năng lượng..........................................................56
4.2 Yêu cầu chức năng và phi chức năng.................................................57
4.3 Thiết kế phần cứng.............................................................................58
4.3.1 Sơ đồ khối thiết kế........................................................................58
4.3.2 Khối điều khiển (Main controller):...............................................59
4.3.3 Khối đóng ngắt port (ON/OFF Port Circuit)................................61
4.3.4 Khối đóng ngắt chuyển mạch (ON/OFF Switch Circuit):............62
4.3.5 Kết quả đạt được...........................................................................62
4.4 Thiết kế phần mềm.............................................................................64
4.4.1 Giao thức OpenFlow....................................................................64
4.4.2 Trao đổi gói tin với bô điều khiển................................................67
4.4.3 Mã nguồn mở LwIP......................................................................68
NETFPGA GROUP-KSTN-ĐTVT-K52 vi
ĐỒ ÁN TỐT NGHIỆP 2012
4.4.4 Thiết kế bản tin OpenFlow và kết quả đạt được...........................70
4.5 Kết luận chương..................................................................................78
Chương 5. Thiết kế khối tiết kiệm năng lượng cho chuyển mạch OpenFlow...79
5.1 Giải phap tiết kiệm năng lượng..........................................................79
5.2 Thiết kế phần cứng.............................................................................81
5.2.1 Làm việc với phần cứng của chuyển mạch OpenFlow.................81
5.2.2 Vị trí của khối Clock controller....................................................83
5.2.3 Ghép nối với cac khối khac trong User data path.........................86
5.2.4 Thiết kế khối clock controller.......................................................88
5.3 Thiết kế phần mềm.............................................................................91
5.3.1 Truyền, nhận và xử lý bản tin từ bô điều khiển............................91
5.3.2 Làm việc với phần mềm của chuyển mạch OpenFlow.................92
5.3.3 Xây dựng và triển khai cac chức năng mới..................................94
5.4 Kết luận chương..................................................................................96
Chương 6. Thực hiện đo đạc va kết quả...............................................................97
6.1 Cơ sở hạ tầng thiết lập testbed............................................................97
6.2 Bô điều khiển chuyển mạch................................................................99
6.2.1 Thiết lập hệ thống.........................................................................99
6.2.2 Test hệ thống..............................................................................100
6.2.3 Kết quả........................................................................................101
6.3 Chuyển mạch OpenFlow có chức năng tiết kiệm năng lượng..........104
6.3.1 Thiết lập hệ thống.......................................................................104
6.3.2 Test hệ thống..............................................................................106
6.3.3 Kết quả........................................................................................106
6.4 Kết luận chương................................................................................106
Kết luận va hướng phát triển của đề tai.............................................................107
TÀI LIỆU THAM KHẢO....................................................................................108
PHỤ LỤC...............................................................................................................110
NETFPGA GROUP-KSTN-ĐTVT-K52 vii
ĐỒ ÁN TỐT NGHIỆP 2012
Phụ lục 1: Code OpenFlow.c.....................................................................110
Phụ lục 2: Code clock_controller.v...........................................................114
NETFPGA GROUP-KSTN-ĐTVT-K52 viii
ĐỒ ÁN TỐT NGHIỆP 2012
DANH MỤC HÌNH VẼ
Hình 1.1 Kiến trúc mạng điều khiển bằng phần mềm................................................8
Hình 1.2 Ví dụ về tập lệnh của OpenFlow...............................................................10
Hình 2.1 Cấu trúc của FPGA....................................................................................17
Hình 2.2 Cấu trúc của Slice......................................................................................18
Hình 2.3 Minh họa bảng LUT..................................................................................19
Hình 2.4 Minh họa cac Flip-Flop..............................................................................19
Hình 2.5 Design flow................................................................................................21
Hình 2.6 Giao diện phần mềm ISE...........................................................................23
Hình 2.7 Cấu trúc của môt OpenFlow Switch..........................................................24
Hình 2.8 Cấu tạo của môt flow-entry.......................................................................25
Hình 2.9 Cac bước khi môt flow mới tới bô chuyển mạch OpenFlow.....................26
Hình 2.10 Nền tảng NetFPGA..................................................................................27
Hình 2.11 Sơ đồ khối chi tiết cac thành phần trong kit NetFPGA...........................28
Hình 2.12 Cấu trúc đơn giản môt dự an với NetFPGA............................................29
Hình 2.13 Cấu trúc pipeline của cac modules..........................................................29
Hình 2.14 Sơ đồ tổng quat của hệ thống NetFPGA..................................................30
Hình 2.15 Mô hình Pipeline ap dụng cho việc thiết kế phần cứng mạng.................35
Hình 2.16 Sơ đồ hoạt đông của khối Output Port Lookup.......................................36
Hình 3.1 Sơ đồ khối mô hình Elastic Tree................................................................39
Hình 3.2 Mạng OpenFlow switch với bô điều khiển mạng NOX............................41
Hình 4.1 Sơ đồ mô tả vị trí của OSC trong mạng chuyển mạch...............................57
Hình 4.2 Mạng OSC đơn giản..................................................................................57
Hình 4.3 Sơ đồ của chuyển mạch trước và sau khi có OSC.....................................58
Hình 4.4 Sơ đồ khối cơ bản của OSC.......................................................................59
Hình 4.5 Sơ đồ khối chi tiết của OSC.......................................................................59
Hình 4.6 Sơ đồ nguyên lý mạch OSC.......................................................................63
Hình 4.7 Phần cứng của OpenFlow switch controller..............................................63
Hình 4.8 Quy trình bắt tay giữa bô điều khiển và bô chuyển mạch OpenFlow........68
Hình 4.9 Cac giao thức được sử dụng trong lwIP.....................................................70
NETFPGA GROUP-KSTN-ĐTVT-K52 ix
ĐỒ ÁN TỐT NGHIỆP 2012
Hình 4.10 Trường link state......................................................................................73
Hình 4.11 Trường Switch state.................................................................................74
Hình 4.12 Trường Line Card state............................................................................76
Hình 4.13 Sơ đồ thuật toan của OSC........................................................................77
Hình 5.1 Sơ đồ hệ thống clock của chuyển mạch OpenFlow...................................83
Hình 5.2 Sơ đồ vị trí lý tưởng của CC trong nf2_top...............................................85
Hình 5.3 Sơ đồ khối CC trong user data path...........................................................86
Hình 5.4 Sơ đồ ghép nối CC với cac khối khac trong user data path.......................87
Hình 5.5 Sơ đồ khối thiết kế của CC........................................................................88
Hình 5.6 Sơ đồ mạng OpenFlow đơn giản...............................................................91
Hình 5.7 Sơ đồ hệ thống bô điều khiển và bô chuyển mạch OpenFlow...................92
Hình 6.1 Sơ đồ hệ thống Testbed cho OSC............................................................100
Hình 6.2 Hệ thống Testbed thực tế cho OSC..........................................................100
Hình 6.3 Sơ đồ hệ thống testbed cho chuyển mạch OpenFlow mới.......................105
Hình 6.4 Hệ thống testbed chuyển mạch OpenFlow trong thực tế.........................105
Hình 6.5 Sơ đồ kết nối chuyển mạch - NIC cho hệ thống testbed..........................105
NETFPGA GROUP-KSTN-ĐTVT-K52 x
ĐỒ ÁN TỐT NGHIỆP 2012
DANH MỤC BẢNG BIỂU
Bảng 1.1: Công suất tiêu thụ của switch ở cac cấu hình khac nhau...........................5
Bảng 4.1 Bảng tổng hợp công suất của cac thành phần............................................62
Bảng 4.2 So sanh ưu, nhược điểm của môt số mã nguồn mở TCP/IP stack.............69
Bảng 4.3 Bản tin OFPT_PORT_MOD.....................................................................72
Bảng 4.4 Ý nghĩa cac trường trong bản tin OFPT_PORT_MOD............................72
Bảng 4.5 Ý nghĩa cac trường trong bản tin OFPT_SWITCH_MOD.......................74
Bảng 4.6 Bản tin OFPT_SWITCH_MOD................................................................74
Bảng 4.7 Bản tin OFPT_LINECARD_MOD...........................................................75
Bảng 4.8 Ý nghĩa cac trường trong bản tin OFPT_LINECARD_MOD..................75
Bảng 5.1 Cac hàm xử lý gói tin................................................................................94
Bảng 5.2 Cac hàm điều khiển phần cứng NetFPGA................................................95
Bảng 6.1 Bảng năng lượng tiêu thụ của OSC khi không có kết nối nào bị ngắt....103
Bảng 6.2 Bảng năng lượng tiêu thụ của OSC theo số lượng kết nối bị ngắt..........105
NETFPGA GROUP-KSTN-ĐTVT-K52 xi
ĐỒ ÁN TỐT NGHIỆP 2012
CAC THUẬT NGỮ VIẾT TẮT
Từ viết tắt Thuật ngữ tiếng anh Thuật ngữ tiếng việt
CC Clock Controller Bộ điều khiển tín hiệu Clock
CLB Configurable Logic Block Khối logic có thể lập trình được
DCM Digital Clock Manager Khối quản lý xung đồng hồ
DRAM Dynamic Random Access Memory Bộ nhớ truy cập ngẫu nhiên động
FPGA Field Programmable Gate Array Mảng cổng khả trình
IOB Input Output Block Khối vào ra
MAC Media Access Control Điều khiển truy nhập thiết bị
NCD Native Circuit Description Phần mở rộng của file thiết kế
OF SW OpenFlow Switch Bộ chuyển mạch OpenFlow
OSC OpenFlow Switch Controller Mạch điều khiển các bộ chuyển mạch OpenFlow
PCF Physical Constraint File Phần mở rộng của file ràng buộc vật lý
PCI Peripheral Component Inter-connect
Kết nối thành phần ngoại vi
PLD Programmable Logic Device Thiết bị logic có thể lập trình
SDN Software-Defined Network Mạng điều khiển bằng phần mềm
SRAM Static Random Access Memory Bộ nhớ truy cập ngẫu nhiên tĩnh
VCD Value Change Dump Phần mở rộng của file mô phỏng
NETFPGA GROUP-KSTN-ĐTVT-K52 xii
ĐỒ ÁN TỐT NGHIỆP 2012
PHẦN MỞ ĐẦU
Trong đồ an này, tac giả sẽ tập trung giải quyết cac vấn đề chính sau: Mô tả
cấu trúc của chuyển mạch OpenFlow; xây dựng mạng OpenFlow trên nền tảng
NetFPGA; cac giải phap tiết kiệm năng lượng cho cac bô chuyển mạch OpenFlow;
đo đạc trên thực tế và đanh gia từng phương phap.
Nội dung của đồ án được chia thành sáu chương, gồm ba phần chính:
Phần “Tìm hiểu thực trạng và giải pháp mạng OpenFlow” gồm hai chương:
Chương 1: Nêu thực trạng về vấn đề năng lượng trong cac trung tâm dữ liệu
và giải phap sử dụng mạng OpenFlow do Lê Anh Văn thực hiện.
Chương 2: Tìm hiểu môt cach tổng quat công nghệ mạch tổ hợp FPGA, về
bô chuyển mạch OpenFlow trên nền tảng phần cứng NetFPGA. Chương này
do Nguyễn Duy Linh và Lê Thai Hưng thực hiện.
Phần “Nghiên cứu giải pháp tiết kiệm năng lượng trên thực tế” gồm ba chương:
Chương 3: Triển khai hệ thống mạng OpenFlow trên nền tảng NetFPGA
trong thực tế phòng thí nghiệm do Lê Thai Hưng và Nguyễn Duy Linh thực
hiện.
Chương 4: Thiết kế bô điều khiển chuyển mạch OpenFlow dựa trên thực tế
hệ thống đã triển khai. Chương này do Lê Thai Hưng và Lê Anh Văn thực
hiện.
Chương 5: Thiết kế chuyển mạch OpenFlow tiết kiệm năng lượng và thực
hiện trên cac bô chuyển mạch thực tế đã triển khai.
Phần “Đo đạc, kiểm thử và đánh giá kết quả đạt đươc” gồm một chương:
Chương 6: Triển khai hệ thống mới với cac thiết bị đã được tạo ra, đo đạc và
đanh gia cac kết quả trên thực tế phòng thí nghiệm.
NETFPGA GROUP-KSTN-ĐTVT-K52 1
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 1ƯƠ
Chương 1. Vấn đề tiết kiệm năng lượng trong trung tâm dữ liệu va giải pháp sử dụng mạng OpenFlow
Sinh viên: Lê Anh Văn
Chương này sẽ giải thích nhu cầu tiết kiệm năng lượng cho cac trung tâm dữ
liệu. Đồng thời, môt giải phap hoàn toàn mới cho khó khăn đó sẽ được đưa ra dựa
vào công nghệ mạng mới đang được phat triển rất nhanh chóng trong thời gian gần
đây: Đó là mạng điều khiển bằng phần mềm dựa trên giao thức OpenFlow.
Cac khai niệm, định nghĩa và mô hình chung nhất về mạng này cùng giao
thức OpenFlow sẽ giúp người đọc có môt cai nhìn tổng quan về mục tiêu mà đồ an
hướng tới; cùng với đó là môt xu hướng phat triển của mạng trong tương lai.
1.1 Vấn đề tiết kiệm năng lượng cho trung tâm dữ liệu
Có thể nói rằng hiện nay cac trung tâm dữ liệu đang tiêu tốn môt năng lượng
khổng lồ để duy trì hoạt đông của nó.Theo môt nghiên cứu cho thấy rằng chi phí
năng lượng chiếm tới 44% chi phí hoạt đông của trung tâm dữ liệu. Năng lượng tiêu
thụ ở đây bao gồm có năng lượng cho cac server, cac thiệt bị mạng, cho hệ thống
làm lạnh, line-cards, switching fabric, cac hệ thống theo dõi và cac hệ thống phụ trợ
khac. Những tìm hiểu về năng lượng trong mạng trung tâm dưới đây được tham khảo
trong bài bao “Energy Aware Network Operations” [2], chỉ đề cập đến mô hình năng
lượng tiêu thụ của switch và môt chủ đề đang được nhiều nhà phat triển quan tâm đó
là cac giải phap tiết kiệm năng lượng tiêu thụ trong mạng trung tâm dữ liệu.
Cac switch và router hiện tại không cho ta biết đầy đủ cac thông số năng
lượng tiêu thụ của chúng. Datasheet của cac thiết bị này chỉ cho biết gia trị công suất
hoạt đông tối đa. Gia trị này không đủ để hiểu chính xac năng lượng tiêu thụ thật của
cac thiết bị mạng. Năng lượng tiêu thụ thật sự của cac switch/router phụ thuôc vào
rất nhiều yếu tố như cấu hình của thiết bị và lượng tải mà thiết bị cần xử lý, do đó chỉ
dựa vào công suất tiêu thụ tối đa sẽ không thể tính toan chính xac được năng lượng
tiêu thụ thật. Cấu hình thiết bị và lưu lượng thông tin đi qua sẽ ảnh hưởng đến công
suất tiêu thụ của cac thiết bị mạng.
NETFPGA GROUP-KSTN-ĐTVT-K52 2
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 1ƯƠ
Mỗi môt switch/router đều chứa nhiều thành phần cấu tạo khac nhau như:
chassis, linecard, TCAM (Ternary Content Addressable Memory), RAM, processor,
quạt… Môt switch/router đặc trưng gồm môt chassis (có thể hiểu là bô khung của
switch) chứa cac slot cắm cac linecard, mỗi linecard chứa nhiều port (cổng mạng)
chính là cac cổng giao tiếp của switch/router với cac switch/router khac hoặc với cac
may tính khac. Việc đo thông số năng lượng tiêu thụ của tất cả cac thành phần trong
switch môt cach toàn diện rất khó để thực hiện. Dưới đây là cac yếu tố quan trọng
ảnh hưởng đến công suất tiêu thụ của switch/router:
Công suất tiêu thụ của chassis: Cac switch hiệu năng cao chứa môt chassis
và môt số lượng cố định cac khe cắm (slot) dùng để cắm cac linecard. Đối
với cac switch hiệu năng thấp hơn (cac switch phổ thông với 24 cổng trở
xuống), cac slot và linecard được gắn cố định, không thể thay đổi. Trong cả
hai trường hợp, công suất tiêu thụ cơ bản của chassis là tổng công suất tiêu
thụ của môt số thành phần khac nhau của switch như processor, quạt,
memory…
Số lượng linecard: số lượng cổng của môt linecard và tổng lưu lượng thông
tin mà nó có thể xử lý là có hạn. Cơ chế cắm và rút cac linecard trên cac khe
slot của switch cho phép cac nhà quản lý mạng linh đông cắm số lượng
linecard cần thiết linh đông đap ứng nhu cầu về tải. Hơn nữa, cơ chế đó cũng
đưa ra nhiều lựa chọn cho việc cắm loại linecard phù hợp, ví dụ như cắm môt
linecard 24 cổng 1Gbps để có khả năng xử lý lưu lượng 24Gbps, hay cắm
môt linecard 4 cổng 10Gbps để có khả năng xử lý lưu lượng 40 Gbps.
Số lượng active cổng: thuật ngữ này đề cập tới tổng số cổng trên switch (của
tất cả cac linecard) ở trạng thai hoạt đông (active). Cac cổng còn lại trên
switch được tắt đi thông qua giao diện câu lệnh hỗ trợ tắt bật đưa ra từ nhà
sản xuất.
Công suất xử lý tối đa của môt cổng (port capacity) hay tốc đô hoạt đông tối
đa của môt cổng: ta có thể thay đổi thông số công suất xử lý tối đa của mỗi
cổng để giới hạn tốc đô xử lý thông tin của cổng đó. Ví dụ, công suất xử lý
tối đa của môt cổng full-duplex 1Gbps có thể được cấu hình xuống 100Mbps
NETFPGA GROUP-KSTN-ĐTVT-K52 3
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 1ƯƠ
hay 10Mbps. Việc thay đổi công suất xử lý tối đa này sẽ ảnh hưởng đến năng
lượng tiêu thụ nói chung của switch. Khi giảm công suất xử lý tối đa, năng
lượng tiêu thụ của cổng sẽ giảm, dẫn đến năng lượng tiêu thụ của cả switch
nói chung giảm theo.
Hiệu suất sử dụng của cổng (port utilization): thuật ngữ này mô tả thông
lượng thật chảy qua môt cổng so với công suất xử lý tối đa của cổng đó. Ví
dụ trong trường hợp công suất xử lý tối đa của môt cổng là 100Mbps, thông
lượng dữ liệu đi qua cổng đó là 10Mbps, khi đó hiệu suất sử dụng của cổng
đó (hay port utilization) là 10%. Phụ thuôc vào hiệu suất sử dụng của cổng
mà ta có thể thiết lập cac gia trị công suất xử lý tối đa của cổng đó môt cach
phù hợp. Ví dụ, nếu môt cổng phải xử lý 60 Mbps lưu lượng, khi đó ta sẽ
thiết lập công suất xử lý tối đa của switch là 100 Mbps để có hiệu quả sử
dụng năng lượng môt cach tốt nhất.
TCAM: hầu hết cac switch thực hiện việc phân loại packet trên phần cứng và
hầu hết cac nhà sản xuất sử dụng TCAM để thực hiện chức năng này do thời
gian xử lý tìm kiếm của TCAM là rất nhanh. Tuy nhiên, TCAM tiêu thụ môt
lượng công suất lớn. Ngoài ra, kích thước TCAM trong cac switch cũng khac
nhau.
Firmware: cac nhà sản xuất cập nhật firmware cho switch/router theo định
kỳ. Cac phiên bản firmware khac nhau cũng có thể ảnh hưởng tới công suất
tiêu thụ của switch/router.
Ngoài ra, đặc tính lưu lượng thông tin đi qua mỗi cổng cũng có thể ảnh hưởng
tới công suất tiêu thụ của cổng đó. Hai đặc tính quan trọng nhất của lưu lượng của
môt flow là kích thước mỗi gói tin và khoảng thời gian giữa hai gói tin liên tiếp.
NETFPGA GROUP-KSTN-ĐTVT-K52 4
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 1ƯƠ
Bảng 1.1: Công suất tiêu thụ của switch ở các cấu hình khác nhau
Cofiguration Rack switch (in Watts ) Tier-2 switch (in Watts )
Power chassis 146 54
Power linecard 0(include in chassis power)
39
Power10 Mbps( perport ) 0.12 0.42
Power100Mbps ( perport ) 0.18 0.48
Power1Gbps ( perport) 0.87 0.9
Power chassis là công suất tiêu thụ của switch ở trạng thai không có lưu lượng đi qua,
tuy nhiên switch vẫn đang ở trạng thai bật (idle).
Power linecard là công suất tiêu thụ của môt linecard khi không có lưu lượng qua nó.
Nói cach khac, cac cổng của line card không phải xử lý bất cứ lượng lưu lượng nào.
numl inecards là số linecard của switch
Power configs i là công suất tiêu thụ của môt cổng chạy ở tốc đô i.
numport configsi là số cổng chạy ở tốc đô i.
i: có thể có cac gia trị 10Mbps, 100 Mbps hay 1Gbps.
Qua Bảng 1.1 [2] ta thấy đối với Rack switch (cac switch thường công suất xử
lý thấp, ít hơn 24 cổng), do cac linecard được gắn cố định, không thay đổi được nên
công suất tiêu thụ của chassis chính là công suất tiêu thụ cơ bản và cố định của
switch khi switch được bật mà không xử lý bất cứ môt lượng lưu lượng nào, công
suất tiêu thụ của linecard khi đó được bao gồm trong công suất tiêu thụ của chassis.
Mặt khac đối với cac chuyển mạch tầng hai có công suất xử lý cao hơn, số lượng cac
linecard có thể thay đổi bằng cach cắm/rút cac linecard vào/ra cac slot, nên không
thể tính gôp vào công suất tiêu thụ của chassis. Trong trường hợp này, mỗi linecard
được cắm thêm vào, công suất tiêu thụ của switch sẽ tăng thêm 39W. Tuy nhiên,
trong cả hai trường hợp ta có thể thấy công suất tiêu thụ của cac cổng trên switch
NETFPGA GROUP-KSTN-ĐTVT-K52 5
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 1ƯƠ
phụ thuôc vào cấu hình tốc đô hoạt đông của cac cổng đó. Tốc đô hoạt đông tăng,
công suất tiêu thụ của cổng cũng tăng lên.
Ngoài ra, ta có thể quan sat thấy công suất tiêu thụ của chassis chiếm phần lớn
công suất tiêu thụ của switch, nên việc tắt cac switch không sử dụng (không có lưu
lượng đi qua) sẽ mang lại lợi ích lớn nhất. Lấy ví dụ môt switch thường 24 cổng, khi
không có lưu lượng đi qua sẽ tiêu thụ 146W, trong khi công suất tiêu thụ tối đa khi
lượng lưu lượng tối đa qua (mỗi cổng đặt ở tốc đô hoạt đông 1Gbps), công suất tiêu
thụ của switch sẽ là: 146+0.87*24=167W. Nếu ta không tắt switch khi không có lưu
lượng đi qua, switch sẽ luôn tiêu thụ môt lượng công suất nền rất lớn: 146W.
Dựa vào đặc tính tiêu thụ năng lượng của cac switch, phần tiếp theo sẽ trình
bày môt số kỹ thuật được dùng trong tiết kiệm năng lượng tiêu thụ của cac thiết bị
mạng trong trung tâm dữ liệu.
1.2 Giải pháp sử dụng mạng OpenFlow
1.2.1 Sự cần thiết cho môt kiến trúc mạng mới
Sự bùng nổ của cac thiết bị và nôi dung di đông, ảo hóa may chủ, và sự ra đời
của dịch vụ điện toan đam mây là môt trong những xu hướng thúc đẩy cac ngành
công nghiệp mạng xem xét lại kiến trúc mạng truyền thống. Hầu hết cac mạng thông
thường đều theo kiến trúc phân cấp, được xây dựng với cac tầng của thiết bị chuyển
mạch Ethernet được sắp xếp theo cấu trúc cây. Thiết kế này thực sự hiệu quả khi mô
hình tính toan client-server chiếm ưu thế, nhưng kiến trúc cố định như vậy không
thích hợp với yêu cầu tính toan đa dạng, năng đông và nhu cầu lưu trữ dữ liệu ngày
nay tại cac trung tâm dữ liệu của doanh nghiệp, trường học, và trong môi trường của
cac nhà cung cấp dịch vụ. Môt trong số những xu hướng tính toan quan trọng dẫn tới
yêu cầu ngày càng tăng cho môt mô hình mạng mới bao gồm:
Sự thay đổi mô hình lưu lượng.
Hướng người dùng CNTT (Công nghệ thông tin).
Sự phat triển của cac dịch vụ điện toan đam mây.
“Dữ liệu lớn” yêu cầu nhiều băng thông hơn.
NETFPGA GROUP-KSTN-ĐTVT-K52 6
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 1ƯƠ
1.2.2 Mục tiêu của mạng OpenFlow
Đap ứng yêu cầu thị trường hiện nay là hầu như không thể với kiến trúc mạng
truyền thống. Đối mặt với ngân sach không đổi hoặc giảm, cac doanh nghiệp ngành
CNTT đang cố gắng để tận dụng tối đa khả năng mà mạng của họ co thể đap ứng
bằng cach sử dụng cac công cụ quản lý ờ mức thiết bị và cac quy trình thủ công. Cac
hãng cung cấp dịch vụ cũng phải đối mặt với những thach thức tương tự như yêu cầu
về tính di đông cũng như sự bùng nổ băng thông, lợi nhuận đang bị xói mòn bởi chi
phí vốn cho thiết bị leo thang và doanh thu không tang hoặc suy giảm. Kiến trúc
mạng hiện tại không được thiết kế để đap ứng cac yêu cầu ngày nay của người sử
dụng, doanh nghiệp, và nhà cung cấp dịch vụ, những hạn chế của mạng hiện tại bao
gồm:
Đô phức tạp cao gây tắc nghẽn
Chính sach không đồng nhất
Khả năng quy mô kém
Phụ thuôc vào nhà cung cấp thiết bị
Chính vì lý do trên, cac nhà nghiên cứu đã đưa ra giải phap: Mạng điều khiển
bằng phần mềm (Software-Defined Networking)
Mạng điều khiển bằng phần mềm (SDN) là môt kiến trúc mạng mới phat triển
trong thời gian gần đây, trong đó việc điều khiển mạng được tach rời khỏi việc
chuyển tiếp và có thể được lập trình. Khac với trước đây khi còn bị ràng buôc chặt
chẽ trong từng thiết bị mạng đơn lẻ, điều khiển mạng sử dụng cac thiết bị tính toan
có thể truy cập (accessible computing device) cho phép cơ sở hạ tầng cơ bản được
trừu tượng hóa cho cac ứng dụng và dịch vụ mạng, hay là cac ứng dụng và dịch vụ
sẽ coi mạng như môt thực thể hợp thống nhất.
Hình 1.1 mô tả kiến trúc luận lý của SDN[3]. Thông tin về mạng được tập
trung trong phần mềm điều khiển SDN có chức năng kiểm soat toàn bô mạng. Kết
quả là, hình ảnh của mạng đối với cac ứng dụng và cac công cụ quản lý giống như là
môt chuyển mạch luận lý đơn nhất. Với SDN, doanh nghiệp và ngưởi sử dụng có thể
điều hành toàn bô mạng từ môt điểm luận lý duy nhất, không phụ thuôc vào nhà
NETFPGA GROUP-KSTN-ĐTVT-K52 7
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 1ƯƠ
cung cấp thiết bị, điều này giúp đơn giản hóa thiết kế và hoạt đông của mạng rất
nhiều. SDN cũng góp phần tối ưu hóa cac thiết bị mạng, bởi vì cac thiết bị mạng
không còn cần phải hiểu và xử lý hàng ngàn cac chuẩn giao thức khac nhau mà chỉ
còn xử lý cac lệnh từ bô điều khiển SDN.
Hình 1.1 Kiến trúc mạng điều khiển bằng phần mềm
Nhưng quan trọng nhất, nhà khai thac mạng và quản trị viên có thể trình cấu
hình mạng được trừu tượng hóa đơn giản hơn so với việc phải lập trình hàng chục
ngàn dòng cấu hình phân tan trong số hàng ngàn cac thiết bị mạng đơn lẻ. Ngoài ra,
tận dụng cac thông tin được tập trung trong tại bô điều khiển SDN, người quản trị có
thể thay đổi hoạt đông mạng theo thời gian thực, triển khai cac ứng dụng và dịch vụ
mới mạng trong vài giờ hoặc vài ngày, chứ không còn là vài tuần hoặc vài thang như
hiện nay. Bằng cach thu thập tình trạng của mạng trong cac lớp điều khiển (control
layer), SDN cung cấp cho nhà quản lý mạng cac phương phap linh hoạt để cấu hình,
quản lý, bảo mật, và tối ưu hóa tài nguyên mạng thông qua cac phần mềm tự đông
SDN.
Hơn nữa, cac nhà quản lý có thể tự viết cac chương trình này mà không phải
chờ đợi cac nhà cung cấp sẽ nhúng cac tính năng này vào cac sản phẩm của họ kèm
NETFPGA GROUP-KSTN-ĐTVT-K52 8
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 1ƯƠ
theo cac công cụ phần mềm đôc quyền .Ngoài việc trừu tượng hóa mạng, kiến trúc
SDN hỗ trợ môt tập hợp cac hàm API cho phép thực hiện cac dịch vụ mạng thông
thường, bao gồm định tuyến, multicast, an ninh, kiểm soat truy cập, quản lý băng
thông, quản lý traffic, chất lượng, dịch vụ, tối ưu hóa cac bô vi xử lý và lưu trữ, sử
dụng năng lượng, và cac hình thức quản lý chính sach, tùy chỉnh cho phù hợp để đap
ứng cac mục tiêu kinh doanh. Ví dụ, kiến trúc SDN cho phép định nghĩa và thực thi
chính sach nhất quan môt cach dễ dàng cho cả kết nối có dây và không dây trong
khuôn viên trường.
Tương tự như vậy, SDN cho phép quản lý toàn bô mạng thông qua hệ thốn dự
phòng và đồng bô thông minh. Open Networking Foundation đang nghiên cứu cac
API mở để thúc đẩy việc quản lý đa nhà cung cấp, mở ra canh cửa cho cac tính năng
phân bổ tài nguyên theo yêu cầu, self-service provisioning, mạng ảo hóa thực sự, và
cac dịch vụ đam mây an toàn.
Như vậy, với cac hàm API mở nằm giữa bô điều khiển SDN và cac lớp ứng
dụng, cac ứng dụng thực tế có thể hoạt đông trên lớp trừu tượng của mạng,tận dụng
cac dịch vụ và khả năng của mạng mà không bị ràng buôc vào cac chi tiết khi thực
hiện. SDN làm cho mạng không còn phải "application-aware" như là "application-
customized" và cac ứng dụng cũng không cần thiết "network-aware" đến mức
"network-capability-aware". Kết quả là, từ việc tính toan, lưu trữ, tài nguyên mạng
có thể được tối ưu hóa.
1.2.3 Giao thức OpenFlow
Giao thức OpenFlow là giao diện truyền thông đầu tiên được sử dụng giữa
lớp kiểm soat và cac lớp chuyển tiếp trong kiến trúc SDN. OpenFlow cho phép trực
tiếp truy cập và thao tac trên phần chuyển mạch của cac thiết bị mạng chẳng hạn như
chuyển mạchvà router, trong cả hai trường hợp luận lý và ảo. Chính sự thiếu hụt của
môt giao diện mở cho phần chuyển mạch đã dẫn tới cac đặc tính của cac thiết bị
mạng bây giờ như: chia thành nhiều khối riêng biệt, đóng và giống như cac may
mainframe. Thực tế hiện nay vẫn chưa xuất hiện môt giao thức tiêu chuẩn nào có
cùng chức năng như giao thức OpenFlow,và sự ra đời môt giao thức giống như
NETFPGA GROUP-KSTN-ĐTVT-K52 9
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 1ƯƠ
OpenFlow là cần thiết để chuyển công việc điều khiển mạng chuyển mạch lên cac
phần mềm điều khiển tập trung hợp lý.
OpenFlow có thể được so sanh với tập lệnh của CPU. Như thể hiện trên Hình
1.2 [3], giao thức này xac định cac thành phần cơ bản có thể được sử dụng bởi môt
ứng dụng phần mềm bên ngoài để lập trình cho phần chuyển mạch của cac thiết bị
mạng, điều này giống như tập lệnh của CPU với môt hệ thống may tính.
Hình 1.2 Ví dụ về tập lệnh của OpenFlow
Cac giao thức OpenFlow được thực hiện trên cả hai mặt của giao diện giữa
cac thiết bị cơ sở hạ tầng mạng và phần mềm điều khiển SDN. OpenFlow sử dụng
khai niệm về cac luồng (Flow) để xac định lưu lượng truy cập mạng dựa trên quy tắc
được xac định trước - có thể được lập trình cố định hay thay đổi trong phần mềm
điều khiển SDN. Giao thức này cũng cho phép người sử dụng xac định cach lưu
lượng mạng được phân theo luồng thông qua cac thiết bị mạng dựa trên cac thông số
như mô hình sử dụng, ứng dụng, và tài nguyên điện toan đam mây. Vì OpenFlow
hướng tới mạng được lập trình trên cơ sở hướng tới từng luồng, do đó môt kiến trúc
mạng SDN dựa trên OpenFlow hỗ trợ kiểm soat rất chi tiết tới tất cả cac khía cạnh,
cho phép mạng có thể đap ứng theo thời gian thực với sự thay đổi ở cac cấp đô ứng
dụng, người sử dụng, và phiên. Định tuyến dựa trên IP hiện tại không cung cấp mức
đô kiểm soat chặt chẽ đến như vậy, bởi vì tất cả cac luồng giữa hai thiết bị đầu cuối
NETFPGA GROUP-KSTN-ĐTVT-K52 10
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 1ƯƠ
luôn phải theo cùng môt con đường thông qua mạng, bất kể chúng có yêu cầu khac
nhau hay không.
Giao thức OpenFlow là môt nhân tố quan trọng trong Mạng điều khiển bằng
phần mềm và là giao thức SDN tiêu chuẩn hóa duy nhất hiện nay, cho phép trực tiếp
thao tac trên phần chuyển mạch của cac thiết bị mạng. Ban đầu khi ap dụng cho cac
mạng Ethernet-based, việc chuyển đổi sang OpenFlow có thể mở rông đến tập hợp
rông lớn hơn nhiều cac trường hợp. Mạng SDN dựa trên OpenFlow có thể được triển
khai trên cac mạng hiện có, cả vật lý và ảo. Thiết bị mạng có thể hỗ trợ việc chuyển
tiếp cac gói tin OpenFlow cũng như chuyển tiếp gói tin truyền thống, điều này khiến
cho cac doanh nghiệp và người sử dụng dễ dàng tiếp cận đến mạng SDN dựa trên
OpenFlow, ngay cả trong môi trường mạng thiết lập bởi nhiều nhà cung cấp.
Tổ chức Open Networking Foundation chịu trach nhiệm tiêu chuẩn hóa
OpenFlow thông qua cac nhóm kỹ thuật làm việc trên nhiều mảng như giao thức, cấu
hình, khả năng tương tac, và cac hoạt đông khac, giúp đảm bảo khả năng tương tac
giữa cac thiết bị mạng và phần mềm kiểm soat từ cac nhà cung cấp khac nhau.
OpenFlow được chấp nhận rông rãi bởi cac nhà cung cấp cơ sở hạ tầng mạng, thông
qua cac bản nâng cấp phần mềm hoặc firmware đơn giản. Kiến trúc mạng SDN dựa
trên OpenFlow có thể được tích hợp liền mạch với cơ sở hạ tầng hiện có của môt
doanh nghiệp hoặc người sủ dụng, tạo ra môt hướng chuyển đổi đơn giản trên những
thành phần mạng mà tại đó cần cac chức năng của mạng SDN nhất.
1.2.4 Lợi ích của mạng SDN dựa trên giao thức OpenFlow
Đối với doanh nghiệp và nhà cung cấp, công nghệ của mạng SDN dựa trên
OpenFlow cho phép cac kĩ sư công nghệ thông tin giải quyết cac vấn đề liên quan tới
băng thông cao, tính chất thay đổi của cac ứng dụng ngày nay, chuyển đổi mạng cho
phù hợp với cac yêu cầu làm việc luôn thay đổi, và làm giảm đang kể đô phức tạp
của hoạt đông điều hành và quản lý mạng. Cac lợi ích mà doanh nghiệp và cac hãng
có thể đạt được thông qua kiến trúc mạng SDN dựa trên OpenFlow bao gồm:
Tập trung hóa việc điều khiển trong môi trường mạng của nhiều nha
cung cấp: Phần mềm điều khiển có SDN thể kiểm soat bất kỳ thiết bị mạng
hỗ trợ OpenFlow từ bất kỳ nhà cung cấp nào, bao gồm thiết bị chuyển mạch,
NETFPGA GROUP-KSTN-ĐTVT-K52 11
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 1ƯƠ
định tuyến và chuyển mạch ảo. Thay vì phải quản lý từng nhóm thiết bị từ
cac nhà cung cấp riêng lẻ, nhà quản lý có thể sử dụng đồng bô cac thiết bị và
cac công cụ quản lý dựa trên SDN để nhanh chóng triển khai, cấu hình và
cập nhật cac thiết bị trong toàn bô mạng.
Giảm đô phức tạp thông qua tự đông hóa: Mạng SDN dựa trên giao thức
OpenFlow cung cấp cac công cụ (framework) giúp tự đông hóa và quản lý
mạng môt cach linh hoạt, điều này hỗ trợ nhà quản lý có thể phat triển cac
công cụ giúp thực hiện cac tac vụ quản lý môt cach tự đông hóa thay vì tự
mình thực hiện như hiện tại. Những công cụ tự đông hóa này sẽ làm giảm chi
phí hoạt đông, tối thiểu sự bất ổn định trong mạng gây ra bởi lỗi trong việc
điều hành, và hỗ trợ cac mô hình triển khai tự phục vụ (self-service
provisioning models). Ngoài ra, với mạng SDN, cac ứng dụng dựa trên điện
toan đam mây có thể được quản lý thông qua hệ thống triển khai và đồng bô
thông minh, giúp giảm thiểu hơn nữa chi phí vận hành đồng thời tăng tính
linh hoạt trong công việc.
Tốc đô đổi mới cao hơn: Sử dụng mạng SDN làm tăng khả năng đổi mới
trong công việc bằng cach cho phép nhà vận hành mạng có thể thực sự lập
trình và lập trình lại mạng theo thời gian thực để đap ứng nhu những yêu cầu
công việc đặc biệt và nhu cầu phat sinh của người sử dụng. Bằng cach ảo hóa
và trừu tượng hóa cơ sở hạ tầng mạng từ cac dịch vụ mạng đơn lẻ, ví dụ,
SDN và OpenFlow cung cấp cho nhà quản lý và có thể ngay cả người dùng
khả năng để điều chỉnh hoạt đông của mạng và ứng dụng cac dịch vụ mới
cũng như cac tính năng mới của mạng trong vòng vài giờ.
Tăng cường đô tin cậy va an ninh mạng: SDN cho phép cac nhà quản lý tự
định nghĩa cac cấu hình cấp cao (high-level configuration) và chính sach
trong mạng, điều này được chuyển xuống cơ sở hạ tầng thông qua
OpenFlow. Kiến trúc mạng SDN dựa trên OpenFlow loại bỏ nhu cầu phải
cấu hình cho từng thiết bị mạng đơn mỗi thời gian mỗi khi môt đầu cuối (end
point), dịch vụ, hoặc ứng dụng được thêm vào loại bỏ, hay khi thay đổi chính
sach, điều này làm giảm thiểu khả năng phat sinh lỗi trong mạng do xung đôt
cấu hình hoặc chính sach.
NETFPGA GROUP-KSTN-ĐTVT-K52 12
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 1ƯƠ
Bởi vì bô điều khiển mạng SDN cung cấp khả năng hiển thị đầy đủ và kiểm
soat qua mạng, đo đó đảm bảo rằng việc kiểm soat truy cập, lưu lượng, chất
lượng dịch vụ, an ninh, và cac chính sach khac được thực thi nhất quan trên
cơ sở hạ tầng mạng có dây và không dây, bao gồm cả cac chi nhanh văn
phòng, trường học, và trung tâm dữ liệu. Doanh nghiệp và cac nhà khai thac
có thể được hưởng lợi ích từ giảm chi phí hoạt đông, khả năng cấu hình linh
hoạt hơn, ít lỗi, thực thi chính sach và cấu hình thống nhất.
Trải nghiệm người dùng tốt hơn: Bằng cach tập trung hóa điều khiển mạng
và đảm bảo thông tin trạng thai sẵn sàng cho cac ứng dụng cấp cao hơn, cơ
sở hạ tầng mạng SDN có thể thích ứng với nhu cầu đa dạng của người sử
dụng môt cach tốt hơn. Ví dụ, môt nhà cung cấp dịch vụ có thể giới thiệu
môt dịch vụ video mà nó cung cấp cho cac thuê bao cao cấp xem hình với đô
phân giải lớn nhất có thể môt cach tự đông và thông suốt. Thực tế, người sử
dụng hoàn toàn có thế chọn môt cấu hình đô phân giải mà điều kiện mạng có
thể hoặc không thể đap ứng, dẫn đến trễ và gian đoạn làm giảm trải nghiệm
người dùng. Với mạng SDN dựa trên OpenFlow, cac ứng dụng video có thể
tự nhận diện băng thông cho phép trong mạng theo thời gian thực và tự đông
điều chỉnh đô phân giải video cho phù hợp.
1.3 Kết luận chương
Tóm lại, cac xu hướng mới như người sử dụng ngày càng ưa chuông tính di
đông, ảo hóa may chủ, và yêu cầu đap ứng môt cach nhanh chóng với điều kiện kinh
doanh luôn thay đổi đặt ra ngày nhiều yêu cầu lên hệ thống mạng, và rất nhiều trong
số đó kiến trúc mạng thông thường hiện nay không thể đảm đương được. Mạng điều
khiển bằng phần mềm cung cấp môt kiến trúc mạng mới, năng đông, có khả năng
thay đổi mạng xương sống truyền thống sang môt nền tảng hứa hẹn cung cấp dịch vụ
phong phú hơn rất nhiều.
Tương lai của mạng sẽ dựa nhiều hơn và nhiều hơn nữa trên phần mềm, việc
này sẽ giúp đẩy nhanh tốc đô đổi mới cho hệ thống mạng như nó đã từng xảy ra
trong lĩnh vực may tính và lưu trữ. SDN hứa hẹn sẽ biến đổi mạng cố định ngày hôm
nay thành nền tảng khả trình với khả năng phân bổ nguồn lực môt cach năng
NETFPGA GROUP-KSTN-ĐTVT-K52 13
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 1ƯƠ
đông, trở nên linh hoạt hơn, đủ quy mô để hỗ trợ cac trung tâm dữ liệu khổng lồ với
sự ảo hóa cần thiết cho môt môi trường điện toan đam mây tự đông hóa cao, năng
đông, và an toàn. Sở hữu nhiều lợi thế và tiềm năng công nghiệp hấp dẫn,
mạng SDN đang trên đường để trở thành môt chuẩn mực mới cho mạng trong tương
lai.
NETFPGA GROUP-KSTN-ĐTVT-K52 14
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
Chương 2. Ứng dụng mạng OpenFlow trong trung tâm dữ liệu trên nền tảng NetFPGA
Sinh viên: Nguyễn Duy LinhLê Thái Hưng
Bô chuyển mạch OpenFlow được chia làm hai loại là bô chuyển mạch
OpenFlow chuyên dụng và bô chuyển mạch thương mại có chức năng OpenFlow[4].
Chuyển mạch OpenFlow chuyên dụng (Dedicated OpenFlow Switch): loại
này không hỗ trợ việc xử lý gói tin ở lớp 2, 3. Loại này forward gói tin chỉ
dựa vào flow-table bên trong bô chuyển mạch. Chúng được xây dựng trên
nền tảng công nghệ mạch tổ hợp FPGA.
Chuyển mạch thương mại có chức năng OpenFlow (OpenFlow enabled
commercial Switch): loại này chính là môt bô chuyển mạch Ethernet thông
thường nhưng được bổ xung thêm chức năng OpenFlow cho phép xử lý hai
loại lưu lượng khac nhau: lưu lượng thí nghiệm (xử lý bởi flow-table) và lưu
lượng thực tế(xử lý bởi cac giao thức lớp 2 và 3).
Do điều kiện nghiên cứu của tac giả là trong phòng thí nghiệm, nên tac giả chỉ
tập trung nghiên cứu loại chuyển mạch OpenFlow chuyên dụng. Và trong đồ an này,
khi đề cập đến chuyển mạch OpenFlow là tac giả đang nói đến loại chuyển mạch
OpenFlow chuyên dụng. Chương này sẽ trình bày về công nghệ mạch tổ hợp FPGA
và ứng dụng mạng OpenFlow trên nền tảng NetFPGA.
2.1 Giới thiệu công nghệ mạch tổ hợp FPGA
2.1.1 Các công nghệ mạch tổ hợp
Hiện nay, trên thế giới có rất nhiều cac công nghệ thiết kế mạch tổ hợp khac
nhau: thiết kế Full-Custom, thiết kế Semi-Custom, PLD (Programmable Logic
Device).
Thiết kế Full-Custom: Phương phap thiết kế này chỉ ra Layout của từng
transistor riêng biệt và kết nối giữa chúng. Thiết kế Full-Custom sẽ tối ưu
hóa được hiệu năng cũng như kích thước của mạch tổ hợp. Tuy vậy, gia
NETFPGA GROUP-KSTN-ĐTVT-K52 15
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
thành sản xuất của cac chip thiết kế theo Full-Custom rất đắt. Cach thiết
kế này chỉ ap dụng cho việc sản xuất chip hàng loạt với môt số lượng lớn.
Thiết kế Semi-Custom: Cach thiết kế này sử dụng môt thư viện cac cell
chuẩn có sẵn( cac cell này được chế tạo từ cac Transistor theo kiểu Full-
Custom).
Programmable Logic Device (PLD): Điển hình là công nghệ
FPGA(Field Programmable Gate Array). Với công nghệ này, người sử
dụng có thể hoàn toàn tạo ra môt mạch phần cứng tùy ý theo ý muốn
không phụ thuôc vào dây chuyền sản xuất phức tạp của cac nhà may ban
dẫn.
Công nghệ FPGA nếu đem so sanh với cac công nghệ chế tạo chip như Full-
Custom hay Semi-Custom thì không đạt được đô tối ưu về mặt tốc đô như những
loại này và hạn chế trong khả năng thực hiện những tac vụ đặc biệt phức tạp, tuy vậy
FPGA ưu việt hơn ở chỗ có thể tai cấu trúc lại khi đang sử dụng, công đoạn thiết kế
đơn giản do vậy chi phí giảm, rút ngắn thời gian đưa sản phẩm vào sử dụng.
Thiết kế hay lập trình cho FPGA được thực hiện chủ yếu bằng cac ngôn ngữ
mô tả phần cứng HDL như VHDL, Verilog, AHDL, cac hãng sản xuất FPGA lớn
như Xilinx, Altera thường cung cấp cac gói phần mềm và thiết bị phụ trợ cho qua
trình thiết kế, cũng có môt số cac hãng thứ ba cung cấp cac gói phần mềm kiểu này
như Synopsys, Synplify... Cac gói phần mềm này có khả năng thực hiện tất cả cac
bước của toàn bô quy trình thiết kế IC chuẩn với đầu vào là mã thiết kế trên HDL
(còn gọi là mã RTL).
2.1.2 Ứng dụng của FPGA
Ứng dụng của FPGA bao gồm: xử lý tín hiệu số DSP, cac hệ thống hàng
không, vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC (ASIC prototyping), cac hệ thống
điều khiển trực quan, phân tích nhận dạng ảnh, nhận dạng tiếng nói, mật mã học, mô
hình phần cứng may tính...
Do tính linh đông cao trong qua trình thiết kế cho phép FPGA giải quyết lớp
những bài toan phức tạp mà trước kia chỉ thực hiện nhờ phần mềm may tính, ngoài
NETFPGA GROUP-KSTN-ĐTVT-K52 16
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
ra nhờ mật đô cổng logic lớn FPGA được ứng dụng cho những bài toan đòi hỏi khối
lượng tính toan lớn và dùng trong cac hệ thống làm việc theo thời gian thực.
FPGA cũng được ứng dụng để chế tạo ra cac thiết bị mạng may tính như bô
định tuyến, bô chuyển mạch. Trong đồ an này là bô chuyển mạch OpenFlow.
2.1.3 Kiến trúc của FPGA
Trong đồ an này, dòng chip FPGA được sử dụng là VirtexTM-II pro. Đây là
môt dòng chip FPGA hiệu năng cao của hãng Xilinx[5].
Như trên Hình 2.3 thành phần của môt chip FPGA của Xilinx bao gồm:
CLB(Configurable Logic Block): khối này bao gồm cac tài nguyên để tạo ra
mạch tổ hợp và cac thanh ghi.
IOB(Input Output Block): khối này đóng vai trò là interface giữa FPGA và thế
giới bên ngoài.
Các kết nối có thể lập trình được(Programmable Interconnect)
Các tài nguyên khác như: Memory, Multiplier, Global Clock Buffer…
Hình 2.3 Cấu trúc của FPGA
2.1.3.1 Cấu tạo của CLB
Mỗi môt CLB bao gồm bốn slices. Mỗi slice bao gồm cac thành phần chính sau:
NETFPGA GROUP-KSTN-ĐTVT-K52 17
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
Hai bảng Look-up Tables.
Hai phần tử tuần tự (2 flip-flops).
Khối Carry Logic
Cấu trúc của slice trong FPGA của Xilinx được mô tả trên Hình 2.4 [5]. Ở
đây, mỗi slice có bốn đầu ra: hai đầu được đệm bởi thanh ghi, hai đầu còn lại thì
không được đệm bởi thanh ghi.
Hình 2.4 Cấu trúc của Slice
Mạch tổ hợp được lưu trữ trong bảng LUT (minh họa trên Hình 2.5). Trong
CLB có hai bảng LUT4-1, cac bảng LUT4-1 này thực chất là cac SRAM với bốn
đầu vào là bốn bit địa chỉ, đầu ra là bit gia trị của ô nhớ trong SRAM. Bảng LUT này
có thể thực hiện cac hàm với đô phức tạp tùy ý, và chỉ bị giới hạn bởi số lượng đầu
vào. Trễ qua bảng LUT này là không đổi.
NETFPGA GROUP-KSTN-ĐTVT-K52 18
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
Hình 2.5 Minh họa bảng LUT
Ngoài ra, mỗi Slice bao gồm hai Flip-Flops (minh họa trên Hình 2.6). Mỗi
CLB có tổng công tam Flip-Flops. Đầu vào của cac Flip-Flops này lấy từ đầu ra của
cac bảng LUT hoặc đầu vào của cac CLB. Dòng chip VirtexTM-II pro tach riêng tín
hiệu Set và Reset cho từng Flip-Flop.
Hình 2.6 Minh họa các Flip-Flop
NETFPGA GROUP-KSTN-ĐTVT-K52 19
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
2.1.3.2 IOB
Môt chíp FPGA có thể có hơn 1000 chân và được sắp xếp thành cac dãy
xung quanh chip. Cac chân vào ra này có thể cấu hình để hoạt đông ở cac chuẩn
khac nhau: LVTTL, LVDS... Mỗi chuẩn sẽ quy định mức điện ap biểu diễn 0 hoặc
1 . Việc có thể cấu hình cac chuẩn IO giúp việc thiết kế hệ thống trở nên đơn giản.
Mỗi dãy IO có thể được cấu hình với môt chuẩn vào ra riêng. Do đó, chíp
FPGA có thể được sử dụng trong cac hệ thống yêu cầu nhiều chuẩn tín hiệu vào ra
khac nhau.
2.1.3.3 Block RAM
Do có nhiều ứng dụng yêu cầu sử dụng bô nhớ, do đó chip FPGA đã được
nhúng rất nhiều khối RAM có kích thước lớn được gọi là Block RAM. Tùy theo
từng kiến trúc, cac khối RAM này có thể được sắp xếp ở vùng biên của chip, sắp
xếp rải rac trên bề mặt của chip hoặc trong những vùng khac nhau hoặc được xếp
thành từng côt.
2.1.3.4 Khối quản lý đồng hồ DCM
Tất cả cac thành phần đồng bô trong chip FPGA đều phải được điều khiển bởi
cac tín hiệu đồng hồ. Cac tín hiệu đồng hồ này được đưa từ bên ngoài vào chip
FPGA thông qua môt chân riêng biệt là chân clock và sau đó được đưa vào cac kết
nối để đến cac thành phần tương ứng. Trong cac chip FPGA có môt hệ thống cac kết
nối riêng để đưa tín hiệu clock nối đến cac thành phần tương ứng. Kiến trúc này đảm
bảo cac thành phần khac ở cac vị trí khac nhau sẽ nhận được tín hiệu có đặc tính
giống nhau tranh trường hợp bị trượt clock do qua trình truyền tín hiệu với cac
khoảng cach nhau. Thông thường môt chip FPGA có nhiều chân clock và nhiều hệ
thống kết nối khac nhau đảm bảo chip FPGA có thể hoạt đông ở nhiều tần số khac
nhau.
NETFPGA GROUP-KSTN-ĐTVT-K52 20
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
2.1.4 Các bước thiết kế với FPGA của Xilinx
Hình 2.7 dưới đây mô tả cac bước thiết kế với FPGA của Xilinx [6]
Hình 2.7 Design flow
Bước 1: Design Entry
Người sử dụng sẽ thiết kế phần cứng trong bước này. Có rất nhiều cach mà
người sử dụng có thể dùng để thiết kế mạch phần cứng như dùng sơ đồ nguyên lý
ghép cac linh kiện với nhau hoặc dùng môt ngôn ngữ mô tả phần cứng như VHDL,
Verilog để mô tả mạch. Hay môt cach khac là sử dụng công cụ Core Generator của
Xilinx để sinh ra cac khối phần cứng có sẵn. Phần mềm được sử dụng ở bước này là
ISE của Xilinx.
Bước 2: Synthesis (Tổng hợp)
Đây là môt bước quan trọng trong cac bước thiết kế FPGA của hãng Xilinx.
Ở bước này người sử dụng sẽ dùng công cụ XST trong gói phần mềm ISE để tổng
NETFPGA GROUP-KSTN-ĐTVT-K52 21
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
hợp thiết kế. Đầu ra của pha này là cac file netlist mô tả mạch phần cứng (bao nhiêu
gate, flip-flop, kết nối giữa chúng). Cac file netlist có đuôi là .ngc, .ngd.
Trong qua trình tổng hợp, người sử dụng có cac lựa chọn cho trình tổng hợp
nhằm tạo ra thiết kế mong muốn như tối ưu hóa về tài nguyên trên FPGA hoặc tốc
đô. Đây chính là cac Synthesis Constraints (ràng buôc tổng hợp).
Sau khi tổng hợp xong thiết kế, người sử dụng cần tiến hành mô phỏng chức
năng (Functional Simulation) để kiểm tra xem thiết kế có đúng như yêu cầu ban đầu.
Bước 3: Translating
Bước này sẽ ghép tất cả cac file netlist rời rạc thành môt file netlist duy nhất.
Bước 4: Mapping
Bước này sẽ anh xạ cac thành phần trong thiết kế của người sử dụng xuống
cac thành phần vật lý trên chip FPGA (slice, IOB, Ram khối…). Nếu thiết kế qua lớn
vượt qua tài nguyên cho phép của chip FPGA, trình dịch sẽ bao lỗi.
Bước 5: Placing & Routing
Bước này sẽ đặt cac thành phần của thiết kế xuống chip đồng thời sẽ kết nối
chúng và đưa ra bao cao về mặt thời gian như đô trễ, tần số xung nhịp lớn nhất mạch
có thể chạy được. Ba bước 3, 4, 5 được là Implementation.
Trong qua trình Implementation, người sử dụng cần đưa ra cac ràng buôc đối
với hệ thống như gan chân cho thiết kế với chân chip thật (Pin Assignment) và tần số
xung nhịp mong muốn (Timing Constraints). Những thông tin ràng buôc này được
lưu trong file có dạng .ucf.
Sau bước này, người sử dụng cần mô phỏng thời gian (Timing Simulation) để
kiểm tra xem thiết kế có đúng hay không về mặt thời gian. Khi người sử dụng mô
phỏng thành công ở bước này, thì khả năng chạy được trên chip FPGA thật lả rất
cao.
Bước 6: Bitstream Generation
NETFPGA GROUP-KSTN-ĐTVT-K52 22
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
Khi thực hiện đến bước 5, người sử dụng thấy rằng thiết kế chạy mô phỏng
đúng với yêu cầu. Người sử dụng sẽ tiến hành tạo ra file .bit dùng để nạp xuống chip
FPGA thật. Cuối cùng là việc test thử trên chip FPGA thật.
2.1.5 Phần mềm ISE
Đây là môt phần mềm thiết kế của hãng Xilinx được dùng cho cac dòng chip
FPGA của hãng. Phần mềm này chứa cac công cụ cho phép người sử dụng tạo ra cac
design entry (có thể bằng Schematic Editor, viết code Verilog, VHDL hay công cụ
Core Generator). Đồng thời phần mềm này có tất cả cac công cụ cần thiết để thực
hiện design flow trên. Như công cụ tổng hợp XST, công cụ để thực hiện Translating,
Mapping, Placing & Routing, công cụ để download thiết kế của người sử dụng
xuống chip FPGA. Gói phần mềm này cũng hỗ trợ việc xuất ra cac bao cao cần thiết
như Timing Report. Phần mềm ISE cũng hỗ trợ việc mô phỏng thiết kế của người sử
dụng (công cụ ISim).
Hình 2.8 Giao diện phần mềm ISE
Qua phần này, chúng ta đã hình dung được về chip FPGA và cac bước để
làm việc với FPGA.
NETFPGA GROUP-KSTN-ĐTVT-K52 23
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
2.2 Chuyển mạch OpenFlow trên nền tảng kit NetFPGA
2.2.1 Kiến trúc bô chuyển mạch OpenFlow
Bô chuyển mạch OpenFlow bao gồm ba thành phần chính: Flow-table, Secure
Channel, giao thức OpenFlow [4], như Hình 2.9 dưới đây:
Hình 2.9 Cấu trúc của môt OpenFlow Switch
Chức năng cụ thể của từng thành phần trong chuyển mạch OpenFlow:
Flow-table: Bảng này bao gồm cac flow-entry và mỗi flow-entry có môt
Action đi kèm dùng để xử lý cac flow. Phần này được xây dựng trên nền
tảng NetFPGA.
Secure Channel: Là phần mềm dùng để kết nối bô chuyển mạch với bô điều
khiển. Nó cho phép lệnh và gói tin được truyền qua lại giữa bô điều khiển và
bô chuyển mạch sử dụng giao thức OpenFlow. Phần này được xây dựng trên
hệ điều hành Linux.
NETFPGA GROUP-KSTN-ĐTVT-K52 24
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
Giao thức OpenFlow: Giao thức cho phép chỉnh sửa flow-table từ môt bô
điều khiển từ xa, và cac nhà nghiên cứu tranh được việc phải lập trình cho bô
chuyển mạch.
Để hiểu thêm về kiến trúc bô chuyển mạch, chúng ta sẽ đi sâu vào cac khai niệm như flow, flow-entry.
Môt flow được định nghĩa là cac gói tin trùng (matching) với môt header cụ
thể bên trong flow-table. Việc so sanh giữa header của gói tin và header của môt
flow-entry để quyết định gói tin thuôc flow nào và Action đi kèm với nó có thể xảy
ra hai trường hợp: môt là so sanh trùng môt cach chính xac tất cả cac trường (match
exactly); hai là chỉ trùng môt trường nào đó (wildcard match).
Hình 2.10 Cấu tạo của môt flow-entry
Hình 2.10 miêu tả cấu tạo của môt flow-entry [4]. Mỗi môt flow-entry sẽ có
môt Action đi kèm với nó. Đối với chuyển mạch OpenFlow chuyên dụng, có 3 loại
cơ bản sau:
Forward những gói tin của luồng này tới môt port cho trước. Action này cho
phép những gói tin được định tuyến trong mạng.
Đóng gói và forward những gói tin của luồng này tới môt bô điều khiển. Gói
tin được chuyển tới Secure Channel nơi mà nó được đóng gói và gửi tới bô
điều khiển. Action này được sử dụng đối với gói tin đầu tiên của môt luồng
mới và bô điều khiển sẽ quyết định có đưa nó vào trong flow-table hay
không. Hoặc Action này được sử dụng trong cac thí nghiệm nhằm mục đích
forward tất cả cac gói tin tới bô điều khiển để xử lý.
NETFPGA GROUP-KSTN-ĐTVT-K52 25
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
Hủy bỏ (Drop) cac gói tin của luồng này. Action này được sử dụng cho mục
đích an ninh mạng nhằm chống lại tình trạng tấn công DoS (Denial of
Service) hoặc làm giảm cac lưu lượng giả được phat tan trên mạng.
Thành phần cuối cùng của môt flow-entry là Counters. Counters dùng để theo
dõi số lượng gói tin hoặc byte và thời gian kể từ khi gói cuối cùng trùng với môt
flow-entry trong flow-table (dùng để xóa đi những luồng không còn hoạt đông).
Hình 2.11 Các bước khi môt flow mới tới bô chuyển mạch OpenFlow
Hình 2.11 là cac bước để định tuyến môt flow từ môt may tính nguồn sang
môt may tính đích thông qua hai bô chuyển mạch OpenFlow [4]. Trong sơ đồ bên
trai, flow-table của hai bô chuyển mạch đều không chứa gì. Khi môt gói tin đến
trong bước 1, nó được forward tới bô điều khiển trong bước 2. Bô điều khiển kiểm
tra gói tin đến và thêm môt flow-entry (flow A) vào trong flow-table của cac bô
chuyển mạch trong bước 3. Sau đó gói tin được gửi tới may tính đích trong bước 4
và 5. Trong cac bước 6, 7, 8 bất kì gói tin mới nào thuôc về cùng môt flow (flow A
của gói tin thứ 1) sẽ được định tuyến trực tiếp tới may tính đích.
2.2.2 Giới thiệu về NetFPGA
NetFPGA là môt nền tảng phần cứng gia rẻ, được thiết kế chủ yếu nhằm mục
đích là làm công cụ cho việc giảng dạy và nghiên cứu cac thiết kế phần cứng mạng
như bô định tuyến, bô chuyển mạch, card mạng... NetFPGA đang được phổ biến môt
NETFPGA GROUP-KSTN-ĐTVT-K52 26
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
cach rông rãi tới cac sinh viên, giảng viên và cac nhà nghiên cứu và những người
quan tâm tới việc thử nghiệm cac ý tưởng mới liên quan đến phần cứng mạng tốc đô
cao.
Trong đồ an này, bô chuyển mạch OpenFlow được xây dựng trên nền tảng
NetFPGA (Hình 2.12).
Hình 2.12 Nền tảng NetFPGA
Nền tảng NetFPGA bao gồm ba thành phần chính: phần cứng, phần mềm,
gateware.
2.2.2.1 Phần cứng
Phần cứng (kit NetFPGA) là môt chiếc PCI Card bao gồm cac thành phần
chính sau:
- Xilinx VirtexTM-II pro 50
- 4x1 Gbps Ethernet ports sử dụng lõi MAC mềm
- 4.5 Mb SRAM và 64 Mb DDR2
NETFPGA GROUP-KSTN-ĐTVT-K52 27
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
- Môt chip FPGA Spartan II dùng để làm khối Control Logic cho PCI
interface
- Kit NetFPGA giao tiếp với may tính thông qua đường bus PCI.
Sơ đồ khối chi tiết cac thành phần phần cứng cũng như cach sắp xếp của
chúng trong kit NetFPGA được minh họa trên Hình 2.13[4].
Hình 2.13 Sơ đồ khối chi tiết các thanh phần trong kit NetFPGA
2.2.2.2 Gateware
Gateware là mã nguồn Verilog để tạo ra khối phần cứng trên chip FPGA
VirtexTM-II pro. Cac thiết kế trên nền tảng NetFPGA được thiết kế theo từng mức
với chức năng nhiệm vụ khac nhau như trên Hình 2.14. Trong đó:
- nf2_top là mức cao nhất: Chứa cac tín hiệu (signal) đầu vào, đầu ra nối
cac thiết bị ngoại vi bên ngoài như thạch anh, cổng mạng, …
- nf2_core chứa cac thành phần quan trọng cần có với mọi dự an làm việc
với NetFPGA như cac hàng đợi, bô điều khiển thanh ghi cpci, …
NETFPGA GROUP-KSTN-ĐTVT-K52 28
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
- user data path là môt thành phần trong nf2_core. Mối dự an khac nhau sẽ
bao gồm môt cấu trúc khac nhau. Sự khac biệt giữa dự an bô chuyển
mạch OpenFlow với cac dự an khac như bô định tuyến OpenFlow là ở
đây.
Hình 2.14 Cấu trúc đơn giản môt dự án với NetFPGA
Mỗi mức trong môt dự an đều được thiết kế thành cac modules nhằm mục
đích dễ dàng mở rông và cac modules này được kết nối với nhau tạo thành môt
pipeline. Cấu trúc của pipeline được mô tả ở Hình 2.15 [4].
Hình 2.15 Cấu trúc pipeline của các modules
NETFPGA GROUP-KSTN-ĐTVT-K52 29
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
Có hai loại bus chính là: packet bus và register bus. Packet bus sử dụng để
xử lý gói tin và register bus mang thông tin trạng thai và điều khiển giữa cac
modules phần cứng và phần mềm.
2.2.2.3 Phần mềm
Phần mềm ở đây là phần mềm điều khiển NetFPGA, chúng bao gồm hệ điều
hành Linux cho PC, driver cho kit NetFPGA, cac phần mềm tạo ra giao diện giữa
người dùng và thiết bị mạng, cac công cụ thiết kế của Xilinx như ISE, XPS.
Hình 2.16 Sơ đồ tổng quát của hệ thống NetFPGA
2.2.3 Lam việc với môt dự án NetFPGA
2.2.3.1 Cấu trúc thư mục của một dự án NetFPGA
Cac dự an sử dụng nền tảng NetFPGA đều có môt cùng môt cấu trúc thư mục
lưu trữ dữ liệu cũng như cac file thiết kế, phần mềm như dưới đây:
netfpga {Base directory}
NETFPGA GROUP-KSTN-ĐTVT-K52 30
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
bin {Scripts for simulation/synthesis/register gen}
bitfiles {Compiled hardware bitfiles}
lib {Libraries and software tools}
C {C libraries/programs}
java {Java libraries}
Makefiles {Makefile templates used for sim/synth}
Perl5 {Perl libraries}
python {Python libraries}
release {XML files for packaging}
scripts {Utility scripts}
verilog
contributed {Contributed Verilog modules}
core {Official Verilog modules}
xml {XML schemas}
projects {project directory}
OpenFlow_switch {contributed project}
doc {documentation}
include {project.xml, project specific module
XML}
lib {Perl and C headers}
regress {Regression tests}
src {non-library verilog}
sw {Project-specific software}
synth {Synthesis directory (contains all .xco
files)}
verif {Simulation tests}
Trong đó, netfpga là thư mục gốc (base directory) nằm ở đường dẫn
/root/netfpga
Thư mục bin chứa cac script để mô phỏng (nf_run_test.pl), sinh ra cac
thanh ghi (nf_register_gen.pl), chạy cac regress test
(nf_regress_test.pl)…
Thư mục bitfiles chứa những file bit dùng để nạp xuống chip FPGA
Virtex 2 Pro như OpenFlow_switch.bit.
NETFPGA GROUP-KSTN-ĐTVT-K52 31
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
Thư mục lib/C chứa cac chương trình C như nf_download để nạp file bit
xuống chip, cac thư viện cho phép phần mềm viết trên may tính có thể đọc ghi cac
thanh ghi trên kit NetFPGA.
Thư mục lib/Makefiles chứa cac Makefile phục vụ mục đích tổng hợp và
biên dịch source code Verilog để mô phỏng hoặc tạo ra file bit.
Thư mục lib/Perl5 chứa cac thư viện Perl để tạo ra cac file dữ liệu gói tin
đầu vào, cac file dữ liệu gói tin mong muốn nhằm mục đích mô phỏng hoặc test trên
phần cứng thật.
Thư mục lib/scripts chứa cac file script để nạp khối PCI controller
xuống chip Spartan 2 (cpci_reprogram.pl), để chạy mô phỏng (run.pl)…
Thư mục lib/verilog/contributed chứa cac module phần cứng (dưới
dạng source code Verilog) do người dùng đóng góp cho dự an NetFPGA.
Thư mục lib/verilog/core chứa cac module phần cứng được sử dụng lại
trong nhiều cac dự an netFPGA như module sram_arbiter, input_arbiter,
output_queues, output_port_lookup… Đặc biệt tac giả quan tâm ở đây là
module testbench, module này chứa cac khối phần cứng nhằm mục đích mô
phỏng môt thiết kế bất kì trên kit NetFPGA.
Thư mục projects chứa cac dự an NetFPGA. Trong thư mục này, tac giả
quan tâm đến thư mục OpenFlow_switch.
2.2.3.2 Tạo một Project mới
Môt Project mới sẽ được tạo ra theo cac bước sau:
Tạo môt thư mục chưa project mới trong đường dẫn
netfpga/projects.
Cập nhật biến môi trường NF_DESIGN_DIR để chỉ tới thư mục chứa
project cần tạo. Ví dụ:
export
NF_DESIGN_DIR=$(HOME)/netfpga/projects/my_first_project
NETFPGA GROUP-KSTN-ĐTVT-K52 32
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
Tạo cac thư con sau bên trong thư mục project: include, src,
synth, và test. Cac thư mục con khac như doc, lib, và sw có
thể không cần thiết (Chú ý: thư mục lib sẽ được tạo ra 1 cach tự đông
khi chạy công cụ register generation).
Tạo môt file project.xml file inside the include directory.
Thêm cac module trong thư viện có sẵn vào trong file project.xml.
Thêm cac khối riêng của project (không có trong thư viện có sẵn) viết
bằng ngôn ngữ Verilog vào thư mục src.
Viết file mô tả chi tiết bằng ngôn ngữ XML cho từng module mới vừa
viết, đặt chúng trong thư mục include.
Trong cơ sở hạ tầng thử nghiệm bằng ngôn ngữ python mới, kiểm tra mô
phỏng và phần cứng (trước đó là kiểm tra hồi quy) đã được thống nhất,
do đó, môt bài kiểm tra có thể được viết môt lần và chạy cho cả kiểm tra
mô phỏng hoặc phần cứng, trừ khi cần đanh gia môt chức năng cụ thể
của phần cứng. Cac bài test nên được đặt trong thư mục test của
project. Thư mục test nên được đặt tên theo kiểu
both_<major>_<minor> nếu nó có thể được chạy cho cả mô phỏng
và phần cứng, hw_<major>_<minor> nếu chỉ có thể được chạy như là
môt bài kiểm tra phần cứng, và sim_<major>_<minor>, nếu chỉ có thể
được chạy như là môt thử nghiệm mô phỏng. Cả phần major và minor
đều phải được đặt tên sao cho không có dấu gạch dưới hoặc dấu cach
trong đó.
Copy file Makefile từ thư mục synth của reference router vào thư mục
synth của project vừa tạo.
Synthesize thiết kế cho project bằng cach chạy lệnh make trong thư mục
synth.
Viết cac bài test cho phần cứng và đặt nó trong thư mục test. Chạy với
nf_test.py
Viết cac phần mềm cần thiết và đăt trong thư mục sw.
Cac tài liệu cần thiết để làm việc với project nên đặt trong thư mục doc.
NETFPGA GROUP-KSTN-ĐTVT-K52 33
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
2.2.4 Xây dựng bô chuyển mạch OpenFlow trên nền tảng NetFPGA
2.2.4.1 Phần mềm
Phần mềm quản lý chuyển mạch OpenFlow được mở rông từ môt phần mềm
OpenFlow tham khảo (OpenFlow reference software). Đây là môt gói phần mềm mã
mở của Linux, xây dựng môt chuyển mạch OpenFlow bằng phần mềm và có thể
download từ website OpenFlow[9]. Phần mềm OpenFlow tham khảo được chia làm
hai phần: phần không gian người dùng (user-space) và phần không gian kernel
(kernel-space).
Cac process trong user-space giao tiếp với bô điều khiển OpenFlow sử dụng
SSL (Secure Socket Layer) để mã hóa thông tin. Giao thức OpenFlow chỉ ra định
dạng của gói tin giữa chuyển mạch OpenFlow và bô điều khiển. Thông tin từ bô
chuyển mạch tới bô điều khiển có thể là thông bao môt flow mới đến hoặc thông
bao update trạng thai cac đường link. Và thông tin từ bô điều khiển tới bô chuyển
mạch như yêu cầu thêm bớt cac flow-entry được trao đổi giữa cac process của
không gian người dùng và kernel module thông qua cac lời gọi hệ thống IOCTL.
Kernel module chịu trach nhiệm bảo trì cac flow-tables, xử lý gói tin và
update cac số liệu thống kê. Mặc định, kernel module của bô chuyển mạch tham
khảo sẽ tạo ra cac flow-table bằng phần mềm và forward cac gói tin qua card mạng
của may tính.
Kernel module có khả năng mở rông bằng cach cho phép cac module phần
cứng đăng kí cac flow-table thêm vào. Cac flow-table của phần cứng sẽ có quyền
ưu tiên cao hơn cac flow-table của phần mềm. Cac nhà phat triển có thể mở rông hệ
thống tham khảo bằng cach thêm môt NetFPGA OpenFlow Kernel Module. Kernel
module này sẽ sử dụng cac interface của kernel module tham khảo để kết nối cac
flow-table của cả phần cứng và phần mềm lại với nhau.
Khi môt gói tin đến kit NetFPGA, nếu gói tin này được so sanh trùng với môt
flow-entry đã tồn tại trong flow-table của phần cứng sẽ được forward trong phần
cứng với tốc đô cao. Nếu gói tin không trùng với môt flow-entry nào trong flow-
NETFPGA GROUP-KSTN-ĐTVT-K52 34
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
table, ví dụ flow mới, sau đó sẽ gửi tới kernel module và kernel module sẽ forward
gói tin tới bô điều khiển.
Nếu flow-table của phần cứng đầy, flow-entry mới sẽ được chèn vào flow-
table của phần mềm. Những gói tin tiếp theo thuôc những flow như thế sẽ không
được xử lý ở phần cứng mà sẽ được forward lên phần mềm để xử lý.
2.2.4.2 Phần cứng
Việc xây dựng bô chuyển mạch OpenFlow trên kit NetFPGA được dựa trên
mô hình Pipeline. Hình 2.17 mô tả kiến trúc đơn giản trong nf2_core.
Hình 2.17 Mô hình Pipeline áp dụng cho việc thiết kế phần cứng mạng
Khối user data path như đã nói ở mục 2.2.2.2 là phần quan trọng trong dự an
này. Nó bao gồm ba khối chính là Imput Arbiter, Output Port Lookup, Output
Queus. Trong phần tổng quan này, tac giả chỉ trình bày khối chính và quan trọng
nhất là khối Output Port Lookup.
Khối Output Port Lookup sẽ tiến hành so sanh header của cac gói tin tới với
cac flow-entry sử dụng 10 trường trong mỗi flow-entry. Cac flow-table trong kit
NetFPGA được xây dựng dựa trên chip TCAM và SRAM ngoài để có thể chứa môt
số lượng lớn cac flow-entry và hỗ trợ match wildcard. Sơ đồ hoạt đông của khối
Putput Port Lookup được mô tả trong Hình 2.18 dưới đây:
NETFPGA GROUP-KSTN-ĐTVT-K52 35
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
Hình 2.18 Sơ đồ hoạt đông của khối Output Port Lookup
Các module trong datapath[4]:
Khối A sẽ chọn môt trong số cac đầu vào MAC RxQ, CPU RxQ để lấy gói tin
đưa vào xử lý.
Khối B sẽ lấy ra cac trường cần thiết trong header của gói tin và ghép lại với
nhau. Cac trường được lấy ra là: MAC đích, MAC nguồn, Ethernet Type, IP nguồn,
IP đích, IP protocol, TCP hoặc UDP port nguồn, TCP hoặc UDP port đích, input
port. Tất cả cac trường này ghép lại với nhau tạo ra môt flow header. 10 trường trên
ghép lại với nhau tạo thành 1 flow-header, đối với gói tin Ipv4 mỗi flow-header này
có kích thước 155 bits.
NETFPGA GROUP-KSTN-ĐTVT-K52 36
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
Sau đó flow header được đưa vào hai khối Exact Lookup (bao gồm các khối
C, D, M) và Wildcard Lookup. Wildcard lookup cho phép thực hiện phép tìm kiếm
wildcard với cac flow entry.
Khối C sẽ tính toan hai hàm hash đối với flow-header trên (thêm 5 bit nữa
thành 160 bits) và trả về hai chỉ số (index). Lý do sử dụng hai hàm hash: hai hàm
CRC được sử dụng để tạo ra hai chỉ số cho mỗi gói tin- mỗi chỉ số được sử dụng cho
môt bảng hash khac nhau. Theo cach này, giả sử rằng ít nhất có môt chỉ số sẽ tìm
được entry tương ứng duy nhất. Nếu cả hai chỉ số cùng trả về, khối D sẽ sử dụng hai
chỉ số này để thực hiện tìm kiếm (lookup) trong hai bảng hash trong SRAM. Trong
thiết kế, chúng ta sử dụng môt SRAM cho hai bảng hash nên phải thực hiện lookup
tuần tự. Flow-table chứa cac flow-entry. Mỗi flow-entry chứa 155 bits flow-header
(để chắc chắn môt lần nữa là có môt flow-entry ứng với gói tin tới đã tồn tại trong
flow-table) và 152 bits sử dụng để lưu Action. Action bao gồm môt bit để xac định
flow-entry này có hợp lệ không, 3 bits xac định port đích (port ra vật lý trên chuyển
mạch, port tới CPU và null port- hủy gói tin), 48 bits địa chỉ MAC nguồn và 48 địa
chỉ MAC đích dùng để overwrite header hiện tại của gói tin, 20 bit packet counter,
32 bit byte counter.
Khối M là khối điểu khiển SRAM. Mỗi 16 chu kì xung nhịp, SRAM
controller có thể đọc 2 flow-header, cập nhật gia trị counter cho môt flow-entry, thực
hiện đọc hoặc ghi 4 bytes dữ liệu từ CPU.
307 bits flow-entry được lưu trong hai bank của bô nhớ SRAM. NetFPGA kit
có 4 Mb SRAM nên có khả năng chứa được 109297 flow-entry.
Khối E là môt khối TCAM (Ternary Content Addressable Memory). Đây là
môt khối được sử dụng rất nhiều trong bô chuyển mạch và bô định tuyến. Khối này
cho phép thực hiện lookup trong toàn bô flow-table chỉ với môt chu kì xung nhịp.
Khối này cũng cho phép thực hiện lookup với cac flow-entry chứa wildcard (tìm
kiếm với chỉ môt vài kí tự ).
NETFPGA GROUP-KSTN-ĐTVT-K52 37
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 2ƯƠ
Khối G sẽ chọn môt trong hai kết quả từ Exact lookup và Wildcard Lookup.
Kết quả của qua trình lookup là Action tương ứng với gói tin.
Khối H là bô đệm gói tin khi phần header của gói tin được xử lý trong cac
khối khac. Khi cac khối khac kiểm tra phần header và tìm thấy có flow-entry tương
ứng với header của gói tin, gói tin sẽ được forward đến port tương ứng hoặc tới CPU
hoặc bị hủy. Nếu không tìm thấy, gói tin sẽ được forward đến CPU để xử lý.
Khối I : có nhiệm vụ cập nhật bô đếm tương ứng với cac flow entry và thêm
thông tin Action của gói tin vào vị trí đặt sắn trong Header.
Tóm lại, phần cứng được điều khiển bởi may tính thông qua cac thanh ghi
anh xạ bô nhớ (memory mapped registers). Và gói tin được truyền qua lại giữa may
tính và phần cứng thông qua DMA (Direct Access Memory).
2.3 Kết luận chương
Qua chương này, cac hiểu biết chung về công nghệ FPGA và chuyển mạch
OpenFlow trên cơ sở NetFPGA đã được trình bày. Nhóm tac giả hy vọng người đọc
sẽ có môt cai nhìn tổng quan và nắm bắt được những kiến thức về chuyển mạch
OpenFlow trên nền tảng NetFPGA. Trong chương kế tiếp, nhóm tac giả sẽ giới thiệu
cach thiết lập hệ thống mạng sử dụng công nghệ OpenFlow trong thực tế trên quy
mô phòng thí nghiệm.
NETFPGA GROUP-KSTN-ĐTVT-K52 38
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
Chương 3. Triển khai hệ thống mạng OpenFlow trên nền tảng kit NetFPGA trong thực tế
Sinh viên: Nguyễn Duy LinhLê Thái Hưng
Để thực hiện yêu cầu của đồ an cũng như phục vụ cho qua trình nghiên cứu,
cac thành viên trong nhóm đã xây dựng môt mạng nôi bô sử dụng chuyển mạch
OpenFlow trên nền tảng NetFPGA trong thực tế dựa trên mô hình Elastic Tree [19].
3.1 Giới thiệu mô hình thử nghiệm
Môi trường thử nghiệm được triển khai dựa trên mô hình tham khảo Elastic
Tree, Hình 3.19 mô tả môt hệ thống đap ứng linh hoạt năng lượng tiêu thụ bởi mạng
trung tâm dữ liệu.
Hình 3.19 Sơ đồ khối mô hình Elastic Tree
Hệ thống bao gồm có ba khối chức năng chính: tối ưu, định tuyến và điều
khiển công suất. Chức năng chính của bô tối ưu là tính toan ra được đồ hình mạng
tối ưu, tiêu thụ ít năng lượng mà vẫn đap ứng được nhu cầu lưu lượng trong mạng.
NETFPGA GROUP-KSTN-ĐTVT-K52 39
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
Cac yêu cầu đầu vào của khối này gồm có đồ hình mạng, ma trận lưu lượng, mô hình
công suất của chuyển mạch, khả năng chống lỗi muốn đạt được. Đầu ra là đồ hình
tối ưu với cac thành phần mạng cần phải hoạt đông sẽ được đưa đến bô định tuyến
và điều khiển công suất. Bô điều khiển công suất sẽ thay đổi trạng thai tắt bật của
cac thiết bị mạng trong mạng trong khi bô định tuyến tiến hành định tuyến cho cac
luồng theo đồ hình mới.
3.2 NOX controller
Hiện nay, trên thế giới đã phat triển môt số bô điều khiển (controller) giúp
cho người sử dụng phat triển cac ứng dụng bằng cac ngôn ngữ lập trình khac nhau
dựa trên nền tảng OpenFlow:
- Beacon: viết bằng Java do đại học Stanford phat triển
- Floodlight: viết bằng Java do Apache phat triển
- Maestro: viết bằng Java do đại học Rice phat triển
- NodeFlow: viết bằng Javascript.
- NOX: viết vằng C++ hoặc là Python do đại học Stanford phat triển [17].
- Trema: viết bằng C hoặc Ruby do NEC phat triển.
Trong số cac bô điều khiển trên, NOX là bô điều khiển được sử dụng kha là
phổ biến. NOX là môt phần mềm mã nguồn mở dùng điều khiển mạng cac
OpenFlow switch. Mục đích của NOX nhằm cung cấp môt platform cho viết cac
phần mềm quản lý mạng (như cac ứng dụng định tuyến, tường lửa…) sử dụng C++
hoặc Python. Tuy vẫn còn trong qua trình phat triển, nhưng NOX hiện nay đã được
sử dung trong môt số cac mạng lớn. NOX hỗ trợ cả cac mạng doanh nghiệp lớn gồm
hàng trăm switch (hàng ngàn server).
Mục đích chính của NOX gồm có:
- Cung cấp môt platform cho phép người lập trình, phat triển mạng triển khai
cac ý tưởng mới trong lĩnh vực mạng, sử dụng phần cứng thật.Cac nhà phat
triển có thể điều khiển tất cả cackết nối trong mạng gồm có: forwarding,
routing…Ngoài ra NOX còn điều khiển cả flow-table trong switch.
NETFPGA GROUP-KSTN-ĐTVT-K52 40
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
- Cung cấp phần mềm quản lý mạng hữu ích cho cac tổng đài (operator), gồm
có việc quản lý tập trung cho tất cả cac switch trong mạng, điều khiển truy
nhập của người dùng.
Phương thức hoạt đông của NOX:
- NOX chạy riêng rẽ trên môt may và quản lý việc chuyển tiếp cac bản tin
giữa nhiều switch khac nhau.
- NOX cung cấp cac giao diện lập trình giúp cho nhà phat triển sử dụng dễ
dàng lấy được thông tin về sự kiện trong mạng, can thiệp vào lưu lượng,
điều khiển cac quyết định chuyển mạch của switch và tạo được lưu lượng.
- Khi có flow mới xuất hiện trọng mạng, cac gói đầu tiên sẽ được gửi đến bô
điều khiển mạng NOX, tại đây có thể thực hiện được: quyết định xem lúc
nào khi nào sẽ chuyển tiếp cac gói đi trong mạng, thu thập cac thông tin
thống kê, chỉnh sửa được gói trong flow đó hoặc có thể xem thêm được về
cac gói khac trong cùng flow để thu thập được thêm nhiều thông tin.
Hình 3.20 Mạng OpenFlow switch với bô điều khiển mạng NOX
Hình 3.20 mô tả đồ hình mạng với cac switch OpenFlow và bô điểu khiển
mạng NOX (NOX Controller), ở đây cac phần mềm điều khiển mạng NOX chạy trên
NETFPGA GROUP-KSTN-ĐTVT-K52 41
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
môt may tính và điều khiển bảng định tuyến của nhiều switch. Mạng gồm nhiều
OpenFlow switch và nhiều server kết nối với nhau. NOX đơn thuần chỉ là môt
platform, việc điều khiển mạng được thực hiện bởi cac phần tử chức năng trong
NOX gọi là NOX component, mỗi component thực thi môt chức năng riêng biệt như
định tuyến, chuyển mạch, xac thực... Có thể chạy môt lúc nhiều NOX component
với cac chức năng điều khiển khac nhau làm cho việc điều khiển và quản lý mạng trở
nên toàn diện hơn. Cac ứng dụng trong bô điều khiển mạng NOX có thể kết hợp với
nhận biết cac sự kiện trong mạng (network event), can thiệp vào lưu lượng trong
mạng, điều khiển định tuyến của cac switch và tạo ra lưu lượng.
Các thanh phần của NOX:
Core apps: cung cấp chức năng cho cac ứng dụng mạng và cac dịch vụ
web.Thành phần Core apps được đặt tại thư mục: src/nox/coreapps/
Network apps: cac ứng dụng để quản lý mạng
- Discovery: theo dõi cac liên kết giữa cac thiết bị chuyển mạchđiều khiển.
- Topology: cung cấp môt bản ghi trong bô nhớ của tất cả cac liên kết hiện lên
trong mạng.
- Authenticator: theo dõi vị trí của may chủ và thiết bị chuyển mạch trên
mạng.
- Routing:là thành phần chịu trach nhiệm tính toan đường đi..
Thành phần Network apps được đặt tại thư mục: src/nox/netapps/
Web apps: Cac ứng dụng web trong NOX được sử dụng để quản lý NOX thông
qua dịch vụ web.
- Webservice: cung cấp giao diện web dịch vụ cho cac ứng dụng NOX.
- Webserver: là ứng dụng lưu trữ cac giao diện điều khiển.
- Webserviceclient
Thành phần web được đặt tại thư mục: src/nox/webapps/
Ngoài ra chúng ta có thể tự phat triển thêm cac chức năng khac để phục vụ
mục đích riêng hoặc chia sẻ cùng công đồng. Cac nhà phat triển khuyến khích mọi
NETFPGA GROUP-KSTN-ĐTVT-K52 42
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
người cùng phat triển, chia sẻ và đóng góp giúp cho cac phiên bản NOX tiếp theo
được hoàn thiện hơn.
Cài đặt NOX Destiny trên nền tảng hệ điều hành ubuntu 10.04:
Trước hết ta cài đặt phần mềm điều khiển NOX-dependence
wget http://OpenFlowswitch.org/downloads/debian/binary/nox-
dependencies.deb
dpkg --info nox-dependencies.deb
cd /etc/apt/sources.list.d
sudo wget http://OpenFlowswitch.org/downloads/debian/nox.list
sudo apt-get update
sudo apt-get install nox-dependencies
Sau đó, cài đặt bô NOX
git clone git://noxrepo.org/nox
cd nox
./boot.sh
mkdir build/
cd build/
./configure
make –j 5
Chạy thử NOX ở thư mục nox/build/src ở cấu hình spanning_tree. Ở
cấu hình này NOX sẽ gửi bản tin PORT_MOD yêu cầu cac thiết bị kết nối
tới tắt đi môt số port xac định.
./nox_core –v I ptcp:6633 spanning_tree
Ngoài cấu hình spanning_tree còn kha nhiều cấu hình khac như pyswitch,
router, … tuy nhiên trong khuôn khổ đồ an tốt nghiệp, chúng ta chỉ đề cập
đên cấu hình spanning_tree do nó có gửi bản tin PORT_MOD.
NETFPGA GROUP-KSTN-ĐTVT-K52 43
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
3.3 Xây dựng chuyển mạch OpenFlow
Cac chuyển mạch OpenFlow được xây dựng trên cac may tính sử dụng hệ
điều hành CentOS 5.8 với cấu hình phần cứng: CPU Intel Pentium D Dual Core
3.2GHz, 2 GB RAM, ổ cứng dung lượng 250 GB, có sẵn card mạng tích hợp tốc đô
1Gbps và có thêm kit NetFPGA cắm vào khe PCI.
Sau khi có phần cứng phù hợp chúng ta tiến hành cài đặt phần mềm cho may tính
chứa card NetFPGA.
3.3.1 Cai đặt các gói phần mềm cơ bản
Việc cài đặt cac phần mềm cần thiết cho môt chuyển mạch OpenFlow được thực hiện theo cac bước sau:
Đăng kí để tải gói NetFPGA (NFP)
Để tải gói NFP: Đăng kí tài khoản trên FosWiki theo đường dẫn:
http://netfpga.org/foswiki/bin/view/NetFPGA/UserRegistration
Sau khi tài khoản được tạo ta có thể tự đông nhận cac email từ trang
NetFPGAWiki.
Tải gói NetFPGA (NFP)
Gói NFP bao gồm hai gói file định dạng .tar:
o Netfpga_full_x_x.tar.gz. Gói này bao gồm cac script để test và project
mẫu dưới dạng nhị phân. Thay thế kí tự ‘x’ bằng phiên bản mới nhất
(hiện tại là 3.0.1).
o Netfpga_lib.tar.gz, gói này bao gồm tất cả code Java cần thiết cho
giao diện của router.
Tải cac gói trên theo đường dẫn sau:
http://netfpga.org/foswiki/bin/view/NetFPGA/OneGig/Releases
Sau đó giải nén cac gói vào chung môt thư mục.
Gói NetFPGA Base chứa thư viện NetFPGA, driver cần thiết để chạy kit
NetFPGA và cac project mẫu tham khảo. Gói OpenFlow Switch chứa project
đầy đủ của chuyển mạch OpenFlow cũng như cac công cụ và thư viện để vận
hành nó.
NETFPGA GROUP-KSTN-ĐTVT-K52 44
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
Cài đặt hệ điều hành cho may tính
May tính Host sử dụng hệ điều hành Linux Fedora hoặc CentOS (tuy nhiên hệ
điều hành CenOS chỉ sử dụng cho cac phiên bản NetFPGA Packet từ 3.0.0
trở về trước). Ở đây, do đồng bô với dự an chuyển mạch OpenFlow chúng ta
làm việc với phiên bản 1.0.0 trên hệ điều hành CentOS.
Cài đặt phần mềm:
Cai đặt sử dụng YUM: để đơn giản hóa việc cài đặt, ta sử dụng YUM và gói RPM;
tất cả cac thành phần riêng lẻ sẽ được cài đặt 1 cach tự đông.
o Đầu tiên, đăng nhập tài khoản root hoặc dùng câu lệnh ‘su-‘
o Cài đặt RPMforge Yum như hướng dẫn theo link:
http://wiki.centos.org/AdditionalResources/Repositories/RPMForge#head-
20e1f65f19ccf2f5fbf5adb30dbaf5ea963a64ae.
o Cài đặt gói NetFPGA Base
Trong của sổ terminal gõ dòng lệnh sau để cài YUM và GPG Key:
rpm -Uhv http://netfpga.org/yum/el5/RPMS/noarch/netfpga-repo-1-
1_CentOS5.noarch.rpm
Nhập tiếp dòng lệnh sau để cài gói NetFPGA Base:
yum install netfpga-base
Chú ý từ phiên bản 2.0.0 trở lên phần Java GUI đã được tach riêng để cài đặt
gói này làm theo hướng dẫn tại
http://netfpga.org/foswiki/bin/view/NetFPGA/OneGig/InstallJavaGUI20
o Tạo thư mục netfpga trong tài khoản hiện thời
Chạy script sau để copy toàn bô thư mục netfpga vào trong tài khoản của bạn
(thông thường tại: /root/netfpga).
NETFPGA GROUP-KSTN-ĐTVT-K52 45
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
Chú ý: khi chạy dòng lệnh này thư mục netfpga hiện thời sẽ bị ghi đè lên. Nếu
bạn muốn giữ lại thư mục hiện thời hãy dùng lệnh ‘mv’ thư mục netfpga hiện
tại sang vị trí khac ví dụ netfpga_backup.
Dòng lệnh sau sẽ copy thư mục NetFPGA và đặt cac biến môi trường:
/usr/local/netfpga/lib/scripts/user_account_setup/
user_account_setup.pl
Câu lệnh này còn thêm cac biến môi trường sau vào file .bashrc
- NF_ROOT
- NF_DESIGN_DIR
- NF_WORK_DIR
- PYTHONPATH
- PERL5LIB
o Khởi đông lại may tính để kết thúc qua trình cài đặt.
Cai đặt không sử dụng YUM
Để thực hiện cài đặt tối thiểu môt NetFPGA card trên môt may tính mới không sử
dụng YUM:
o Cài đặt phần mềm NetFPGA ( tối thiểu cần cài và build nf_download và
cac kernel driver cho may tính).
Cả: gói tgz (giải nén gói tgz vào thư mục gốc từ địa chỉ:
http://netfpga.org/foswiki/NetFPGA/OneGig/Releases)
Và git repository
o Cài đặt git từ gói bzip (./configure; make; sudo make install).
o Tại thư mục gốc:
git clone git://netfpga.org/netfpga.git
o Copy toàn bô bitfiles từ thư mục bitfile từ tgz vào thư mục
~/netfpga/bitfiles.
NETFPGA GROUP-KSTN-ĐTVT-K52 46
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
o Cắm card NetFPGA vào và khởi đông. Nếu khởi đông thất bại ở lần đầu
tiên thì ta phải khởi đông lại lân nữa.
o Thêm cac trường uppermem và vmalloc vào /boot/grub/grub.conf và
khởi đông lại.
o Thực hiện cac câu lệnh sau:
sudo ln -s ~/netfpga /usr/local/netfpga
sudo ln -s
~/netfpga/lib/scripts/cpci_config_reg_access/loadregs.sh
/usr/local/sbin/loadregs.sh
sudo ln -s
~/netfpga/lib/scripts/cpci_config_reg_access/dumpregs.sh
/usr/local/sbin/dumpregs.sh
o Kiểm tra xem qua trình khởi tạo có thành công hay không:
~/netfpga/lib/scripts/cpci_config_reg_access/dumpregs.sh -f
~/defaultregs # for problem recovery later
~/netfpga/lib/scripts/cpci_config_reg_access/loadregs.sh -f
~/defaultregs # do if cpci_reprogram fails half way (usually
permissions or path problems)
sudo ~/netfpga/lib/scripts/cpci_reprogram/cpci_reprogram.pl
sudo /usr/local/bin/nf_download
/usr/local/netfpga/bitfiles/reference_nic.bit
o Thêm cac file sau vào thư mục /etc/rc.local theo hướng dẫn:
usr/local/netfpga/lib/scripts/cpci_reprogram/
cpci_reprogram.pl
/usr/local/bin/nf_download
/usr/local/netfpga/bitfiles/reference_nic.bit
ifconfig nf2c[0-3] 10.0.1[0-3].1/24 for the 4 ports
NETFPGA GROUP-KSTN-ĐTVT-K52 47
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
o Lưu ý: nếu không chạy cpci_reprogram với tài khoản root card sẽ bị
treo và chúng ta phải khởi đông lại hoặc chạy loadregs.sh như hướng
dẫn ở trên.
o Đến bước này chúng ta có thể tải và chạy cac project phần cứng (file .bit)
khac.
Cai đặt các công cụ CAD
Cac source code của cac module đều được cung cấp trong cac file Verilog, do
đó người dùng có thể biên dich, mô phỏng và tổng hợp thành cac thiết bị cho
NetFPGA. Cac mô phỏng và tổng hợp đều được sử dụng trên môt phiên bản xac
định của cac công cụ Xilinx. Sử dụng cac phiên bản khac (cũ hơn hoặc mới hơn) đều
không đc hỗ trợ.
Cai đặt phần mềm Xinlinx ISE phiên bản 10.1 SP3:
Sau khi cài đặt phần mềm thành công, chúng ta tiến hành cập nhật phiên bản
phần mềm lên Service pack 3; đồng thời cài đặt thêm gói Update 3
Tiếp theo, chúng ta lấy bản quyền sử dụng cho gói V2Pro TEMAC
o Part Number: DO-DI-TEMAC, Ver 3.3
o Phiên bản giới hạn miễn phí: yêu cầu “Full System hardware
Evaluation”, cho phép sử dụng TEMAC trong 30 ngày , mỗi lần chạy
giói hạn 8 giờ.
o Sử dụng cho mục đích giao dục có thể nhận hỗ trợ theo đường dẫn:
http://www.xilinx.com/univ/don_program.htm
Cai đặt ModelSim
Đây là phần mềm giúp sử dụng để mô phỏng cac mạch phần cứng và xem
dạng tín hiệu trong mạch đồng thời hỗ trợ cac phần mềm testbench; chúng ta sẽ cài
đặt phiên bản sau: Version SE 6.2G.
Cai đặt ChipScope
NETFPGA GROUP-KSTN-ĐTVT-K52 48
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
Công cụ ChipScope hỗ trợ kiểm tra lỗi tín hiệu trên FPGA sử dụng bô phân
tích tín hiệu logic ngay trên chip. Chúng ta sẽ cài đặt phiên bản sau: Xilinx
ChipScope Pro Version 9.1.02i hoặc 10.1 SP3
Cai đặt các module bô nhớ
Chúng ta có thể sử dụng Script tự đông cài đặt cac module bô nhớ được cung
cấp sắn trong thư mục:
netfpga/lib/scripts/fetch_mem_models
Chúng ta cũng có thể tải và cài đặt cac module bô nhớ môt cach riêng rẽ.
3.3.2 Biên dịch va tải Driver xuống NetFPGA
Sau khi tải hoàn chỉnh cac gói phần mềm cần thiết, chúng ta phải thực hiện
biên dịch diver và cac công cụ.
Biên dịch
cd ~/netfpga/ make
Chúng ta sẽ được đầu ra đúng tại cửa sổ Terminal như sau:
Tiếp theo, chúng ta thực hiện nạp cac driver và công cụ
Cài đặt driver và khởi đông lại. Cac driver sẽ được lưu tại thư mục
/lib/modules/`uname -r`/kernel/drivers/nf2.ko, để cài đặt dùng câu lệnh:
make install
Khởi đông lại may tính. Sau khi khởi đông lại, đăng nhập bằng tài khoản
root và kiểm tra xem driver đã được tải thành công hay không:
lsmod | grep nf2
Đầu ra đúng:
NETFPGA GROUP-KSTN-ĐTVT-K52 49
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
nf2 28428 0
Thực hiện việc kiểm tra giao diện NetFPGA bằng câu lệnh:
ifconfig -a | grep nf2
Nếu việc cài đặt thành công chúng ta sẽ được kết quả như sau trên màn hình
Terminal:
nf2c0 Link encap:Ethernet HWaddr 00:4E:46:32:43:00
nf2c1 Link encap:Ethernet HWaddr 00:4E:46:32:43:01
nf2c2 Link encap:Ethernet HWaddr 00:4E:46:32:43:02
nf2c3 Link encap:Ethernet HWaddr 00:4E:46:32:43:03
Lập trình cho CPCI
Chạy Script sau để lập trình cho CPCI:
/usr/local/sbin/cpci_reprogram.pl --all
(to reprogram all NetFPGAs in a system)
Đẩu ra đúng:
Loading the CPCI Reprogrammer on NetFPGA 0
Loading the CPCI on NetFPGA 0
CPCI on NetFPGA 0 has been successfully reprogrammed
Mỗi lần khởi đông may tính, ta phải tải lại CPCI!
3.3.3 Cai đặt NetFPGA OpenFlow switch
Chúng ta thực hiện cài đặt từ Stanford Git:
sudo yum -y install git automake pkgconfig libtool gcc
NETFPGA GROUP-KSTN-ĐTVT-K52 50
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
Nếu may tính chưa được cập nhật, chúng ta cần phải cài thêm gói Autoconf 2.60 hoặc mới hơn theo câu lệnh sau:
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.63.tar.gz
tar xvzf autoconf-2.63.tar.gz
cd autoconf-2.63
./configure --prefix=/usr
make
sudo make install
cd
Tải mã nguồn OpenFlow :
git clone git://OpenFlow.org/OpenFlow.git
cd OpenFlow
git checkout -b 1.0.0-netfpga origin/devel/tyabe/1.0.0-
netfpga
./boot.sh
Tải file .bit dành cho NetFPGA và giải nén theo đường dẫn:
cd (thư mục chứa OpenFlow)/hw-lib/nf2
wget
http://OpenFlow.org/downloads/netfpga/OpenFlow_switch.bit.100
_3.tar.gz
tar xfvz OpenFlow_switch.bit.100_3.tar.gz
Tiếp theo, ta tiến hành build mã nguồn chuyển mạch OpenFlow:
cd (your OpenFlow directory)
./configure --enable-hw-lib=nf2
make
sudo make install
Cập nhật biến môi trường OF_ROOT và PERL5LIB:
NETFPGA GROUP-KSTN-ĐTVT-K52 51
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
cd ~/
cp OpenFlow/regress/scripts/env_vars .
vim env_vars
Tìm dòng lệnh như sau:
export PERL5LIB=${OFT_ROOT}/lib/Perl5:${PERL5LIB}
Bỏ :${PERL5LIB} như dòng dưới đây bởi vì PERL5LIB trong thư mục NetFPGA sẽ làm cac test thất bại:
export PERL5LIB=${OFT_ROOT}/lib/Perl5
Lưu file env_vars lại.
3.3.4 Xây dựng mạng chuyển mạch OpenFlow
Sau khi hoàn tất qua trình cài đặt cac phần mềm cần thiết, để có mạng
OpenFlow hoàn chỉnh, cần có thêm môt may tính cài phần mềm điều khiển (ví dụ
như NOX controller). Tiếp theo, khởi đông bô điều khiển NOX, nối dây mạng từ
may tính này vào cac may làm chuyển mạch OpenFlow qua cổng Gigabit Ethernet
có sẵn.
Khởi đông chuyển mạch OpenFlow bằng cac câu lệnh sau:
sudo su
cd /home/OpenFlow/OpenFlow
nf2_download hw-lib/nf2/OpenFlow_switch.bit
ofdatapath punix:/var/run/test -i nf2c0,nf2c1,nf2c2,nf2c3 &
ofprotocol unix:/var/run/test tcp:<host name or IP address of
your controller> &
Lệnh ofdatapath khởi đông chuyển mạch trong khi lệnh ofprotocol kết
nối chuyển mạch tới bô điều khiển.
NETFPGA GROUP-KSTN-ĐTVT-K52 52
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
Trong đó thay cac trường hostname và Ip address bằng địa chỉ Ip của may cài
bô điều khiển NOX và gia trị cổng TCP dùng để kết nối tới chuyển mạch (mặc định
là 6633). Ví dụ: địa chỉ IP của may điều khiển là 5.5.5.5 thì câu lệnh sẽ là:
ofprotocol unix:/var/run/test tcp:5.5.5.5:6633 &
Lưu ý, trong cac câu lệnh trên punix: /var/run/test chính là file mô tả
UNIX socket dùng để đại diện và giao tiếp với chuyển mạch.
Nối cac may tính vào cac cổng trên NetFPGA của switch, chạy thử lệnh ping
giữa cac may bất kì và xem kết quả. Khi chưa cắm bô điều khiển vào, kết quả là cac
may tính không thể ping được cho nhau, hay chuyển mạch không chuyển tiếp cac
gói tin đến cac may tính tương ứng. Nguyên nhân là do lúc này flow table trong
chuyển mạch còn trống nên no sẽ không biết phải xử lý thế nào với cac gói tin đến.
Để chuyển mạch có thể chuyển tiếp gói tin, cac flow entry cần được thêm vào
trong flow table của chuyển mạch. Thực hiện thêm flow bằng câu lệnh dpctl add-
flow, ví dụ:
dpctl add-flow unix:/var/run/test in_port=1, actions=output:2
Theo lệnh này, khi gói tin vào từ port có số thứ tự là 1 sẽ được chuyển tiếp tới
port 2, có thể thêm tham số khac như thời gian tồn tại của flow entry này vào (đề
phòng entry bị xóa trước khi thử nghiệm):
dpctl add-flow unix:/var/run/test in_port=1,
idle_timeout=120, actions=output:2 //thời gian tồn tại
của entry là 120 giây.
Ngoài ra, muốn xem flow table trong chuyển mạch dùng câu lệnh dptcl dump-
table.
NETFPGA GROUP-KSTN-ĐTVT-K52 53
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
dpctl dump-tables unix:/var/run/test
Màn hình Terminal sẽ hiển thị thông tin về cac Flow Table như sau:
[root@dhcppc21 ~]# dpctl dump-tables unix:/var/run/teststats_reply (xid=0xc530a0bb): flags=none type=3(table) 3 tables 0: nf2 : wild=0x00018, max= 32792, active=0 lookup=2058812348, matched=3176889822 1: hash2 : wild=0x00000, max=131072, active=0 lookup=0, matched=0 2: linear : wild=0x3fffff, max= 100, active=0 lookup=0, matched=0
Khi muốn xem cac flow được chứa trong chuyển mạch, chúng ta sử dụng câu lệnh:
dpctl dump-flows unix:/var/run/test
Kết quả, màn hình sẽ hiển thị cac flow được lưu trong may như sau (ví dụ dưới đây
có ba flow):
root@dhcppc21 ~]# dpctl dump-flows unix:/var/run/teststats_reply (xid=0x93585628): flags=none type=1(flow)cookie=0, duration_sec=2s, duration_nsec=762000000s,
table_id=0, priority=32768, n_packets=0, n_bytes=0, idle_timeout=1000,hard_timeout=0,in_port=4,actions=output:3 cookie=0, duration_sec=10s, duration_nsec=402000000s, table_id=0, priority=32768, n_packets=0, n_bytes=0, idle_timeout=1000,hard_timeout=0,in_port=3,actions=output:4 cookie=0, duration_sec=36s, duration_nsec=952000000s, table_id=0, priority=32768, n_packets=0, n_bytes=0, idle_timeout=1000,hard_timeout=0,in_port=2,actions=output:4
Người dùng sử dụng câu lệnh dưới đây nếu muốn xóa môt flow khỏi bảng định
tuyến trong chuyển mạch:
NETFPGA GROUP-KSTN-ĐTVT-K52 54
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 3ƯƠ
dpctl del-flows unix:/var/run/test
Cac cach dùng khac của công cụ dpctl có thể xem thêm bằng cach chạy lệnh sau:
man dptcl
3.4 Kết luận chương
Trong chương này, nhóm tac giả đã thực hiện việc xây dựng mạng nôi bô sử
dụng cac chuyển mạch OpenFlow dựa trên nền tảng NetFPGA trong môi trường
thực tiễn. Việc xây dựng hệ thống mạng là cơ sở cho cac nhóm nghiên cứu khac đặc
biệt là nhóm nghiên cứu về giải thuật tiết kiệm năng lượng cho mạng OpenFlow
trong dự an ECODANE.
NETFPGA GROUP-KSTN-ĐTVT-K52 55
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
Chương 4. Thiết kế bô điều khiển chuyển mạch
Trong chương này và chương tiếp theo, tac giả sẽ trình bày về cac giải phap
về phần cứng nhóm tac giả đưa ra nhằm tiết kiệm năng lượng cho trung tâm dữ liệu.
Giải phap phần cứng ở đây bao gồm cac giải phap không liên quan đến phần định
tuyến đường đi của gói tin. Hai giải phap được đưa ra ở đây là:
- Thiết kế bộ điều khiển chuyển mạch (tạo phần cứng đôc lập có khả năng đưa
chuyển mạch sang trạng thai năng lượng thấp) trình bày ở Chương 4.
- Thiết kế chuyển mạch với chức năng tiết kiệm năng lượng (tạo ra chuyển
mạch có khả năng chuyển sang trạng thai năng lượng thấp) trình bày ở
Chương 5.
Cac giải phap này xuất phap từ việc chuyển trạng thai của chuyển mạch về
trạng thai tiết kiệm năng lượng (trạng thai không dùng hết cac port, trạng thai ngủ
đông hay sleep mode). Với mỗi port của OpenFlow switch được ngắt sẽ tiết kiệm
được xấp xỉ 1W [11] và với mỗi chuyển mạch 4 port được tắt đi sẽ tiết kiệm được
xấp xỉ 10W (4W cho 4 port và 6W cho phần lõi) [9].
Giải phap Thiết kế bộ điều khiển chuyển mạch chủ yếu để thử nghiệm giao
thức OpenFlow, giao tiếp giữa bô điều khiển chuyển mạch với môt phần cứng cụ
thể. Từ đó, tac giả sẽ ap dụng phần giao tiếp này lên chuyển mạch OpenFlow để tạo
ra môt chuyển mạch mới có chức năng tiết kiệm năng lượng ở chương sau.
4.1 Giải pháp tiết kiệm năng lượng
Xuất phat từ mục tiêu đã nêu, tac giả thiết kế môt bô điều khiển chuyển mạch
đôc lập, nhận lệnh trực tiếp từ bô điều khiển và tắt nguồn hoặc ngắt cac link giữa
cac chuyển mạch.
Bô điều khiển chuyển mạch (OpenFlow Switch controller) – viết tắt là OSC
nhằm phân biện với bô điều khiển controller có sẵng trong mô hình mạng
OpenFlow.
NETFPGA GROUP-KSTN-ĐTVT-K52 56
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
Hình 4.21 Sơ đồ mô tả vị trí của OSC trong mạng chuyển mạch
Trên Hình 4.21, OSC nhận bản tin điều khiển từ bô điều khiển (Controller)
và tiến hành điều khiển môt chuyển mạch (S1) và cac đường kết nối của chuyển
mạch này với cac chuyển mạch khac.
Ngoài ra, OSC
có khả năng điều khiển
nhiều chuyển mạch
khac nhau và liên kết
với nhau tạo thành
mạng cac OSC. Hình
4.22 mô tả môt mạng
OSC đơn giản gồm 1
Switch/Hub.
Hình 4.22 Mạng OSC đơn giản
4.2 Yêu cầu chức năng va phi chức năng
Mạch thiết kế cần có đủ cac yêu cầu chức năng sau:
- Giao tiếp được với bô điều khiển bằng giao thức OpenFlow.
NETFPGA GROUP-KSTN-ĐTVT-K52 57
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
- Định kì gửi bản tin thông bao trạng thai của mình tới bô điều khiển.
- Khi nhận được yêu cầu từ bô điều khiển, có khả năng chuyển trạng thai cac
chuyển mạch từ trạng thai năng lương cao xuống thấp, đóng ngắt cac link kết
nối giữa chúng.
Yêu cầu phi chức năng:
- Tiết kiệm năng lượng tối đa nhằm giảm điện năng tiêu thụ trong toàn bô
mạng.
- Khả năng đap ứng của hệ thống không cần qua nhanh.
- Gia thành phải rẻ để sản xuất số lượng lớn trong trung tâm dữ liệu.
- Có khẳ năng chạy liên tục trong thời gian dài.
- Có khả năng điều khiển nhiều port và chuyển mạch.
4.3 Thiết kế phần cứng
Dựa trên cac yêu cầu chức năng và phi chức năng, tac giả đi vào thiết kế
phần cứng của OSC.
Hình 4.23 Sơ đồ của chuyển mạch trước va sau khi có OSC
4.3.1 Sơ đồ khối thiết kế
Bô OSC sẽ gồm ba khối chính như Hình 4.24 và sơ đồ chi tiết trên Hình 4.25:
Khối đóng ngắt port (ON/OFF Port Circuit):
Khối đóng ngắt chuyển mạch (ON/OFF Switch Circuit):
NETFPGA GROUP-KSTN-ĐTVT-K52 58
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
Khối điều khiển (Main controller):
Hình 4.24 Sơ đồ khối cơ bản của OSC
Hình 4.25 Sơ đồ khối chi tiết của OSC
4.3.2 Khối điều khiển (Main controller):
Khối này có nhiệu vụ đọc bản tin điều khiển từ bô điều khiển gửi xuống, bóc
tach bản tin, điều khiển cac khối đóng mở, đồng thời cũng gửi tình trạng cac link
lên cho bô điều khiển thông qua OSC Network bằng giao thức OpenFlow. Tốc đô
trao đổi với bô điều khiển không cần nhanh.
NETFPGA GROUP-KSTN-ĐTVT-K52 59
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
4.3.2.1 Vi điều khiển ARM
Có nhiều vi điều khiển có thể đap ứng những yêu cầu này như dòng PIC của
Microchip, AVR của Atmel, ARM của Texas… Tuy nhiên, yêu cầu tiết kiệm năng
lượng cho toàn bô hệ thống là môt yêu cầu quan trọng,vì vậy, sau môt thời gian tìm
hiểu, mô phỏng và đo đạc, tac giả đã lựa chọn chip Arm để thiết kế.
Cấu trúc ARM (viết tắt từ tên gốc là Acorn RISC Machine) là môt loại cấu
trúc vi xử lý 32-bit kiểu RISC được sử dụng rông rãi trong cac thiết kế nhúng. Do
có đặc điểm tiết kiệm năng lượng, cac bô CPU ARM chiếm ưu thế trong cac sản
phẩm điện tử di đông, mà với cac sản phẩm này việc tiêu tan công suất thấp là môt
mục tiêu thiết kế quan trọng hàng đầu.
Ngày nay, hơn 75% CPU nhúng 32-bit là thuôc họ ARM, điều này khiến
ARM trở thành cấu trúc 32-bit được sản xuất nhiều nhất trên thế giới[11]. CPU
ARM được tìm thấy khắp nơi trong cac sản phẩm thương mại điện tử, từ thiết bị
cầm tay (PDA, điện thoại di đông, may đa phương tiện, may trò chơi cầm tay,
và may tính bảng) cho đến cac thiết bị ngoại vi may tính (VD: ổ đĩa cứng, để
bàn…).
4.3.2.2 Bộ vi xử lý ARM Cortex – M3
Bô vi xử lý ARM Cortex-M3 là thế hệ mới nhất của bô xử lý ARM cho cac
hệ thống nhúng. Nó được phat triển để cung cấp môt nền tảng chi phí thấp, đap ứng
yêu cầu thực thi của vi điều khiển với việc giảm số bóng ban dẫn trong lõi ARM
Cortex dẫn tới tiêu thụ năng lượng thấp và giảm gia thành vi xử lí, đồng thời cung
cấp hiệu năng tính toan cao và môt hệ thống tiên tiến để đap ứng ngắt. Bô vi xử lý
ARM Cortex-M3 32-bit RISC đạt hiệu suất cao hơn và tiết kiệm năng lượng hơn so
với ARM7TDMI-S[13].
Trong cac dòng chip Arm phổ biến hiện nay được tìm thấy trên thị trường
Việt Nam, dòng chip Arm Cortex-M3 cụ thể là IC thông dụng Lm3s6965 của hãng
Texas có cac tính năng của nó phù hợp với yêu cầu.
NETFPGA GROUP-KSTN-ĐTVT-K52 60
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
4.3.3 Khối đóng ngắt port (ON/OFF Port Circuit)
Trước hết, chúng ta biết được kết nối với nhau theo chuẩn kết nối RJ45. Cac
dây 1, 2, 3, 6 của chuẩn này dùng để truyền tín hiệu, trong đó có hai dây truyền và
hai dây nhận. Thực nghiệm thực tế cho thấy cac cổng mạng chỉ cần ngắt môt trong
bốn dây, coi như ngắt đường link giữa hai chuyển mạch.
Có nhiều phương phương phap để đóng ngắt mạch điện như dùng transistor,
Flip-flop, relay, IC. Chúng được coi như là môt khóa điện tử khi có tín hiệu điều
khiển sẽ đóng mở kết nối.
Do đặc thù dây tín hiệu được truyền trên đường Ethernet cần được ổn định,
cac thiết bị tham gia vào khối này không được làm ảnh hưởng đến điện ap vi sai
truyền trên kết nối khi có tín hiệu (điện ap trên dây vào khoảng 2.5V tùy vào tốc đô
đường truyền là 10, 100 hay 1000Mbps [14]). Xét từng phương an cụ thể đã đưa ra:
- Phương an sử dụng transitor giảm điện ap khoảng 0.7V
- Phương an sử dụng flip-flop và IC khac làm trễ tín hiệu truyền.
- Phương an Relay là tỏ ra ưu việt khi không làm giảm điện ap và không gây
trễ tín hiệu và được chọn là phương an sử dụng.
Khi muốn ngắt kết nối giữa hai chuyển mạch, relay sẽ không được cung cấp
điện. Relay bây giờ đóng vai trò như môt dây dẫn và không gây ảnh hưởng đến dữ
liệu được truyền đi trên dây ethernet. Ngược lại khi muốn ngắt đường dây truyền
dẫn, ta tiến hành cấp nguồn cho relay.
Việc chọn lựa relay phần lớn tùy thuôc vào công suất và tốc đô đap ứng của
chúng. Loại relay công suất nhỏ dùng trên mạch in (PCB) là hợp lý cho môt dự an
tiết kiệm năng lượng. Trong môt số catalog của môt số hãng trên thế giới, thiết bị
này chỉ chiếm khoảng 1/4W điện ap 5V. Tuy nhiên, ở thị trường Việt Nam chỉ có
relay công suất vừa phải nên trong phiên bản mẫu này chỉ sử dụng relay loại 5V-
60mA. Tuy không có thể đap ứng được yêu cầu tiết kiệm năng lượng song chúng có
thể đap ứng được cac yêu cầu chức năng chính.
NETFPGA GROUP-KSTN-ĐTVT-K52 61
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
4.3.4 Khối đóng ngắt chuyển mạch (ON/OFF Switch Circuit):
Khối đóng ngắt chuyển mạch có khẳ năng đóng ngắt port của chuyển mạch.
Khac với dây tín hiệu, chuyển mạch sử dụng nguồn 220V, công suất có thể lên tới
hàng trăm Watt [14], chúng rất dễ gây nhiễu tín hiệu cho vi điều khiển.
Relay được tac giả sử dụng ở đây phải là relay lớn, loại chịu được dòng cao
và có cach ly với mạch điều khiển chính bằng IC2803 nhằm tranh việc gây nhiễu và
hư hỏng cho mạch điều khiển.
4.3.5 Kết quả đạt được
Tac giả đã thành công trong việc tạo ra môt phiên bản mẫu cho OSC.Năng
lượng tiêu thụ của toàn bô mạch OSC bước đầu được ước tính theo datasheet của
cac thiết bị như trong Bảng 4.2 sau [13]:
Bảng 4.2 Bảng tổng hợp công suất của các thanh phần
Linh kiện chính Số lượngNăng lượng tiêu thụ
trung bình (mW/đơn vị)
Lm3s6965 1 ~700
RJ45 1 0
Relay 5 ~300
Mạch OSC có thể thử nghiệm việc trao đổi bản tin với bô điều khiển bằng
giao thức OpenFlow cũng như có thể xử lý được cac bản tin OpenFlow mới. Hình
4.26 và Hình 4.27 dưới đây minh họa sơ đồ nguyên lý mạch và mạch OSC sau khi
hoàn thành.
NETFPGA GROUP-KSTN-ĐTVT-K52 62
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
Hình 4.26 Sơ đồ nguyên lý mạch OSC
Hình 4.27 Phần cứng của OpenFlow switch controller
NETFPGA GROUP-KSTN-ĐTVT-K52 63
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
4.4 Thiết kế phần mềm
Phần này sẽ trình bày về cac loại bản tin trong giao thức OpenFlow, cac
bước trong qua trình bắt tay dùng giao thức OpenFlow, thư viện lwIp (Light-Weight
Internet Protocol) dùng cho vi điều khiển Arm, và cac bản tin mới sử dụng cho mục
đích của đề tài.
4.4.1 Giao thức OpenFlow
Hệ thống mạng OpenFlow dùng trong cac trung tâm dựa trên nền tảng giao
thức OpenFlow – môt giao thức mới được triển khai giúp cac nhà phat triển có thể
thí nghiệm, phat triển cac giao thức mới mà không ảnh hưởng đến toàn mạng. Giao
thức OpenFlow gồm có phần header và cac bản tin như sau:
OpenFlow Header:
Tất cả cac loại bản tin trong OpenFlow Protocol đều được đóng gói với
Header của OpenFlow[16]:
struct ofp_header {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
};
Trong OpenFlow Header có bốn trường chính là Version,Type, Length,Xid.
Version hiện tại của OpenFlow là 0x02, Length cho biết tổng đô dài của cả
gói tin. Trường Type sẽ cho biết gói tin sẽ là mốt ố trong số những loại sau
đây:
/* Immutable messages. */
OFPT_HELLO, /* Symmetric message */
OFPT_ERROR, /* Symmetric message */
OFPT_ECHO_REQUEST, /* Symmetric message */
OFPT_ECHO_REPLY, /* Symmetric message */
NETFPGA GROUP-KSTN-ĐTVT-K52 64
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
OFPT_VENDOR, /* Symmetric message */
/* Switch configuration messages. */
OFPT_FEATURES_REQUEST, /* Controller/switch message */
OFPT_FEATURES_REPLY, /* Controller/switch message */
OFPT_GET_CONFIG_REQUEST, /* Controller/switch message */
OFPT_GET_CONFIG_REPLY, /* Controller/switch message */
OFPT_SET_CONFIG, /* Controller/switch message */
/* Asynchronous messages. */
OFPT_PACKET_IN, /* Async message */
OFPT_FLOW_REMOVED, /* Async message */
OFPT_PORT_STATUS, /* Async message */
/* Controller command messages. */
OFPT_PACKET_OUT, /* Controller/switch message */
OFPT_FLOW_MOD, /* Controller/switch message */
OFPT_PORT_MOD, /* Controller/switch message */
/* Statistics messages. */
OFPT_STATS_REQUEST, /* Controller/switch message */
OFPT_STATS_REPLY, /* Controller/switch message */
/* Barrier messages. */
OFPT_BARRIER_REQUEST, /* Controller/switch message */
OFPT_BARRIER_REPLY, /* Controller/switch message */
/* Queue Configuration messages. */
OFPT_QUEUE_GET_CONFIG_REQUEST,/* Controller/switch message */
OFPT_QUEUE_GET_CONFIG_REPLY, /* Controller/switch message */
Từ trên, ta có thể phân chia cac bản tin của OpenFlow Protocol là ba loại
chính:
- Bản tin đối xứng (Symmetric message).
- Bản tin bất đối xứng ( Asynchronous message).
NETFPGA GROUP-KSTN-ĐTVT-K52 65
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
- Bản tin giữa Controller và Switch (Controller to Switch Message) .
Bản tin đối xứng:
Bản tin đối xứng là cac bản tin được gửi môt cach đôc lập. Bản tin đối xứng
được chia làm ba loại:
- Hello: bản tin Hello là môt bản tin dạng đơn giản trao đổi thông tin giữa
Controller và switch khi bắt đầu kết nối.
- Echo: bản tin Echo Request có thể được gửi từ cả phí switch lẫn
Controller, và phải trả về bản tin Echo Reply. Bản tin này được dùng để
kiểm tra, đảm bảo kết nối giữa bô điều khiển với bô chuyển mạch.
- Experimenter: Cac bản tin Experimenter cho phép cac bô chuyển mạch
OpenFlow có thể trao đổi lẫn nhau để hoạt đông với môt số chức năng
khac.
Bản tin bất đối xứng:
Bản tin bất đối xứng là bản tin được bô chuyển mạch chủ đông gửi về cho bô
điều khiển. Cac thông tin được gửi trong bản tin bất đối xứng này thường là trạng
thai của bô chuyển mạch, cac gói tin không gửi được hoặc là lỗi. Có bốn loại gói tin
chính của Asynchronous message:
- Packet-in : Với cac gói tin từ host tới switch mà switch không thể tìm ra
được đường cho gói tin thì gói tin này sẽ được switch đóng gói thêm
OpenFlow Header và chuyển về cho bô chuyển mạch xử lý.
- Flow remove: Sau môt thời gian Timeout nào đó, môt flow sẽ bị bô
chuyển mạch xóa đi, lúc này bô chuyển mạch sẽ gửi môt bản tin thông
bao về cho bô điểu khiển.
- Port Status: Bản tin gửi thông bao về trạng thai hiện tại của cac cổng
trên bô chuyển mạch (đang bật hay tắt) về cho bô điều khiển.
- Error: Switch gửi bản tin thông bao lỗi bề cho bô điều khiển.
Bản tin gửi từ Controller tới Switch :
Đây là cac bản tin được bô điều khiển chủ đông gửi đến bô chuyển mạch, có
thể yêu cầu hoặc không yêu cầu phản hồi trả lời. Có sau gói tin chủ yếu:
- Feautures: Bản tin này được bô điều khiển gửi tới bô chuyển mạch yêu
cầu phản hồi của swicth về năng lực hoạt đông của bô chuyển mạch. Cac
NETFPGA GROUP-KSTN-ĐTVT-K52 66
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
bản tin Feautures này có thể hoạt đông ở cac tầng cao hơn OpenFlow
Channel.
- Configuration: Bản tin nhằm hỏi và cài đặt, cấu hình cac thông số hoạt
đông của bô chuyển mạch.
- Modify-State: Bản tin nhằm quản lý cac trạng thai của bô chuyển mạch.
Mục đích chính của sử dụng bản tin này là nhằm thay đổi (thêm/xóa)
flow hay là môt nhóm nào đó trong OpenFlow table và cài đặt thông số
cho cổng của bô chuyển mạch.
- Read-State: Bản tin nhằm giúp cho bô điều khiển thu thập cac thông tin
được thống kê trên bô chuyển mạch.
- Packet-Out: Bô chuyển mạch sẽ gửi cac gói tin mà nó không thể forward
được sang cho bô điều khiển. Trong trường hợp bô điều khiển xử lý và
tìm ra đường đi cho gói tin đó, thì nó sẽ được đóng gói thêm OpenFlow
Header và được gọi là Packet-Out và sẽ được chuyển về bô chuyển
mạch.
- Barrier: Loại bản tin đặc biệt được gửi bởi bô điều khiển nhằm đảm bảo
qua trình gửi gói tin của bô chuyển mạch.
4.4.2 Trao đổi gói tin với bô điều khiển
Bô điều khiển và bô chuyển mạch OpenFlow giao tiếp với nhau qua giao
thức Ethernet, sử dụng giao thức OpenFlow thông qua sơ đồ như Hình 4.28. Khi
được kết nối tới mạng, trước tiên, bô chuyển mạch OpenFlow sẽ kết nối với bô điều
khiển theo quy trình bắt tay ba bước của TCP/IP. Sau đó, bô chuyển mạch sẽ gửi
bản tin Hello theo giao thức OpenFlow như đã trình bày ở trên. Bô điều khiển gửi
trả lại bản tin Hello đến bô chuyển mạch để hoàn tất qua trình bắt tay và sử dụng
giao thức OpenFlow để trao đổi với bô chuyển mạch.
NETFPGA GROUP-KSTN-ĐTVT-K52 67
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
Hình 4.28 Quy trình bắt tay giữa bô điều khiển va bô chuyển mạch OpenFlow
4.4.3 Mã nguồn mở LwIP
Do hoạt đông của giao thức OpenFlow vẫn dựa trên nền tảng của TCP/IP, vi
điều khiển cần phải chứa sẵn bô giao thức TCP/IP stack trong nó. Cac vi điều khiển
hiện nay thường có bô nhớ trong ROM và RAM giới hạn vào khoảng vài chục đến
vài trăm KB. Thực hiện kết nối TCP/IP môt cach thông thường mà không sử dụng
thêm cac chip nhớ ngoài với cac vi điều khiển này là điều không thể. Tuy nhiên,
thông qua việc sử dụng cac module TCP/IP stack nhỏ dành riêng cho hệ thống
NETFPGA GROUP-KSTN-ĐTVT-K52 68
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
nhúng có thể giải quyết vấn đề này môt cach triệt để. Module lwIP là môt mã nguồn
mở thực hiện trên giao thức TCP/IP được phat triển theo định hướng giảm tài
nguyên sử dụng trong khi vẫn giữ nguyên cac tính năng của giao thức TCP/IP. Đối
với hệ thống nhúng, lwIP giúp cho hệ thống kết nối tới mạng nôi bô (local intranet)
hoặc mạng Internet. Hơn nữa lwIP đã được port tới nhiều sản phẩm MCU của
Stellaris ®[16]. Dưới đây là bảng so sanh ưu, nhược điểm cac phần mềm mã nguồn
mở dành cho TCP/IP stack trên hệ thống nhúng tac giả đã tìm hiểu và thử nghiệm
trong thời gian thực hiện đề tài:
Bảng 4.3 So sánh ưu, nhược điểm của môt số mã nguồn mở TCP/IP stack
Tên phần mềm Ưu điểm Nhược điểm
uIPMiễn phí, kích thước rất nhỏ Hỗ trợ kém, khó viết ứng
dụng
lwIPMiễn phí, đầy đủ, thường được
sử dụng
uC/IPMiễn phí Kích thước lớn, ít được
sử dụng
BSD 4.4 Miễn phí, ổn định Kích thước qua lớn
Tinytcp, wattcp and others
Miễn phí Khó dùng, không tiện lợi
Module lwIP được phat triển bởi Adam Dunkels tại nhóm Hệ thống nhúng
trong mạng tại khoa Khoa Học May Tính thuôc Viện Thuỵ Sỹ[16]. Hiện tại chương
trình này đang được phat triển bởi Leon Woestenberg và đã được sử dụng trong
nhiều sản phẩm thương mại. Được viết bằng ngôn ngữ C, lwIP là môt modue
TCP/IP mã nguồn mở phat triển cho hệ thống nhúng với tập trung vào giảm thiều
tài nguyên sử dụng. lwIP có thể chạy dưới1 hệ điều hành hoặc đôc lập. Kích cỡ
code vào khoảng 25 tới 40 KB trong khi yêu cầu cho RAM khoảng 15 KB.
NETFPGA GROUP-KSTN-ĐTVT-K52 69
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
Đặc điểm:
Giao thức Internet (IP) bao cầm cac gói gửi đi trên toàn giao diện
mạng.
Giao thức ICMP được dùng để bảo trì mạng hoặc debugging.
Giao thức UDP bao gồm cac mở rông thí nghiệm UDP-lite.
Giao thức TCP với điều khiển sự qua tải, ước lượng RTT và phục
hồi/truyền nhanh chóng.
Giao thức PPP.
Giao thức ARP cho Ethernet.
AutoIP tự đông cấu hình IP kết nối.
Cac hàm API đặc biệt để tăng hiệu năng.
Cac hàm API tuỳ chọn như Berkeley socket.
Hỗ trợ nhiều kết nối và giao diện mạng.
Hình 4.29 Các giao thức được sử dụng trong lwIP
NETFPGA GROUP-KSTN-ĐTVT-K52 70
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
4.4.4 Thiết kế bản tin OpenFlow va kết quả đạt được
Cac bản tin OpenFlow được gửi giữa bô điều khiển và cac bô chuyển mạch
OpenFlow để quản lý và điều khiển cac bô chuyển mạch thông qua kênh
OpenFlow. Mỗi bản tin OpenFlow được bắt đầu bằng header OpenFlow như dưới
đây:
struct ofp_header {
uint_8 version;
uint_8 type;
uint_16 length;
uint_32 xid;
};
Như đã trình bày từ cac phần trên, OSC nhận cac lệnh điều khiển từ bô điều
khiển OpenFlow để điều khiển cac chế đô làm việc của bô chuyển mạch và cac
cổng. Cac lệnh điều khiển bao gồm:
Lệnh tắt bật cac bô chuyển mạch và cac line card.
Lệnh tắt bật cac đường link liên kết và cac cổng mạng hoặc điều chỉnh tốc đô
cho phù hợp với tốc đô link tại mỗi thời điểm.
Lệnh thay đổi mức năng lượng tiêu thụ bằng việc thay đổi tần số làm việc
của clock hoặc chuyển sang chế đô sleep.
Cac lệnh trên cần được thêm vào trong cac bản tin trao đổi giữa bô điều khiển
OpenFlow và OSC. Để phục vụ cho mục đích này, tac giả đã thiết kế thêm ba loại
bản tin mới như sau: OFPT_PORT_MOD, OFPT_LINECARD_MOD và
OFPT_SWITCH_MOD.
Bản tin OFPT_PORT_MOD :
Loại bản tin: Controller to Switch
Chiều dài: 32 bytes
Chức năng: Thay đổi trạng thai cac cổng mạng bao gồm bật, tắt và thay
đổi tốc đô phù hợp với tốc đô link.
Cấu trúc:
NETFPGA GROUP-KSTN-ĐTVT-K52 71
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
struct ofp_port_mod {
struct ofp_header header;
uint16_t port_no;
uint8_t hw_addr[OFP_ETH_ALEN];
uint32_t config;
uint32_t mask;
uint8_t link_state ;
uint32_t advertise;
uint8_t pad[3];
};
Bảng 4.4 và Bảng 4.5 dưới đây là cac trường và ý nghĩa của chúng trong bản tin OFPT_PORT_MOD :
Bảng 4.4 Bản tin OFPT_PORT_MOD
OpenFlow
header
Port
no
MAC
address
Config Mask Link
state
Advertise Pad
8bytes 2bytes 6bytes 4bytes 4bytes 1bytes 4bytes 3bytes
Bảng 4.5 Ý nghĩa các trường trong bản tin OFPT_PORT_MOD
TRƯỜNG Ý NGHĨA
headerChứa thông tin về phiên bản của giao thức, loại của bản tin, chiều dài bản tin và số hiệu giao dịch của
bản tin
port_no Chứa gia trị của port trên cac bô chuyển mạch
hw_addr[OFP_ETH_ALEN] Địa chỉ MAC của port
config Cac trạng thai của port tại thời điểm hiện tại
mask Thông tin về sự thay đổi trạng thai của port
NETFPGA GROUP-KSTN-ĐTVT-K52 72
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
link_state Thông tin về cac chế đô của port như bật, tắt…
advertise Thông tin về cac chức năng và Action của Port
pad Trường còn trống có thể sử dụng trong tương lai
Trường link_state chứa thông tin để điều khiển cac cổng mạng như trên Hình
4.30. Nếu bit cờ có gia trị là 1, OSC sẽ thay đổi trạng thai cổng mạng. Trường
MOD biểu thị cac chế đô làm việc của cổng mạng ví dụ bật, tắt, tốc đô link… Khi
MOD có gia trị là LINK_RATE, tốc đô link sẽ được điều chỉnh dựa theo trường
Link Rate. Hiện tại, chỉ có cac gia trị tốc đô link 10Mbps, 100Mbps và 1Gbps được
thêm vào và sử dụng để điều chỉnh tốc đô link.
Hình 4.30 Trường link state
Bản tin OFPT_SWITCH_MOD :
Loại bản tin: Controller to Switch
Chiều dài: 24 Bytes
Chức năng: Thay đổi trạng thai cac bô chuyển mạch OpenFlow
Cấu trúc bản tin:
struct ofp_switch_mod {
struct ofp_header header;
uint64_t datapath_id;
uint8_t state;
uint32_t option;
uint8_t pad[3];
};
NETFPGA GROUP-KSTN-ĐTVT-K52 73
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
Bảng 4.6 và Bảng 4.7 dưới đây là cac trường và ý nghĩa của chúng trong bản tin OFPT_SWITCH_MOD :
Bảng 4.6 Ý nghĩa các trường trong bản tin OFPT_SWITCH_MOD
Trường Ý nghĩa
header Chứa thông tin về phiên bản của giao thức, loại của bản tin, chiều
dài bản tin và số hiệu giao dịch của bản tin
datapath_id Tên của bô chuyển mạch được lưu trong Controller
state Cac trạng thai của bô chuyển mạch được sử dụng cho việc điều
khiển
option Tùy chọn
pad Trường còn trống có thể sử dụng trong tương lai
Bảng 4.7 Bản tin OFPT_SWITCH_MOD
Opflow
headerDatapath ID Switch State Option Pad
8bytes 8 bytes 1bytes 4bytes 3bytes
Trường Switch state chứa thông tin để thay đổi trạng thai cac bô chuyển
mạch như Hình 4.31. Trường MOD biểu thị cac chế đô làm việc của bô chuyển
mạch như là tắt, bật, IDLE, SLEEP…
Hình 4.31 Trường Switch state
NETFPGA GROUP-KSTN-ĐTVT-K52 74
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
Bản tin OFPT_LINECARD_MOD:
Loại bản tin: Controller to Switch.
Chiều dài: 20 Bytes.
Chức năng: Thay đổi trạng thai Line Card.
Cấu trúc bản tin:
struct ofp_linecard_mod {
struct ofp_header header;
uint64_t datapath_id;
uint16_t line_card_no;
uint8_t line_card_state;
uint32_t option ;
};
Bảng 4.8 và dưới đây là cac trường và ý nghĩa của chúng trong bản tin OFPT_LINECARD_MOD :
Bảng 4.8 Bản tin OFPT_LINECARD_MOD
Opflow header Datapath ID Line Card no Line Card State Option
8bytes 8 bytes 1bytes 1bytes 2bytes
Bảng 4.9 Ý nghĩa các trường trong bản tin OFPT_LINECARD_MOD
Trường Ý nghĩa
headerChứa thông tin về phiên bản của giao thức, loại của bản tin,
chiều dài bản tin và số hiệu giao dịch của bản tin
datapath_id Tên của bô chuyển mạch được lưu trong Controller
line_card_no Số hiệu của line card trong bô chuyển mạch
line_card_state Cac trạng thai của line card được sử dụng cho việc điều
NETFPGA GROUP-KSTN-ĐTVT-K52 75
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
khiển
option Tùy chọn
Trường Line card chứa thông tin để thay đổi trạng thai cac bôn chuyển mạch
như Hình 4.32. Trường MOD biểu thị cac chế đô làm việc của line card như bật, tắt,
IDLE, SLEEP…
Hình 4.32 Trường Line Card state
Hình 4.33 mô tả qua trình giao tiếp giữa bô điều khiển và OSC. Trước khi
thiết lập kết nối, bô điều khiển và OSC phải thông qua môt qua trình bắt tay giống
như qua trình bắt tay giữa bô điều khiển và bô chuyển mạch OpenFlow như đã trình
bày ở trên. Cac loại bản tin ví dụ PORT_MOD, LINECARD_MOD hoặc
SWITCH_MOD được định nghĩa trong trường type của header trong bản tin
OpenFlow. Sau khi thiết lập kết nối thành công, chương trình sẽ hoạt đông ở trạng
thai chờ gói tin từ bô điều khiển gửi xuống. Khi gói tin nhận được là môt trong ba
loại bản tin được định nghĩa như ở trên, chương trình sẽ tiếp tục kiểm tra bit bao
hiệu việc thay đổi trạng thai. Nếu bit bao hiệu là “1”, chương trình sẽ thực hiện việc
thay đổi trạng thai theo trường MOD, sau đó quay lại trạng thai chờ bản tin. Nếu bit
bao hiệu là “0”, chương trình sẽ không thực hiện bước tiếp theo mà quay trở về
trạng thai chờ ngay lập tức.
NETFPGA GROUP-KSTN-ĐTVT-K52 76
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
Hình 4.33 Sơ đồ thuật toán của OSC
NETFPGA GROUP-KSTN-ĐTVT-K52 77
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 4ƯƠ
4.5 Kết luận chương
Chương này đã đưa ra giải phap xây dựng bô OSC có khả năng đưa cac
chuyển mạch OpenFlow sang trạng thai năng lượng thấp; đồng thời quan trọng hơn
cac tac giả đã tạo ra cac bản tin mới theo chuẩn giao thức OpenFlow mang thông tin
về cac chế đô tiết kiệm năng lượng được gửi từ bô điều khiển. Cac bản tin này để
thiết lập cac trạng thai hoạt đông của cac bô chuyển mạch OpenFlow tại từng thời
điểm dựa theo cac thuật toan tìm đường được cac nhà phat triển thử nghiệm và triển
khai trong cac trung tâm dữ liệu.
Trong chương tiếp theo, nhóm tac giả sẽ sử dụng bản tin và cach sử dụng bản
tin đã được nghiên cứu trong chương này như môt phần nền tảng nhằm tạo ra môt
chuyển mạch thông minh (chuyển mạch có khẳ năng tự đông chuyển về trạng thai
năng lượng thấp khi nhận được yêu cầu từ bô điều khiển).
NETFPGA GROUP-KSTN-ĐTVT-K52 78
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
Chương 5. Thiết kế khối tiết kiệm năng lượng cho chuyển mạch OpenFlow
Như đã trình bày ở phần kết thúc chương trước, chương này sẽ tập trung vào
việc thiết kế chuyển mạch OpenFlow có chức năng tiết kiệm năng lượng. Để thực
hiện được điều này, nhóm tac giả sẽ xây dựng theo cac bước sau:
- Nghiên cứu giải phap tiết kiệm năng lượng cho chuyển mạch OpenFlow.
- Xây dựng thêm khối có chức năng tiết kiệm năng lượng trong phần cứng của
chuyển mạch OpenFlow.
- Xây dựng và triển khai chức năng giao tiếp với bô điều khiển và tiết kiệm
năng lượng trong phần mềm của chuyển mạch OpenFlow.
Trước hết, chúng ta đi vào tìm hiểu giải phap tiết kiệm năng lượng cho
chuyển mạch OpenFlow.
5.1 Giải pháp tiết kiệm năng lượng
Công thức tính năng lượng tiêu thụ của linh kiện CMOS khi hoạt đông là:
P = A.C.V2.F
Trong đó, P là công suất tiêu thụ theo đơn vị Watt (W). A là hệ số hoạt đông
tức là tỷ lệ linh kiện trong mạch thực sự hoạt đông, còn C là điện dung chuyển trạng
thai, V là điện thế hoạt đông, và F là tần số hoạt đông.
Dựa vào phương trình trên, để tiết kiệm năng lượng cho môt thiết bị bất kì có
thể thực hiện cac giải phap sau:
Giảm hệ số hoạt đông, tức là giảm bớt cac thành phần tiêu thụ năng lượng
trong thiết bị, tắt bớt cac thành phần này khi không hoạt đông.
Giảm điện dung chuyển trạng thai. Vấn đề này phụ thuôc nhiều về mặt công
nghệ chế tạo và sử dụng cac vật liệu mới.
Giảm điện ap hoạt đông của thiết bị. Tương tự như giảm điện dung chuyển
trạng thai, phương phap này cũng phụ thuôc hoàn toàn vào vật liệu chế tạo
và công nghệ sản xuất.
NETFPGA GROUP-KSTN-ĐTVT-K52 79
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
Giảm tần số làm việc của mạch hay cac linh kiện.
Với môt sản phẩm thương mại bất kì, việc giảm điện năng tiêu thụ bằng hai
phương phap giảm điện dung chuyển trạng thai và điện ap hoạt đông là không khả
thi vì cac tham số này đã được cố định bởi nhà sản xuất. Khi cố thay đổi cac tham số
đó, ví dụ giảm điện ap sử dụng, sẽ khiến cho cac thiết bị không hoạt đông, hoạt đông
sai chức năng.
Giải phap giảm hệ số hoạt đông và giảm tần số làm việc yêu cầu người sử
dụng có khả năng thay đổi cấu trúc bên trong của thiết bị nhưng vẫn đảm bảo thiết bị
vận hành đúng chức năng. Vấn đề này bình thường không có khả năng thực hiện do
cac thiết bị sử dụng cac con chip đã được đóng gói sẵn, người dụng không thể can
thiệp vào cấu trúc bên trong được. Tuy nhiên, với nển tảng FPGA, hai giải phap trên
hoàn toàn có thể trở thành hiện thực. Mọi thành phần bên trong thiết bị trên nền tảng
FPGA đều có thể được thay đổi, tuỳ chỉnh theo yêu cầu của người thiết kế, điều đó
có nghĩa là có thể thay đổi cấu trúc, chức năng của từng bô phận trong thiết bị. Hệ
quả là, cac thành phần có thể được tắt bớt khi không cần thiết, và tần số làm việc của
thiết bị có thể được thay đổi.
Áp dụng vào chuyển mạch OpenFlow trên nền tảng NetFPGA, để thực hiện
tiết kiệm năng lượng cho chuyển mạch, tac giả đề xuất thêm môt số chức năng mới
vào thiết bị này:
- Thứ nhất, môt số thành phần tiêu thụ năng lượng chủ yếu của chuyển
mạch như cac cổng giao tiếp Ethernet cần phải được tắt di khi không hoạt
đông. Thực tế sử dụng cho thấy, không phải lúc nào tất cả cac cỏng của
chuyển mạch cũng hoạt đông toàn bô 24/24 (ví dụ: trong khoảng thời
gian từ 23h đêm đến 5h sang, có thể môt số cổng hoạt đông nhưng không
hề có lưu lượng đi qua).
- Thứ hai, chuyển mạch có thể làm việc với cac tần số khac nhau tương
ứng với cac lưu lượng vào khac nhau như 10Mbps, 100Mbps, 1Gbps. Khi
lưu lượng qua chuyển mạch giảm đến môt mức nào đó, chuyển mạch có
thể được cung cấp tín hiệu clock với tần số thấp hơn. Việc này vừa đảm
NETFPGA GROUP-KSTN-ĐTVT-K52 80
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
bảo hoạt đông bình thường cho hệ thống vừa góp phần làm giảm điện
năng tiêu thụ. Trong thực tế, chuyển mạch OpenFlow có thể làm việc
được với tần số là 125MHz với lưu lượng 1Gbps và có thể giảm xuống
khi lưu lượng vào ít hơn. Thêm nữa, cac port của chuyển mạch có thể đưa
về làm việc với cac giao tiếp tốc đô thấp hơn như 10Mbps hay 100Mbps
thay vì chỉ 1Gbps như hiện tại để giảm năng lượng tiêu thụ.
5.2 Thiết kế phần cứng
Dựa trên giải phap được đưa ra, tac giả xây dựng môt khối điều khiển có tên
là Clock Controller (CC) có cac chức năng sau:
- Sử dụng môt clock riêng đôc lập, chạy liên tục ngay cả khi chuyển mạch ở
trạng thai năng lượng thấp hay sleep mode.
- Có nhiệm vụ lấy thông tin từ phần mềm thông qua PCI bus để điều khiển
việc đóng ngắt cac dây tín hiệu clock của cac khối.
Do chuyển mạch OpenFlow được thiết kế làm việc với tốc đô đường truyền
cố định là 1Gbps nên giải phap thay đổi tốc đô kết nối theo lưu lượng thực xuống
mức 10, 100 Mbps sẽ được triển khai trong tương lai.
5.2.1 Lam việc với phần cứng của chuyển mạch OpenFlow
Phần cứng của chuyển mạch OpenFlow được xây dựng từ cac modules bằng
ngôn ngữ Verilog và quản lý bằng cac file xml. Chúng cùng cac thành phần liên quan
được tổ chức thành cac thư mục tại địa chỉ OpenFlow_switch/ trong thư mục chứa
project của NetFPGA. Cụ thể như sau:
Thư mục OpenFlow_switch/include chứa cac file xml, cac file xml này chứa
thông tin về cac module phần cứng (trong lib/verilog) được sử dụng trong bô
chuyển mạch OpenFlow và cac thanh ghi được sử dụng bởi cac module phần
cứng đó.
Thư mục OpenFlow_switch/lib chứa cac thư viện Perl và C.
Thư mục OpenFlow_switch/src chứa cac source code verilog của bô chuyển
mạch OpenFlow.
NETFPGA GROUP-KSTN-ĐTVT-K52 81
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
Thư mục OpenFlow_switch/synth chứa makefile và cac file .xco (file sinh ra
bởi Coregen) để thực hiện tổng hợp code verilog của bô chuyển mạch
OpenFlow thành file OpenFlow_switch.bit.
Thư mục OpenFlow_switch/verif chứa cac file để thực hiện mô phỏng từng
chức năng của bô chuyển mạch OpenFlow.
Để thiết kế khối tiết kiệm năng lượng CC chúng ta đi sâu vào tìm hiểu và thay
đổi cac khối modules phần cứng được mô tả trong cac file verilog gồm có:
- nf2_top.v
- nf2_core.v
- user_data_path.v
- generic_regs.v
- udp_reg_master.v
- tạo mới file clock_controller.v
và cac file quản lý lý project (xml) sau:
- project.xml
- user_data_path.xml
- tạo mới file clock_controller.xml
NETFPGA GROUP-KSTN-ĐTVT-K52 82
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
5.2.2 Vị trí của khối Clock controller
Dựa vào file mổ tả phần cứng mức top design nf2_top.v, sơ đồ khối và cac tin
hiệu liên quan của chuyển mạch OpenFlow được thể hiện như trên Hình 5.34.
Hình 5.34 Sơ đồ hệ thống clock của chuyển mạch OpenFlow
Theo Hình 5.34, chuyển mạch OpenFlow sử dụng bảy tín hiệu clock chính
như sau:
Bốn tín hiệu clock riêng biệt điều khiển việc nhận dữ liệu trên bốn cổng
Ethernet.
Tín hiệu clock gtx_clk điều khiển việc truyền dữ liệu cho cả bốn cổng này.
Tín hiệu core_clk đảm bảo hoạt đông cho khối nf2_core bên trong.
Tín hiệu cpci_clk được cung cấp cho khối giao tiếp CPCI bên trong
nf2_core.
NETFPGA GROUP-KSTN-ĐTVT-K52 83
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
Theo cac phương phap tiết kiệm năng lượng đã nêu ở trên, nhóm đã đề xuất
phương an thực hiện cụ thể như sau:
Môt số cổng Ethernet của chuyển mạch có thể được tắt đi khi không có lưu
lương đi qua, việc tắt cac port được thực hiện khi có yêu cầu từ bô điều khiển
(ví dụ như bô điều khiển NOX). Giải phap này có thể được ap dụng bằng
cach ngắt cac xung tín hiệu clock ra khỏi cac khối thực hiện việc truyền nhận
dữ liệu (cụ thể theo Hình 5.34 là cac khối RGMII từ 1 đến 4). Đồng thời cac
tín hiệu TX_clk tương ứng với cac khối đó cũng phải bị cach ly.
Khi chuyển mạch không cần thiết phải hoạt đông, bô điều khiển có thể ra
lệnh tắt toàn bô chuyển mạch. Khi đó, có thể tach toàn bô cac tín hiệu clock
ra khỏi cac khối của chuyển mạch tức là chuyển mạch hoạt đông với tần số
bằng 0.
Khối CC mới thiết kế sẽ được đặt ở nf2_top, top design của chuyển mạch.
Khi nhận được yêu cầu chuyển sang trạng thai năng lượng thấp gửi từ bô điều khiển,
phần mềm sẽ xử lý gói tin và chuyển yêu cầu đến CC thông qua PCI bus. Nó sẽ điều
khiển cac bô BUFGMUX chọn hoặc không chọn đường dây clock của cac khối cần
điều khiển. Mặc định ban đầu là cho phép cac clock hoạt đông (tín hiệu ở chân
“chọn tín hiệu” S của BUFGMUX ở mức thấp).
NETFPGA GROUP-KSTN-ĐTVT-K52 84
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
Hình 5.35 Sơ đồ vị trí lý tưởng của CC trong nf2_top
Sơ đồ khối như trên là lý tưởng, có thể ap dụng trong sản xuất chuyển mạch
công nghiệp. Việc nghiên cứu với NetFPGA trên môi trường Linux nảy sinh vấn đề
như sau:
- Thứ nhất, ngắt clock của khối nf2_core đồng nghĩa với ngắt clock của khối
driver giao tiếp giữa NetFPGA với hệ điều hành thông qua PCI Bus. Khiến hệ
thống bị treo do không thể liên lạc được với NetFPGA. Đây là khó khăn chưa thể
giải quyết vì vậy ta tạm thời chỉ ngắt port mà chưa đưa chuyển mạch về trạng thái
nghỉ toàn bộ (ngắt cả phần lõi).
- Ngoài ra, việc sửa lại project đã có sẵn để tạo môt khối vừa có thể điêu khiển
được cac bô BufMux trong nf2_top vừa có thể giao tiếp với phần mềm chạy trên hệ
điều hành Linux thông qua PCI bus là việc rất khó khăn. Nó đòi hỏi cần có môt thời
NETFPGA GROUP-KSTN-ĐTVT-K52 85
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
gian tìm hiểu sâu sắc toàn bô project được nhóm nghiên cứu của trường đại học
Stanford phat triển từ năm 2007. Điều này dẫn đến việc tac giả sử dụng cach thông
thường là đặt khối CC trong khối user data path của nf2_core nhằm tận dụng
những tiện ích có sẵn như trong hình vẽ dưới đây:
Hình 5.36 Sơ đồ khối CC trong user data path
5.2.3 Ghép nối với các khối khác trong User data path
Khi được đặt trong khối udp, CC được ghép nối với hai khối Output Port
Lookup và Output Queue gần giống như trong mô hình pipeline của cac module đã
trình bày ở chương hai (Hình 2.15). Đây là lý do tại sao việc triển khai khối CC bên
ngoài user data path (không mô hình pipeline) là khó khăn.
NETFPGA GROUP-KSTN-ĐTVT-K52 86
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
Việc mô tả ghép nối tổng quat giữa cac khối trong user data path đã được
trình bày trong mục 2.2.4.2. Hình 5.37 dưới đây sẽ miêu tả cụ thể khối thành phần
trong khối user data path cũng như kết nối của chúng với khối CC.
Hình 5.37 Sơ đồ ghép nối CC với các khối khác trong user data path
Ở đây, đường dữ liệu thay vì được nối với cả hai khối Output Port Lookup và
Output Queue như mô hình pipeline trên Hình 2.15, mà sẽ được nối thẳng tới khối
buffer trong nf2_top như trên Hình 5.36. Cụ thể ta, cần sửa lại file user_data_path.v,
đồng thời thêm khối mới vào trong file quản lý nf2_core.xml:
...
<nf:group name="udp">
<nf:instance name="in_arb" base="0x02000100"/>
<nf:instance name="vlan_remover" />
<nf:instance name="header_parser" />
<nf:instance name="watchdog" base="0x02001400"/>
<nf:instance name="match_arbiter" />
<nf:instance name="OpenFlow_output_port_lookup"
...
NETFPGA GROUP-KSTN-ĐTVT-K52 87
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
5.2.4 Thiết kế khối clock controller
Thiết kế của khối Clock controller gồm có:
- Khối điều khiển thanh ghi generic_regs: Khối này có kết nối với cac khối
điều khiển thanh ghi của cac khối khac tạo thành môt pipeline . generic_regs
được xây dựng dựa trên cơ sở khối generic_regs có sẵn được tìm thấy ở thư
mục netfpga/lib/Verilog/core/utils/generic_regs/src.
- Thanh ghi trạng thai key 16-bit ghi nhận của cac clock. Bốn bit đầu cho bốn
clock của cac khối DCM1 đến DCM4. Bit thứ 8 cho clock của khối
nf2_core. Cac bit còn lại sẽ sử dụng cho cac tac vụ khac sau này.
- Ngoài ra còn có thanh ghi đệm key_wire để truyền dữ liệu giữa khối điều
khiển thanh ghi generic_regs và thanh ghi trạng thai key.
Hình 5.38 Sơ đồ khối thiết kế của CC
Từ sơ đồ khối trên, tac giả tạo ra file clock_controller.v lưu module CC với
đầu ra và đầu vào như sau:
// --- Register interface
input reg_req_in,
input reg_ack_in,
input reg_rd_wr_L_in,
NETFPGA GROUP-KSTN-ĐTVT-K52 88
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
input [`UDP_REG_ADDR_WIDTH-1:0] reg_addr_in,
input [`CPCI_NF2_DATA_WIDTH-1:0] reg_data_in,
input [UDP_REG_SRC_WIDTH-1:0] reg_src_in,
output reg_req_out,
output reg_ack_out,
output reg_rd_wr_L_out,
output [`UDP_REG_ADDR_WIDTH-1:0] reg_addr_out,
output [`CPCI_NF2_DATA_WIDTH-1:0] reg_data_out,
output [UDP_REG_SRC_WIDTH-1:0] reg_src_out,
// --- Misc
input clk,
input reset,
// --- Clock control
output [15:0] esrc_en,
input esrc_clk
Thanh ghi trạng thai key ở phần cứng sẽ được mô tả rõ ràng trong file mô tả
clock_controller.xml:
<nf:registers>
<nf:register>
<nf:name>key</nf:name>
<nf:description>The Key value used by the Clock
Controller Module</nf:description>
<nf:type>generic_software32</nf:type>
</nf:register>
</nf:registers>
Cuối cùng, tac giả tiến hành biên dịch lại dựa an bằng câu lệnh sau:
cd ~/netfpga/projects/OpenFlow_switch/synth/
NETFPGA GROUP-KSTN-ĐTVT-K52 89
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
time make
Sau khi biên dịch lại dự an, tac giả có file cấu hình OpenFlow_switch.bit cho
NetFPGA ở ~/netfpga/bitfiles/. Ngoài ra, còn có file tiêu đề
reg_defines_OpenFlow_switch.h dùng cho việc viết ứng dụng phần mềm ở địa chỉ
~/netfpga/OpenFlow_switch/lib/C/.
5.3 Thiết kế phần mềm
Để thực hiện việc tiết kiệm năng lượng trên cac NetFPGA dựa trên việc tắt
bật và thay đổi trạng thai của port và bô chuyển mạch, tac giả đã nghiên cứu và triển
khai cac vấn đề sau :
o Cach thức nhận và xử lý lệnh điều khiển từ bô điều khiển tới bô chuyển
mạch OpenFlow bao gồm môt may tính Linux có cài đặt card NetFPGA.
o Thêm cac hàm xử lý gói tin mới và gửi kết quả xuống phần cứng
NetFPGA.
5.3.1 Truyền, nhận va xử lý bản tin từ bô điều khiển
Cac gói tin điều khiển từ bô điều khiển sẽ được gửi xuống cổng Ethernet
(cổng eth0) của may tính chứa card NetFPGA như Hình 5.39[7] dưới đây:
NETFPGA GROUP-KSTN-ĐTVT-K52 90
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
Hình 5.39 Sơ đồ mạng OpenFlow đơn giản
Cac port trên NetFPGA được dùng để gửi, nhận, chuyển tiếp… cac gói tin
trong mạng OpenFlow theo cac flow entry và cac action được định nghĩa trong flow
table chứ không giao tiếp với bô điều khiển. Việc nhận và xử lý gói tin điều khiển
hoàn toàn phụ thuôc vào cổng Ethernet và phần mềm trên may tính chứa NetFPGA.
NETFPGA GROUP-KSTN-ĐTVT-K52 91
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
Hình 5.40 Sơ đồ hệ thống bô điều khiển va bô chuyển mạch OpenFlow
Hình 5.40[9] mô tả sơ đồ cac khối trong việc gửi, nhận và xử lý gói tin, điều
khiển phần cứng NetFPGA. Gói tin từ bô điều khiển gửi xuống sẽ được xử lý trong
phần OpenFlow software. Sau đó, OpenFlow software sẽ thực hiên việc bóc tach bản
tin và gửi lệnh xuống NetFPGA thông qua khối DRIVER.
5.3.2 Lam việc với phần mềm của chuyển mạch OpenFlow
Để thực hiện việc viết thêm cac hàm xử lý gói tin, tac giả đã tìm hiểu cấu trúc
cac file và thư mục trong root/openflow/. Đây chính là thư mục thực hiện nhiệm vụ
của khối Openflow software ở trên.
Cấu trúc thư mục openflow trong đường dẫn root/openflow như sau:
<openflow> `
NETFPGA GROUP-KSTN-ĐTVT-K52 92
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
|-- include | `-- openflow |-- lib |-- udatapath `-- hw-lib `-- nf2
Để thực hiện việc thay đổi, trước tiên chúng ta cần sửa cac file cài đặt sau:
<openflow> ` |-- acinclude.m4 |-- Makefile.am `-- udatapath `-- automake.mk
Thêm cac hàm xử lý gói tin mới vào cac file sau trong thư mục udatapath với
cấu trúc thư mục như sau:
<openflow> `-- udatapath ` |-- chain.c |-- datapath.c |-- of_ext_msg.c |-- udatapath.c `-- some header files
Thay đổi cac file trong thư mục nf2 với cấu trúc đường dẫn như sau:
<openflow> `-- hw-lib `-- nf2
Vai trò chính của thư viện nf2 đó là:
Chứa cac bảng nf2, biểu diễn của cac bảng trên phần cứng NetFPGA. Cac bảng này tương đương với cac bảng trong không gian người dùng. Đây chính là giao diện để giao tiếp với phần cứng NetFPGA.
NETFPGA GROUP-KSTN-ĐTVT-K52 93
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
Làm sang tỏ sự liên hệ giữa NetFPGA bitmaps và cac cấu trúc trong phần mềm.
Giao tiếp với driver của NetFPGA trong không gian kernel.
5.3.3 Xây dựng va triển khai các chức năng mới
Trong giới hạn đề tài xây dựng bô chuyển mạch OpenFlow trên nền tảng phần
cứng NetFPGA, tac giả tập trung vào việc gửi nhận và xử lý cac gói tin
OFPT_PORT_MOD và OFPT_SWITCH_MOD như đã trình bày trong phần 4.4.4.
Cac hàm xử lý gói tin trong Bảng 5.10 dưới đây được thêm vào file
datapath.c trong thư mục root/OpenFlow/udatapath để thực hiện việc xử lý cac gói
tin.
Bảng 5.10 Các ham xử lý gói tin
Ham Chức năng
turn_on_port() Bật port
turn_off_port() Tắt port
change_link_rate(
)
Thay đổi gia trị clock của port theo tốc đô link từng thời
điểm
turn_on_switch() Bật switch
turn_off_switch() Tắt switch
sleep_switch() Chuyển switch về chế đô sleep
Cac hàm trong được thêm vào file nf2_drv.c trong thư mục
root/OpenFlow/hw-lib/nf2 để điều khiển phần cứng NetFPGA.
NETFPGA GROUP-KSTN-ĐTVT-K52 94
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
Bảng 5.11 Các ham điều khiển phần cứng NetFPGA
Ham Chức năng
nf2_turn_on_port()
Ghi gia trị “0” vào 1 trong 8 bit đầu của thanh ghi
CLOCK_CONTROLLER_KEY_REG để bật TX
và RX của 1 trong 4 port.
nf2_turn_off_port()
Ghi gia trị “1” vào 1 trong 8 bit đầu của thanh ghi
CLOCK_CONTROLLER_KEY_REG để tắt TX
và RX của 1 trong 4 port.
nf2_change_link_rate()
Ghi gia trị 01,10,11 tương ứng với cac gia trị
10Mbps, 100Mbps và 1Gbps vào bit thứ 9 và 10
của thanh ghi để thay đổi gia trị clock của port theo
tốc đô link từng thời điểm.
nf2_turn_on_switch()
Ghi gia trị “00” vào bit 11 và 12 của thanh ghi
CLOCK_CONTROLLER_KEY_REG để bật
switch.
nf2_turn_off_switch()
Ghi gia trị “11” vào bit 11 và 12 của thanh ghi
CLOCK_CONTROLLER_KEY_REG để tắt
switch.
nf2_sleep_switch()
Ghi gia trị “01” vào bit 11 và 12 của thanh ghi
CLOCK_CONTROLLER_KEY_REG để tắt
switch.
Thêm thư viện vào file datapath.c trong thư mục root/OpenFlow/udatapath:
#include ../hw-lib/nf2/nf2.h
#include ../hw-lib/nf2/nf2_drv.h
Biên dịch lại code và cài đặt lại gói OpenFlow cho may tính:
$ cd /root/OpenFlow
$ ./configure --enable-hw-tables=nf2
NETFPGA GROUP-KSTN-ĐTVT-K52 95
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 5ƯƠ
$ make
$ make install
5.4 Kết luận chương
Chương này đã đưa ra cac giải phap giúp tiết kiệm năng lượng trong cac trung
tâm dữ liệu trên nền tảng mạng OpenFlow đó là thiết kế cac khối chức năng mới
trong phần cứng NetFPGA để tạo nên cac chuyển mạch thông minh có khả năng tự
tiết kiệm năng lượng. Việc thử nghiệm kết quả sẽ được trình bày ở chương tiếp theo
của đồ an này.
NETFPGA GROUP-KSTN-ĐTVT-K52 96
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 6ƯƠ
Chương 6. Thực hiện đo đạc va kết quả
Trong chương này, tac giả sẽ đanh gia cac kết quả đạt được thông qua việc đo
đạc mức năng lượng trước và sau khi sử dụng cac giải phap vừa nêu.
Để thiết lập môt testbed thực tế, trước hết chúng ta tìm hiểu cac thành phần
quan trọng là bô điều khiển, chuyển mạch OpenFlow, cac host (hoặc may tính ca
nhân) kết nối tới cac chuyển mạch.
Do việc trển khai bản tin điều khiển tắt chuyển mạch từ bô điều khiển xuống
OSC hoặc switch chưa thực hiện được trên thực tế nên phần này chỉ tập trung vào
việc ngắt kết nối giữa cac chuyển mạch (hay ngắt cac port) sử dụng bản tin
PORT_MOD có sẵn trong phiên bản OpenFlow 1.0.0.
6.1 Cơ sở hạ tầng thiết lập testbed
Hình 6.41 dưới đây mô tả sơ đồ testbed đơn giản ban đầu gồm môt bô điều
khiển (controller), môt chuyển mạch (switch) và bốn host dùng để kiểm tra những
giải phap cac chương trước đã đề ra.
Hình 6.41 Sơ đồ testbed ban đầu
NETFPGA GROUP-KSTN-ĐTVT-K52 97
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 6ƯƠ
Việc tìm hiểu chuyển mạch OpenFlow và bô điều khiển NOX controller đã
được trình bày tương đối rõ ràng trong Chương 3 của đồ an nên phần này chỉ tập
trung chủ yếu vào thành phần còn lại là cac host nối với bô chuyển mạch.
Với trường hợp có sẵn NetFPGA, chúng ta có thể cấu hình phần cứng này
thành môt NIC 4-port đóng vai trò như 4 host.
Reference Network Interface Card project
Reference NIC project là môt trong những project mẫu dùng cho người mới
tìm hiểu về NetFPGA học cach tìm hiểu về nó. Với project này, chúng ta có thể cấu
hình NetFPGA card thành môt card mạng 4 cổng đôc lập. Trong một số trường hợp
có thể coi là 4 host riêng biệt. Cac cổng này có thể gửi nhận bản tin bằng cach sử
dụng cac hàm có sẵn trong thư viện NetFPGA.
Cac bước thực hiện như sau (mặc định thư mục cài đặt netfpga là ~/netfpga:
Cấu hình cho NetFPGA thành NIC card
nf_download ~/netfpga/bitfiles/reference_nic.bit
Cấu hình địa chỉ Ip cho cac cổng mạng. Dưới đây là ví dụ:
/sbin/ifconfig nf2c0 192.168.1.100
/sbin/ifconfig nf2c1 192.168.1.101
/sbin/ifconfig nf2c2 192.168.1.102
/sbin/ifconfig nf2c3 192.168.1.103
Sử dụng công cụ counterdump để kiểm tra sự truyền nhận gói tin của cac
port trên NetFPGA. Công cụ này nằm ở thư mục sw trong reference_nic
project.
NETFPGA GROUP-KSTN-ĐTVT-K52 98
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 6ƯƠ
cd ~/netfpga/projects/reference_nic/sw/
make
Sau khi build thành công, công cụ đơn giản này sẽ đọc thanh ghi đếm gói tin
(phần cứng) và ghi nó lên trên terminal. Để sử dụng, gõ lệnh sau:
./counterdump
Công cụ sẽ in ra màn hình như sau:
Found net device: nf2c0Num pkts received on port 0: 0Num pkts dropped (rx queue 0 full): 0Num pkts dropped (bad fcs q 0): 0Num bytes received on port 0: 0Num pkts sent from port 0: 0Num bytes sent from port 0: 0
Num pkts received on port 1: 0Num pkts dropped (rx queue 1 full): 0Num pkts dropped (bad fcs q 1): 0Num bytes received on port 1: 0Num pkts sent from port 1: 0Num bytes sent from port 1: 0
Num pkts received on port 2: 0Num pkts dropped (rx queue 2 full): 0Num pkts dropped (bad fcs q 2): 0Num bytes received on port 2: 0Num pkts sent from port 2: 0Num bytes sent from port 2: 0
Num pkts received on port 3: 0Num pkts dropped (rx queue 3 full): 0Num pkts dropped (bad fcs q 3): 0Num bytes received on port 3: 0Num pkts sent from port 3: 0Num bytes sent from port 3: 0
NETFPGA GROUP-KSTN-ĐTVT-K52 99
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 6ƯƠ
Ngoài counterdump cac nhà phat triển cũng cung cấp thêm send_pkts đề gửi
gói tin qua môt cổng mạng bất kỳ. Công cụ này trong phiên bản mới nhất
3.0.0 đặt ở thư mục ~/netfpga/lib/C/tools/send_pkts.
cd ~/netfpga/lib/C/tools/send_pkts
make
Muốn gửi 10 gói tin, mỗi gói có đô dài 100 byte từ cổng mạng nf2c0 (cổng
gần mainboard may tính nhất) ta sử dụng câu lệnh sau:
sudo ./send_pkts -i nf2c0 -s 10 -l 100
Công cụ sẽ tự đông chèn header cũng như 4 byte kiểm tra mã CRC vào gói
tin và gửi đi qua cổng mạng nf2c0.
6.2 Bô điều khiển chuyển mạch
6.2.1 Thiết lập hệ thống
Sau khi thực hiện bô điều khiển chuyển mạch (OSC) thành công, tac giả thiết
lập môt hệ thống thực nghiệm bao gồm môt may tính đóng vai trò Controller, môt
Switch được xây dựng trên môt may tính có card NetFPGA và thêm môt may tính có
NIC 4 cổng (NIC card 4 cổng này đôc lập truyền nhận với nhau, đóng vai trò như là
4 host hoặc chuyển mạch khac).
Hình 6.42 Sơ đồ hệ thống Testbed cho Hình 6.43 Hệ thống Testbed thực tế cho
NETFPGA GROUP-KSTN-ĐTVT-K52 100
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 6ƯƠ
OSC OSC
Hình 6.42 và Hình 6.43 mô tả hệ thống testbed cho bô OSC.
Bô điều khiển (controller) là môt may tính chạy phần mềm NOX destiny
cho phiên bản OpenFlow 1.0.0, trên nền tảng hệ điều hành ubuntu 10.04.
Chuyển mạch (Switch) là may tính có NetFPGA card được cấu hình
thành OpenFlow switch phiên bản 2.1.0, trên nền tảng hệ điều hành
CentOS 5.8.
PC có NIC 4 cổng là may tính có NetFPGA card được cấu hình thành
Reference NIC phiên bản 3.0.0, trên nền tảng hệ điều hành CentOS 5.8.
6.2.2 Test hệ thống
- Chạy bô điều khiển NOX ở địa chỉ 192.168.1.17
./nox_core –v I ptcp:6633 pyswitch
- Chạy chuyển mạch OpenFlow và kết nối với bô điều khiển
./of_start 192.168.1.17:6633
- Add cac luông (flow) từ port 2 sang 4 vào flow table của OpenFlow switch
sử dụng lệnh dpctl
dpctl add-flow unix:/var/run/test
in_port:2,idle_timeout=300,actions=output:4
dpctl add-flow unix:/var/run/test
in_port:4,idle_timeout=300,actions=output:2
- Chạy OSC và kết nối với bô điều khiển.
- Gửi bản tin từ host 2 (nf2c1 của NIC) qua giao diện ethernet. Nếu OSC
không ngắt kết nối ở port 2 hoặc 4 thì bản tin này sẽ đến được port 2 (tức
NETFPGA GROUP-KSTN-ĐTVT-K52 101
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 6ƯƠ
nf2c1) của chuyển mạch và sẽ được chuyển đến host 4 qua port 4 (tức nf2c3)
của chuyển mạch.
sudo ./send_pkts -i nf2c1 -s 10 -l 1000
- Sử dụng chương trình counterdump để kiểm tra lại số lượng gói tin đi qua
cac port này.
./counterdump
- Cấu hình bô điều khiển ở chế đô spanning_tree để gửi bản tin PORT_MOD
xuống OSC yêu cầu tắt cac port và thực hiện lại cac bước trên nhằm kiểm tra
xem có gói tin truyền nhận qua chuyển mạch OpenFlow hay không.
6.2.3 Kết quả
Tiến hành kiểm tra, ta có kết quả như sau:
- Số gói tin gửi nhận thu về ở 4 host trong trường hợp host 2 (nf2c1) gửi host 4
(nf2c3) không ngắt kết nối giữa 2 chuyển mạch:
[root@dhcppc17 sw]# ./counterdumpFound net device: nf2c0Num pkts received on port 0: 0Num pkts dropped (rx queue 0 full): 0Num pkts dropped (bad fcs q 0): 0Num bytes received on port 0: 0Num pkts sent from port 0: 0Num bytes sent from port 0: 0
Num pkts received on port 1: 0Num pkts dropped (rx queue 1 full): 0Num pkts dropped (bad fcs q 1): 0Num bytes received on port 1: 0Num pkts sent from port 1: 10Num bytes sent from port 1: 1000
Num pkts received on port 2: 0Num pkts dropped (rx queue 2 full): 0Num pkts dropped (bad fcs q 2): 0
NETFPGA GROUP-KSTN-ĐTVT-K52 102
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 6ƯƠ
Num bytes received on port 2: 0Num pkts sent from port 2: 0Num bytes sent from port 2: 0
Num pkts received on port 3: 10Num pkts dropped (rx queue 3 full): 0Num pkts dropped (bad fcs q 3): 0Num bytes received on port 3: 1000Num pkts sent from port 3: 0Num bytes sent from port 3: 0
- Số gói tin gửi nhận thu về ở 4 host trong trường hợp host 2 (nf2c1) gửi host 4
(nf2c3) bô điều khiển gửi bản tin PORT_MOD ngắt kết nối giữa 2 chuyển
mạch:
[root@dhcppc17 sw]# ./counterdumpFound net device: nf2c0Num pkts received on port 0: 0Num pkts dropped (rx queue 0 full): 0Num pkts dropped (bad fcs q 0): 0Num bytes received on port 0: 0Num pkts sent from port 0: 0Num bytes sent from port 0: 0
Num pkts received on port 1: 0Num pkts dropped (rx queue 1 full): 0Num pkts dropped (bad fcs q 1): 0Num bytes received on port 1: 0Num pkts sent from port 1: 20Num bytes sent from port 1: 2000
Num pkts received on port 2: 0Num pkts dropped (rx queue 2 full): 0Num pkts dropped (bad fcs q 2): 0Num bytes received on port 2: 0Num pkts sent from port 2: 0Num bytes sent from port 2: 0
Num pkts received on port 3: 10Num pkts dropped (rx queue 3 full): 0Num pkts dropped (bad fcs q 3): 0Num bytes received on port 3: 1000
NETFPGA GROUP-KSTN-ĐTVT-K52 103
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 6ƯƠ
Num pkts sent from port 3: 0Num bytes sent from port 3: 0
- Ta thấy sau 10 gói tin tiếp theo không thể đến được host 4 như yêu câu. Như
vậy OSC thành công trong việc ngắt kết nối giữa hai chuyển mạch.
Đo điện lượng tiêu thụ trên OSC bằng cach xac định điện ap và dòng điện đi
qua OSC, tac giả đã thu được kết quả như Bảng 6.12 và Bảng 6.13 dưới đây:
Bảng 6.12 Bảng năng lượng tiêu thụ của OSC khi không có kết nối nao bị ngắt
(relay không hoạt đông)
Lần
1
Lần
2
Lần
3
Lần
4
Lần
5
Trung
bình
Dòng điện (mA) 139 138 137 139 134 137
Điện áp (V) 5.12 5.12 5.12 5.13 5.12 5.12
Năng lượng tiêu thụ
(mW)
703
Bảng 6.13 Bảng năng lượng tiêu thụ của OSC theo số lượng kết nối bị ngắt (số
lượng relay hoạt đông)
Số lượng kết nối bị ngắt 0 1 2 3 4
Dòng điện (mA) 139 197 251 310 370
Điện áp (V) 5.13 5.12 5.12 5.12 5.12
Năng lượng tiêu thụ (mW) 713 1009 1285 1587 1894
Từ những kết quả thu được, chúng ta có những kết luận sau:
- Khi không có port nào được tăt, OSC chạy và tốn khoảng 700mW.
- Tổng công suất tiêu thụ trên OSC là khoảng 700 + 4 * 300 = 1900mW. Năng
lượng tiết kiệm được tăng theo số lượng kết nối bị ngắt.
NETFPGA GROUP-KSTN-ĐTVT-K52 104
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 6ƯƠ
- Với mỗi port được tắt, điện năng tiêu thụ trên OSC được tăng thêm 300mW
nhưng điện năng tiêu thụ trên NetFPGA lại giảm đi 1W[11] và do đó, chúng
ta có năng lượng tiết kiệm được 1000 – 300 = 700mW/port.
- Ngoài ra, tac giả đã tính toan được thời gian đap ứng của hệ thống bắt đầu
tính từ lúc nhận bản tin cho đến khi gửi bản tin là khoảng 5ms (bằng cach sử
dụng cac timer thời gian của vi điều khiển).
6.3 Chuyển mạch OpenFlow có chức năng tiết kiệm năng lượng
6.3.1 Thiết lập hệ thống
Với bô chuyển mạch OpenFlow thiết kế mới này, tac giả thiết lập môt hệ
thống thực nghiệm bao gồm môt may tính làm controller và môt may tính có
NetFPGA làm Switch và môt may tính có card mạng NIC 4 cổng (NIC 4 cổng này
đóng vai trò như là 4 host).
Hình 6.44 Sơ đồ hệ thống testbed
cho chuyển mạch OpenFlow mới
Hình 6.45 Hệ thống testbed chuyển mạch
OpenFlow trong thực tế
Hình 6.44 và Hình 6.45 mô tả hệ thống testbed cho chuyển mạch OpenFlow với bô
tiết kiệm năng lượng mới.
Bô điều khiển (controller) là môt may tính chạy phần mềm NOX destiny cho
phiên bản OpenFlow 1.0.0, trên nền tảng hệ điều hành ubuntu 10.04
Chuyển mạch (Switch) là may tính có NetFPGA card được cấu hình thành
OpenFlow switch phiên bản 2.1.0, trên nền tảng hệ điều hành CentOS 5.8
NETFPGA GROUP-KSTN-ĐTVT-K52 105
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 6ƯƠ
PC có NIC 4 cổng là may tính có NetFPGA card được cấu hình thành
Reference NIC phiên bản 3.0.0, trên nền tảng hệ điều hành CentOS 5.8
Hình 6.46 Sơ đồ kết nối chuyển mạch - NIC cho hệ thống testbed
6.3.2 Test hệ thống
Việc test thử phương an này tương tự với phương an sử dụng OSC, tuy nhiên
khi gửi bản tin PORT_MOD thay vì gửi xuống OSC ta gửi xuống chuyển mạch
OpenFlow để xử lý.
6.3.3 Kết quả
Tiến hành kiểm tra ta có kết quả như sau:
- Kết quả kiểm tra số lượng gói tin nhận phat giống với phương an sử dụng
OSC. Chuyển mạch có khả năng nhận bản tin gửi từ bô điều khiển xuống và
đóng ngắt cac port tương ứng.
- Do thời gian và thiết bị có giới hạn nhóm chưa thể có môt bài test nào cụ thể
nhằm tìm ra lượng điện năng tiêu thụ thực tế trong chuyển mạch OpenFlow
là bao nhiêu mà chỉ đanh gia được đã tạo ra môt phần cứng đạt yêu cầu đề ra.
6.4 Kết luận chương
Như vậy, kết thúc chương này, chúng ta đã lần lượt thử nghiệm cac giải phap
phần cứng trên nền môt mạng OpenFlow cụ thể. Qua việc thử nghiệm, cả hai
phương an đã thực sự thực hiện được cac yêu cầu đề ra của đồ an. Về phương diện lý
thuyết, phương an thứ hai - xây dựng khối phần cứng mới trên chuyển mạch
NETFPGA GROUP-KSTN-ĐTVT-K52 106
Đ ÁN T T NGHI PỒ Ố Ệ CH NG 6ƯƠ
OpenFlow tỏ ra ưu việt hơn trong việc tiết kiệm năng lượng. Song trên thực tế lại
chưa có được môt đanh gia nào về mức năng lượng tiêu thụ khi thực hiện ap dụng
chuyển mạch OpenFlow mới này. Việc đo đạc năng lượng tiêu thụ sẽ được nhóm
hoàn thiện trong tương lai.
NETFPGA GROUP-KSTN-ĐTVT-K52 107
Đ ÁN T T NGHI PỒ Ố Ệ 2012
Kết luận va hướng phát triển của đề tai
Thông qua đồ an, ta đã lần lượt triển khai hai giải phap
phần cứng hướng đến chuyển mạch OpenFlow nhằm tiết kiệm
năng lượng trong trung tâm dữ liệu. Những giải phap này phần
nào làm giảm được điện năng tiêu thụ trong trung tâm dữ liệu.
Đồng thời, thông qua đồ an, cac tac giả cũng tạo ra được cac
bản tin điều khiển mới, cũng như xây dựng trên thực tế được
môt mô hình hoàn thiện dùng để thử nghiệm những nghiên cứu
sâu hơn về phần cứng.
Tuy nhiên, trong đồ an này tac giả vẫn còn môt số vấn đề
chưa giải quyết được, đó là chưa đưa ra được con số cụ thể về
mức năng lượng tiêu thụ trên chuyển mạch OpenFlow khi thêm
chức năng tiết kiệm năng lượng; và chưa thể đưa chuyển mạch
này về trạng thai “nghỉ” toàn bô (mà chỉ có thể ngắt được từng
port môt mà phần lõi vẫn hoạt đông).
Trong thời gian sắp tới, tac giả sẽ nghiên cứu cach đưa
chuyển mạch OpenFlow về trạng thai “nghỉ” toàn bô, chuyển
tần số hoạt đông của chuyển mạch theo yêu cầu và thực hiện
đanh gia môt cach đầy đủ hơn về mức năng lượng tiêu thụ của
chuyển mạch OpenFlow mới này. Điều này chắc chắn sẽ giúp
cac nhà điều hành trung tâm dữ liệu tiết kiệm được lượng năng
lượng không nhỏ khi vận hành.
NETFPGA GROUP-KSTN-ĐTVT-K52 108
Đ ÁN T T NGHI PỒ Ố Ệ 2012
TÀI LIỆU THAM KHẢO
[1] Truong Thu Huong, Pham Ngoc Nam, Nguyen Huu Thanh, Daniel Schlosser,
Michael Jarschel, Rastin Pries, "ECODANE – Reducing Energy Consumption
in Data Center Networks based on Traffic Engineering" (poster), in the
Proceedings of 11th Würzburg Workshop on IP: Joint ITG and Euro-NF
Workshop "Visions of Future Generation Networks" (EuroView2011), August
1st - 2nd 2011, Würzburg, Germany
[2] Priya Mahadevan, Puneet Sharma, Sujata Banerjee, Parthasarathy
Ranganathan, “Energy Aware Network Operations”, HP Labs, 2009.
[3] ONF White Paper, www.opennetworking.org, lần truy cập cuối 30/05/2012.
[4] Jad Naous, David Erickson, G. Adam Covington, Guido Appenzeller, Nick
McKeown, “Implementing an OpenFlow switch on the NetFPGA platform”,
ANCS, San Jose, CA, USA, November 6–7, 2008.
[5] Phạm Ngọc Nam, Slide bài giảng thiết kế với vi mạch khả trình.
[6] Pong P.Chu, FPGA prototyping using Verilog examples, John Wiley & Sons,
2008.
[7] OpenFlow White Paper, www. OpenFlow .org/documents/ OpenFlow - wp -
latest . pdf , lần truy cập cuối 30/05/2012
[8] http://yuba.stanford.edu/foswiki/bin/view/OpenFlow/Deployment/HOWTO/
LabSetup truy cập lần cuối ngày 31/05/2012
[9] NetFPGA Gigabit Router, www.netfpga.org truy cập lần cuối ngày
31/05/2012
[10] http://www.OpenFlow.org truy cập lần cuối ngày 30/05/2012
[11] Vijay Sivaraman, Arun Vishwanath, Zhi Zhao, Craig Russell, “Profiling Per-
Packet and Per-Byte Energy Consumption in the NetFPGA Gigabit Router”,
IEEE, 2011
[12] http://vi.wikipedia.org/wiki/C%E1%BA%A5u_tr%C3%BAc_ARM truy cập
lần cuối ngày 31/05/2012
NETFPGA GROUP-KSTN-ĐTVT-K52 109
Đ ÁN T T NGHI PỒ Ố Ệ 2012
[13] Arm coxtex-m3 http://ti.com và http://ti.com/product/lm3s6965 truy cập lần
cuối ngày 30/05/2012
[14] IBM System Networking RackSwitch G8264 and RackSwitch G8264T,
http://www-03.ibm.com/systems/x/options/networking/bnt8264/index.html
[15] http://en.wikipedia.org/wiki/Ethernet_over_twisted_pair truy cập lần cuối
ngày 31/05/2012
[16] OpenFlow Specification, http://www.OpenFlow.org truy cập lần cuối ngày
30/05/2012
[17] http://lwip.wikia.com/wiki/LwIP_Wiki truy cập lần cuối ngày 31/05/2012
[18] http://www.noxrepo.org/ truy cập lần cuối ngày 30/05/2012
[19]B. Heller, S. Seetharaman, P. Mahadevan, Y. Yiakoumis, P. Sharma, S.
Banerjee, N. McKeown,“Elastic tree: Saving Energy in Data Center
Networks”,USENIX NSDI, April, 2010.
NETFPGA GROUP-KSTN-ĐTVT-K52 110
Đ ÁN T T NGHI PỒ Ố Ệ 2012
PHỤ LỤC
Phụ lục 1: Code OpenFlow.c
#include "lwip/debug.h"#include "lwip/stats.h"#include "httpd.h"#include "lwip/tcp.h"#include "fs.h"#include "OpenFlow.h"#include "inc/lm3s8962.h"#include "inc/hw_memmap.h"#include "inc/hw_types.h"#include "driverlib/gpio.h"#include "driverlib/ethernet.h"#include "driverlib/sysctl.h"#define ON 0x01#define OFF 0x00#include <string.h>
unsigned int unpackint8(unsigned char *buf){
return (buf[0]);}unsigned int unpackint16(unsigned char *buf){
return (buf[0]<<8 | buf [1]);}unsigned long unpackint32(unsigned char *buf){
return ((buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]);}static err_tofp_received(void *arg, struct tcp_pcb *pcb,struct pbuf *p, err_t err){
u8_t *state = (u8_t *)arg; u16_t len;unsigned char * buf ;err_t buf_err = 0;u8_t *ver;u8_t *type;u16_t *port_no;u8_t hw_addr[6];u32_t *config;u16_t *of_len;
NETFPGA GROUP-KSTN-ĐTVT-K52 111
Đ ÁN T T NGHI PỒ Ố Ệ 2012
int i;LWIP_UNUSED_ARG(err);if((err == ERR_OK ) && ( p != NULL )){
len = p->tot_len; buf = p->payload; tcp_recved(pcb, len);//Tach lay gia tri version va type cua ban tin*ver = unpackint8(buf);buf +=1;*type = unpackint8(buf);if(*type == OFPT_HELLO){
RIT128x96x4Enable(1000000); RIT128x96x4StringDraw("OFPT_HELLO ", 12, 56, 15);
RIT128x96x4StringDraw("Version 0x01", 12, 64, 15);RIT128x96x4Disable();
} else if(*type == OFPT_PORT_MOD){
RIT128x96x4Enable(1000000); RIT128x96x4StringDraw("OFPT_PORT_MOD", 12, 56, 15);
RIT128x96x4StringDraw("Version 0x01", 12, 64, 15);RIT128x96x4Disable();//Tach lay gia tri port_no, hw_addr, config tu ban tin
OFPT_PORT_MODbuf+=7;*port_no = unpackint16(buf);buf+=2;for( i = 0;i<6;i++){
hw_addr[i] = unpackint8(buf);buf+=1;
}*config = unpackint32(buf);if(*config == OFPPC_PORT_DOWN){
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, ON);GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4, ON);
}else{ GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, OFF);
GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4, OFF);}
}
NETFPGA GROUP-KSTN-ĐTVT-K52 112
Đ ÁN T T NGHI PỒ Ố Ệ 2012
else{
RIT128x96x4Enable(1000000); RIT128x96x4StringDraw("I dont know ", 12, 56, 15);
RIT128x96x4Disable();}buf_err = pbuf_free(p); if(buf_err == ERR_MEM){
RIT128x96x4Enable(1000000); RIT128x96x4StringDraw("error while freeing buf ", 12,
80, 15);RIT128x96x4Disable();
}while(p->next){
pbuf_free(p->next);p=p->next;
}}
}static err_tofp_connected(void *arg, struct tcp_pcb *pcb, err_t err){
struct ofp_header *oh;LWIP_UNUSED_ARG(arg);oh = (struct ofp_header *)mem_malloc(sizeof(struct ofp_header));if (oh == NULL){
return ERR_MEM;}oh->version = OFP_VERSION;oh->type = OFPT_HELLO;oh->length = 8;oh->xid = 0;if (err != ERR_OK){
RIT128x96x4Enable(1000000); RIT128x96x4StringDraw("Can't connect to host", 12, 48, 15);
RIT128x96x4Disable();}else{
RIT128x96x4Enable(1000000); RIT128x96x4StringDraw("OK connected", 12, 48, 15);
NETFPGA GROUP-KSTN-ĐTVT-K52 113
Đ ÁN T T NGHI PỒ Ố Ệ 2012
RIT128x96x4Disable();tcp_write(pcb, oh,8,1);tcp_output(pcb);tcp_recv(pcb, ofp_received);
}
return err;}void ofp_err(void *arg, err_t err) {
mem_free(arg); } void ofp_end(struct tcp_pcb *pcb, u8_t *state) {
tcp_err(pcb, NULL); tcp_recv(pcb, NULL); tcp_sent(pcb, NULL); tcp_poll(pcb, NULL, 0); mem_free(state);
} err_t ofp_poll_close(void *arg, struct tcp_pcb *pcb) {
u8_t *state = (u8_t *)arg; struct ofp_header *oh;
oh = (struct ofp_header *)mem_malloc(sizeof(struct ofp_header));if (oh == NULL){
return ERR_MEM;}oh->version = OFP_VERSION;oh->type = OFPT_HELLO;oh->length = 8;oh->xid = 0;tcp_write(pcb, oh,8,1);tcp_output(pcb);return ERR_OK;
} err_t ofp_connect(void) {
u8_t *state; err_t err; struct tcp_pcb *pcb; struct ip_addr ipaddr; IP4_ADDR(&ipaddr, 192,168,1,34); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
NETFPGA GROUP-KSTN-ĐTVT-K52 114
Đ ÁN T T NGHI PỒ Ố Ệ 2012
GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_4|GPIO_PIN_5);GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_0|GPIO_PIN_2|GPIO_ PIN_3|
GPIO_PIN_1);if ((state = mem_malloc(1)) == NULL) return ERR_MEM; *state = 1; if ((pcb = tcp_new()) == NULL) {
mem_free(state); return ERR_MEM;
}
tcp_arg(pcb, state); tcp_err(pcb, ofp_err); tcp_recv(pcb, ofp_received); tcp_sent(pcb, NULL); tcp_poll(pcb, ofp_poll_close, 10); err = tcp_connect(pcb, &ipaddr, 6633, ofp_connected); if (err != ERR_OK) {
mem_free(state); tcp_abort(pcb);
} return err;
}
Phụ lục 2: Code clock_controller.v
///////////////////////////////////////////////////////////////////////////////// vim:set shiftwidth=3 softtabstop=3 expandtab:// $Id: clock_controller.v 2012-05-27 12:43:27 by Enbac119 $//// Module: clock_controller.v// Project: NF2.1// Description: Control the clocks of RX modules and nf2_core//// Caveats: Things will break for IPv4 packets with options... :-//////////////////////////////////////////////////////////////////////////////////`timescale 1ns/1psmodule clock_controller #( parameter DATA_WIDTH = 64, parameter CTRL_WIDTH = DATA_WIDTH/8, parameter UDP_REG_SRC_WIDTH = 2 )
NETFPGA GROUP-KSTN-ĐTVT-K52 115
Đ ÁN T T NGHI PỒ Ố Ệ 2012
( // --- data path interface
// --- Register interface input reg_req_in, input reg_ack_in, input reg_rd_wr_L_in, input [`UDP_REG_ADDR_WIDTH-1:0] reg_addr_in, input [`CPCI_NF2_DATA_WIDTH-1:0] reg_data_in, input [UDP_REG_SRC_WIDTH-1:0] reg_src_in,
output reg_req_out, output reg_ack_out, output reg_rd_wr_L_out, output [`UDP_REG_ADDR_WIDTH-1:0] reg_addr_out, output [`CPCI_NF2_DATA_WIDTH-1:0] reg_data_out, output [UDP_REG_SRC_WIDTH-1:0] reg_src_out,
// --- Misc input clk, input reset,
// Them vao output [15:0] esrc_en, input esrc_clk );
`LOG2_FUNC //--------------------- Internal Parameter---------------------
//---------------------- Wires and regs------------------------
wire [`CPCI_NF2_DATA_WIDTH-1:0] key;
//------------------------- Modules---------------------------- generic_regs #( .UDP_REG_SRC_WIDTH (UDP_REG_SRC_WIDTH), .TAG (`CLOCK_CONTROLLER_BLOCK_ADDR), .REG_ADDR_WIDTH (`CLOCK_CONTROLLER_REG_ADDR_WIDTH), // Width of block addresses .NUM_COUNTERS (0), // How many counters
NETFPGA GROUP-KSTN-ĐTVT-K52 116
Đ ÁN T T NGHI PỒ Ố Ệ 2012
.NUM_SOFTWARE_REGS (1), // How many sw regs .NUM_HARDWARE_REGS (0) // How many hw regs ) generic_regs ( .reg_req_in (reg_req_in), .reg_ack_in (reg_ack_in), .reg_rd_wr_L_in (reg_rd_wr_L_in), .reg_addr_in (reg_addr_in), .reg_data_in (reg_data_in), .reg_src_in (reg_src_in),
.reg_req_out (reg_req_out), .reg_ack_out (reg_ack_out), .reg_rd_wr_L_out (reg_rd_wr_L_out), .reg_addr_out (reg_addr_out), .reg_data_out (reg_data_out), .reg_src_out (reg_src_out),
// --- counters interface .counter_updates (), .counter_decrement(),
// --- SW regs interface .software_regs (key),
// --- HW regs interface .hardware_regs (),
.clk (clk), .reset (reset) );
//----------------------- Logic -----------------------------
reg [15:0] key_wire; always @(posedge esrc_clk) if (reset)
key_wire <= 15’b0; else
key_wire <= key[15:0]; assign esrc_en = key_wire;
endmodule // clock_controller
NETFPGA GROUP-KSTN-ĐTVT-K52 117