TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN VIỆN ĐIỆN ĐIỆN TỬ TỬ VI VIỄ ỄN THÔNG ====o0o====
ĐỒ N
TỐT NGHIỆP NGHIỆP ĐI HC ĐỀ TÀI:
NGHIÊN CỨ U GIẢI PHÁP PHẦN CỨ NG NG TIẾT KIỆM NĂNG LƯỢ NG 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 ng dẫn : TS TR Ầ N NGỌC LAN TS. TR Ầ N MINH TRUNG TS. NGUYỄN XUÂN DŨNG
H Ni 06-2012
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN VIỆN ĐIỆN ĐIỆN TỬ TỬ VI VIỄ ỄN THÔNG ====o0o====
ĐỒ N
TỐT NGHIỆP NGHIỆP ĐI HC ĐỀ TÀI:
NGHIÊN CỨ U GIẢI PHÁP PHẦN CỨ NG NG TIẾT KIỆM NĂNG LƯỢ NG 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 ng dẫn : TS TR Ầ N NGỌC LAN TS. TR Ầ N MINH TRUNG TS. NGUYỄN XUÂN DŨNG
Cn ộ phản iện
:
H Ni 06-2012
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN VIỆN ĐIỆN ĐIỆN TỬ TỬ VI VIỄ ỄN THÔNG ====o0o====
ĐỒ N
TỐT NGHIỆP NGHIỆP ĐI HC ĐỀ TÀI:
NGHIÊN CỨ U GIẢI PHÁP PHẦN CỨ NG NG TIẾT KIỆM NĂNG LƯỢ NG 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 ng dẫn : TS TR Ầ N NGỌC LAN TS. TR Ầ N MINH TRUNG TS. NGUYỄN XUÂN DŨNG
Cn ộ phản iện
:
H Ni 06-2012
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI --------------------------------------------------
CỘ NG HÒA XÃ XÃ HÔI CHỦ NGHĨA VIỆ VIỆT NAM
Độc l ậ p - T ự ự do - H ạnh phúc ---------------------------------
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ và tên sinh viên: Lê Thái Hưng
Khoá: K52 1.
Số hiệu sinh viên: 20072451
Nguyễ Nguyễn Duy Linh
Số hiệu sinh viên: 20071721
Lê Anh Văn
Số hiệu sinh viên: 20073425
Điện tử tử -- Viễ Viễn thông Viện: Điện
Điện tử tử -Viễ -Viễn thông Ngành: Điện
Đầu đề đồ đề đồ án:
………………………………………………..……………………………………………………………………… ……………………………………………………………………………………………………………..………...
ữ liệu ban đầu: 2. Các số liệu và d ữ ……………………………………..……………………………………………..……..…………………………… ………………………………………………………………………………………………………………………………. …..………………………..…………………………………………………………………………………….
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ẽ ): ………………………………………………………………………………………………………………………..….…… ……………………………………………………………………………………………………………………..……….… ……………………………………………………………………………………………………….
ẫn: : 5. H ọ tên giảng viên hướ ng ng d ẫ n
TS. Trầ Trần Ngọ Ngọc Lan TS. Trầ Trần Minh Trung TS. Nguyễn Nguyễn Xuân Dũng
6. Ngày giao nhi nhiệm vụ đồ án: ………………………………………………….…………… 7.
Ngày hoàn thành thành đồ án: ………………………………………………………………………..……… Ngày
Chủ nhiệm Bộ môn
Sinh viên đã hoàn thành và nộp đồ án tốt nghiệp ngày
tháng
năm
Giảng viên hướ ng ng dẫn
thng
năm
Cán b b phả phản biệ biện
BỘ GIÁO DỤC VÀ ĐÀO TẠ O TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI ---------------------------------------------------
BẢN NHẬN XÉT ĐỒ ÁN TỐT NGHIỆP Họ và tên sinh viên: .....................................................................Số hiệu sinh viên: ........................... Ngành: ..........................................................................................Khoá: ........................................... Giảng viên hướ ng dẫn: ..................................................................................................................... Cán bộ phản biện: .................................................................................................................................
1. Ni dung thiết k ế tốt nghiệp: ............................................................................................................................................................... ............................................................................................................................................................... ............................................................................................................................................................... ............................................................................................................................................................... ............................................................................................................................................................... ............................................................................................................................................................... ............................................................................................................................................................... ............................................................................................................................................................... ................
2. Nhận xét của cán b phản biện: ............................................................................................................................................................... ............................................................................................................................................................... ............................................................................................................................................................... ............................................................................................................................................................... ............................................................................................................................................................... ............................................................................................................................................................... ....................................
Ngày
thng
Cán b phản biện ( Ký, ghi rõ họ và tên )
năm
ĐỒ ÁN TỐT NGHIỆP
2012
LỜI NÓI ĐẦU Ngày nay, các trung tâm dữ liệu đóng vai trò quan trọ ng trong các hoạt động
thườ ng ngày của các 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ự phát 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 máy chủ trong mỗi trung tâm dữ liệu đang tăng lên rất nhanh chóng để đp ứ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 các thiết bị chuyển mạch để k ết nối các máy 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 các trung tâm d ữ liệu ngày càng tăng lên tỉ lệ vớ i kích
thướ c của cc trung tâm này. Và ài ton được đặ t ra cho các nhà nghiên c ứu và các nhà phát triển là làm sao có thể giảm t ối đa lượng điện năng tiêu thụ của các 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 tác 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 các b ộ chuyển mạch trong trung tâm dữ liệu và cũng đã chế tạo thành công các 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 phát triển, sản xuất đại trà các thiết bị mạng tiết kiệm năng lượng cũng như giúp cc 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 tác giả đã hoàn thành đồ án 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, tác giả đã gặt hi đượ 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 hiện và k ết quả nghiên cứu không tránh khỏi một vài sai sót nhỏ. Vì vậy, tác giả r ất mong nhận đượ c ý kiến đóng góp của các thầy cô giáo và bạn bè. Tác giả xin đượ c gửi lờ i cảm ơn chân thành, sâu sắ c tớ i:
Cô giáo TS. Tr ần Ngọc Lan
Thầy giáo TS. Tr ần Minh Trung
NETFPGA GROUP-KSTN-ĐTVT-K52
i
ĐỒ ÁN TỐT NGHIỆP
2012
Thầy giáo TS. Nguyễn Xuân Dũng
Thầy giáo TS. Phạm Ngọc Nam
Thầy giáo PGS.TS. Nguyễn Hữu Thanh
Cô gio TS. Trương Thu Hương
Các 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 Bch Khoa Hà Nộ i
Cùng toàn thể gia đình và ạn bè
đã giúp đỡ và tạo mọi điều kiện thuận lợ i cho tác giả trong quá 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Ê THI 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 ĐỒ ÁN “ 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 các 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 các trung tâm dữ liệu dẫn đến thực tr ạng mức tiêu thụ năng lượ ng quá lớ n. Các ảnh
hưở ng của điều này không chỉ về giá cả mà còn về môi trường khi lượng khí độ c hại thải ra từ các trung tâm dữ liệu là một vấn đề r ất đng quan tâm. Mộ t trong những giải php được đưa ra đó là điề u khiển một cách thông minh việc tiêu thụ
năng lượ ng của các b ộ chuyển mạch đượ c sử dụng trong các trung tâm dữ liệu. Nhóm tác giả thực hiện đồ n đã đưa ra cc cả i tiến cho các bộ chuyển mạch OpenFlow nhằm mục đích hỗ tr ợ các chế độ tiết kiệm năng lượ ng khác nhau. Sự cải tiến này bao gồm định nghĩa cc ản tin mớ i theo chuẩn giao thức OpenFlow, thiết k ế bộ điều khiển các chuyển mạch OpenFlow (OSC) có khả năng ật tắt các bộ chuyển mạch và cc port. Hơn nữ a, nhóm tác giả đã tích hợ p các cải tiến này lên chính các 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ự án ECODANE[1]. Các k ết qu ả được trình ày trong đồ án này có thể đượ c s ử dụng b ở i các 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 các 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 ĐỒ N .................................................................................................. iii ABSTRACT ............................................................................................................. iv MỤC LỤC..................................................................................................................v DANH MỤC HÌNH VẼ .......................................................................................... ix DANH MỤC BẢNG BIỂU ..................................................................................... xi CC 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 v 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 php 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
Cc 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
Cc ướ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 ộ 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ự n NetFPGA .............................................. 30
2.2.4
Xây dựng ộ 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 cc gói phần mềm cơ ả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 php 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 ộ đ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 4.4.4
2012
Thiết kế ản tin OpenFlow và kết quả đạt được .......................... 71
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 php 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 cc khối khc 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 ............................................................................. 90 5.3.1
Truyền, nhận và xử lý ản tin từ ộ điều khiển ........................... 90
5.3.2
Làm việc với phần mềm của chuyển mạch OpenFlow ................ 91
5.3.3
Xây dựng và triển khai cc chức năng mới .................................. 93
5.4 Kết luận chương ................................................................................. 95 Chương 6. Thực hiện đo đạc v kết quả ...............................................................96
6.1 Cơ sở hạ tầng thiết lập tested ............................................................ 96 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
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.2.3 6.3.1
Thiết lập hệ thống ....................................................................... 104
6.3.2
Test hệ thống .............................................................................. 105
6.3.3
Kết quả ....................................................................................... 105
6.4 Kết luận chương ............................................................................... 105 Kết luận v hướng phát triển của đề ti .............................................................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 ằ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 các 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 .....................26 Hình 2.9 Cc ướ c khi một flow mớ i tớ i bộ chuyển mạch OpenFlow ..................... Hình 2.10 Nền tảng NetFPGA ......................... ...................................... .......................... ........................... ........................... ................. ....27 .............................28 Hình 2.11 Sơ đồ khối chi tiết các thành phần trong kit NetFPGA ......................... Hình 2.12 Cấu trúc đơn giản một dự án vớ i NetFPGA............................ NetFPGA......................................... ................. .... 29 Hình 2.13 Cấu trúc pipeline của các modules .................... ................................. .......................... .......................... .............29 .................................................. ............30 Hình 2.14 Sơ đồ tổng quát của hệ thống NetFPGA ...................................... Hình 2.15 Mô hình Pipeline áp dụng cho việc thiết k ế phần cứng mạng ................. ................. 35 ....................................... .............36 Hình 2.16 Sơ đồ hoạt động của khối Output Port Lookup .......................... ........................................ .......................... ........................ ...........39 Hình 3.1 Sơ đồ khối mô hình Elastic Tree ........................... Hình 3.2 Mạng OpenFlow switch vớ i bộ điều khiển mạng NOX .......................... ..............................41 ............................... ....57 Hình 4.1 Sơ đồ mô tả vị trí của OSC trong mạng chuyển mạch........................... Hình 4.2 Mạng OSC đơn giản.......................... ....................................... .......................... ........................... ........................... ................. ....57 ..................................... .............58 Hình 4.3 Sơ đồ của chuyển mạch trướ c và sau khi có OSC ........................ ...................................... .......................... ........................... .................... ...... 59 Hình 4.4 Sơ đồ khối cơ ản của OSC ......................... ...................................... .......................... ........................... .................... ......59 Hình 4.5 Sơ đồ khối chi tiết của OSC ......................... ...................................... .......................... ........................... .................... ......63 Hình 4.6 Sơ đồ nguyên lý mạch OSC ......................... 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 Các 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 ng link state ........................... ........................................ .......................... .......................... ........................... .................... ......73 Hình 4.11 Trườ ng ng Switch state .......................... ....................................... ........................... ........................... ........................... ................74 Hình 4.12 Trườ ng ng Line Card state ......................... ....................................... ........................... ........................... ........................ ..........76 Hình 4.13 Sơ đồ thuật toán 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 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 các khối khác trong user data path ..................... .........................87 Hình 5.5 Sơ đồ khối thiết k ế của CC .......................... ....................................... .......................... ........................... .................... ......88 n.......................................... .......................... ...................... .........90 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 ................... ................................................. .......................... .............99 Hình 6.1 Sơ đồ hệ thống Testbed cho OSC .................................... Hình 6.2 Hệ thống Testbed thực tế cho OSC.................................. ............................................... .......................... .............99 .......................104 Hình 6.3 Sơ đồ hệ thống testbed cho chuyển mạch OpenFlow mớ i .......................104 Hình 6.4 Hệ thống testbed chuyển mạch OpenFlow trong thực tế .........................104 ..........................105 .........105 Hình 6.5 Sơ đồ k ết nối chuyển mạch - NIC cho h ệ thống testbed .................
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 ở các cấu hình khác nhau ...........................5 Bảng 4.1 Bảng tổng hợ p công suất của các thành phần ............................................62 Bảng 4.2 So snh ư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 cc trườ ng trong bản tin OFPT_PORT_MOD ............................72 Bảng 4.5 Ý nghĩa cc 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 cc trườ ng trong bản tin OFPT_LINECARD_MOD ..................75 Bảng 5.1 Các hàm x ử lý gói tin.................................................................................93 Bảng 5.2 Cc hàm điề u khiển phần cứng NetFPGA.................................................94 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 ..........103
NETFPGA GROUP-KSTN-ĐTVT-K52
xi
ĐỒ ÁN TỐT NGHIỆP
2012
CÁC 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
nhiên B ộ nhớ truy cậ p ng ẫu độ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 connect
PLD
Programmable Logic Device
Thi ế t bị logic có th ể l ậ p trình
SDN
Software-Defined Network
M ạng mề m
SRAM
Static Random Access Memory
nhiên B ộ nhớ truy cậ p ng ẫu
Component
Inter- K ết nố i thành ph ần ngoại vi
điề u khiể n bằ ng phầ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 đồ án này, tác giả sẽ tậ p trung giải quyết các 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; các giải pháp tiết ki ệm năng lượ ng cho các b ộ chuyển m ạch OpenFlow;
đo đạc trên thực tế và đnh gi từng phương php. 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 các trung tâm d ữ liệu và giải pháp sử dụng mạng OpenFlow do Lê Anh Văn thực hiện.
Chương 2: Tìm hiểu một cách tổng quát 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 N etFPGA. Chương này do Nguyễn Duy Linh và Lê Thi 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ê Thi 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ê Thi 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 các 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 các thiết bị đã đượ c tạo ra, đo đạ c và đnh gi cc 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 và 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 các trung tâm dữ liệu. Đồng thờ i, một giải pháp 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 phát 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. Các khái 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 cái nhìn tổng quan về mục tiêu mà đồ án
hướ ng tớ i; cùng với đó là một xu hướ ng phát 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 các 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 ao gồm có năng lượ ng cho các server, các thiệt bị mạng, cho hệ thống làm lạnh, line-cards, switching fabric, các hệ thống theo dõi và các hệ thống phụ tr ợ khác. 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 báo “ 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à phát triển quan tâm đó là cc giả i pháp tiết kiệm năng lượ ng tiêu thụ trong mạng trung tâm dữ liệu. Các switch và router hiện tại không cho ta biết đầy đủ các thông số năng
lượ ng tiêu thụ của chúng. Datasheet của các thiết bị này chỉ cho biết giá tr ị công suất hoạt động tối đa. Giá tr ị này không đủ để hiểu chính xc năng lượ ng tiêu thụ thật của các thiết bị mạng. Năng lượ ng tiêu thụ thật sự của các 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 ton chính xc đượ c
NETFPGA GROUP-KSTN-ĐTVT-K52
2
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 1 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 các thiết bị mạng. Mỗi một switch/router đều chứa nhiều thành phần cấu tạo khc 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 các slot c ắm các linecard, m ỗi linecard chứa nhiều port (cổng mạng) chính là các cổng giao tiế p của switch/router vớ i các switch/router khác hoặc vớ i các máy tính khác. Vi ệc đo thông số năng lượ ng tiêu thụ của t ất c ả các thành phần trong switch một cách toàn diện r ất khó để thực hiện. Dưới đây là cc 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: Các switch hiệu năng cao chứ a một chassis và một số lượ ng cố định các khe cắm (slot) dùng để cắm cc linecard. Đố i vớ i các switch hiệu năng thấp hơn (cc switch phổ thông vớ i 24 cổng tr ở xuống), cc 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ơ ản của chassis là tổng công suất tiêu thụ của một số thành phần khác 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 các linecard trên các khe slot của switch cho phép các nhà qu ản lý mạng linh động cắm số lượ ng linecard cần thiết linh động đp ứ 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 1Gps để có khả năng xử lý lưu lượ ng 24Gbps, hay cắm một linecard 4 cổng 10Gps để 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ả các linecard) ở tr ạng thái hoạt động (active). Các 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
NETFPGA GROUP-KSTN-ĐTVT-K52
3
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 1 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 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à 10Mps, khi đó hiệ u suất sử dụng của c ổng đó (hay port uti lization) 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 các giá tr ị công suất x ử lý tối đa của cổng đó một cách phù hợ p. Ví dụ, nếu một cổng phải xử lý 60 Mps 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 Mps để có hiệu quả sử dụng năng lượ ng một cách tốt nhất.
TCAM: hầu hết các switch thực hiện việc phân loại packet trên phần cứng và hầu hết các 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 cc switch cũng khc nhau.
Firmware: các nhà s ản xuất cậ p nhật firmware cho switch/router theo đị nh k ỳ. Các phiên bản firmware khc 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 )
146
54
0 (include in chassis power)
39
0.12
0.42
0.18
0.48
0.87
0.9
là công suất tiêu thụ của switch ở tr ạng thi không có lưu lượng đi
qua, tuy nhiên switch vẫn đang ở tr ạng thái bật (idle). 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 cách khác, các cổng của line card không phải xử lý bất cứ lượng lưu lượ ng nào. là số linecard của switch là công suất tiêu thụ của một cổng chạy ở tốc độ i. là số cổng chạy ở tốc độ i. i: có thể có các giá tr ị 10Mbps, 100 Mbps hay 1Gbps.
Qua Bảng 1.1 [2] ta thấy đối với Rack switch (cc switch thườ ng công suất xử lý thấp, ít hơn 24 cổng), do cc 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ơ ả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 khc đối vớ i các chuyển mạch tầng hai có công suất xử lý cao hơn, số lượ ng các linecard có th ể thay đổi bằng cách cắm/rút các linecard vào/ra các 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 các cổng trên
NETFPGA GROUP-KSTN-ĐTVT-K52
5
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 1 switch phụ thuộc vào cấu hình tốc độ hoạt động của các 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 sát 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 các 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 các 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 các 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 mt kiến trúc mạng mớ i Sự bùng nổ của các thiết bị và nội dung di động, ảo hóa máy ch ủ, và sự ra
đờ i của dịch vụ điện ton đm mây là một trong những xu hướ ng thúc đẩy các 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 các mạng thông thường đều theo kiến trúc phân cấ p, đượ c xây dựng vớ i các 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 toán 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 ton đa dạng, năng độ ng và nhu cầu lưu tr ữ dữ liệu ngày nay tại các trung tâm dữ liệu của doanh nghiệ p, trườ ng học, và
trong môi trườ ng của các nhà cung c ấ p d ịch v ụ. Một trong số những xu hướ ng tính toán 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).
NETFPGA GROUP-KSTN-ĐTVT-K52
6
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 1
Sự phát triển của các dịch vụ điện ton đm mây.
“Dữ liệu lớn” yêu cầu nhiều ăng thông hơn.
1.2.2 Mục tiêu của mạng OpenFlow Đp ứ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 sách không đổi ho ặc gi ảm, các 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ể đp
ứng bằng cách sử dụng các công cụ quản lý ờ mức thiết bị và các quy trình thủ công. Các hãng cung c ấ p d ịch v ụ cũng phải đối mặt v ớ i nh ững thách thức tương tự
như yêu cầu về tính di động cũng như sự bùng nổ ă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 ế để đp ứng các 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 sch 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, cc nhà nghiên cứu đã đưa ra giải php: Mạng điều khiển ằng phần mềm (Software-Defined Networking) Mạng điều khiển ằng phần mềm (SDN) là một kiến trúc mạng mới pht triển trong thời gian gần đây, trong đó việc điều khiển mạng được tch rời khỏi việc chuyển tiếp và có thể được lập trình. Khc với trước đây khi còn ị ràng uộc chặt chẽ trong từng thiết ị mạng đơn lẻ, điều khiển mạng sử dụng cc thiết ị tính ton có thể truy cập (accessile computing device) cho phép cơ sở hạ tầng cơ ản được trừu tượng hóa cho cc ứng dụng và dịch vụ mạng, hay là cc ứ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 sot toàn ộ mạng. Kết
NETFPGA GROUP-KSTN-ĐTVT-K52
7
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 1 quả là, hình ảnh của mạng đối với cc ứng dụng và cc 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 ộ mạng từ một điểm luận lý duy nhất, không phụ thuộc vào nhà cung cấp thiết ị, đ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 cc thiết ị mạng, ởi vì cc thiết ị mạng không còn cần phải hiểu và xử lý hàng ngàn cc chuẩn giao thức khc nhau mà chỉ còn xử lý cc lệnh từ ộ đ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 thác 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 tán trong số hàng ngàn các thiết bị mạng đơn lẻ. Ngoài ra, tận dụng cc 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 các ứ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 tháng
như hiện nay. Bằng cách thu thậ p tình tr ạng của mạng trong các lớp điều khiển (control layer), SDN cung cấ p cho nhà qu ản lý mạng cc phương php linh hoạt để
NETFPGA GROUP-KSTN-ĐTVT-K52
8
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 1 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 các phần mềm tự động SDN.
Hơn nữa, các nhà qu ản lý có thể tự viết cc chương trình này mà không phả i chờ đợ i các nhà cung c ấ p sẽ nhúng cc tính năng này vào cc sả n ph ẩm của họ kèm theo các 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 các hàm API cho phép thực hi ện các dịch v ụ mạng thông
thườ ng, bao gồm định tuyến, multicast, an ninh, kiểm soát truy cậ p, quản lý ăng thông, quản lý traffic, ch ất lượ ng, dịch v ụ, t ối ưu hóa cc ộ vi x ử lý và lưu trữ, s ử dụng năng lượ ng, và các hình thức quản lý chính sách, tùy chỉnh cho phù hợp để
đp ứng các 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 sách nhất quán một cách 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 các API mở để thúc đẩy việc quản lý đa nhà cung cấ p, mở ra cánh cửa cho các tính
năng phân ổ tài nguyên theo yêu cầu, self-service provisioning, mạng ảo hóa thực sự, và các dịch vụ đm mây an toàn.
Như vậ y, vớ i các hàm API mở nằm giữa b ộ điều khiển SDN và các lớ p ứng dụng, các ứ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 các dịch v ụ và khả năng của mạng mà không bị ràng buộc vào các chi ti ết khi thực hiện. SDN làm cho mạng không còn phải "application-aware" như là "applicationcustomized" và các ứ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 toán, 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 sot và cc 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 tc trên phần chuyển mạch của cc thiết ị 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
NETFPGA GROUP-KSTN-ĐTVT-K52
9
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 1 hụt của một giao diện mở cho phần chuyển mạch đã dẫn tới cc đặc tính của cc thiết ị mạng ây giờ như: chia thành nhiều khối riêng iệt, đóng và giống như cc my 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ư OpenFlow là cần thiết để chuyển công việc điều khiển mạng chuyển mạch lên cc
phần mềm điều khiển tập trung hợp lý. OpenFlow có thể được so snh 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 xc định cc thành phần cơ ản có thể được sử dụng ởi một
ứng dụng phần mềm ên ngoài để lập trình cho phần chuyển mạch của cc thiết ị mạng, điều này giống như tập lệnh của CPU với một hệ thống my tính.
Hình 1.2 Ví dụ về tập lệnh của OpenFlow Các giao thức OpenFlow đượ c thực hiện trên cả hai mặt của giao diện giữa các thiết b ị cơ sở hạ tầng mạng và phần mềm điều khiển SDN. OpenFlow sử dụng khái niệm về các luồng (Flow) để xc định lưu lượ ng truy cậ p mạng dựa trên quy tắc được xc đị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 xc định cách
lưu lượ ng mạng đượ c phân theo luồng thông qua các thiết bị mạng dựa trên các thông số như mô hình sử dụng, ứng dụng, và tài nguyên điện ton đm mây. Vì
NETFPGA GROUP-KSTN-ĐTVT-K52
10
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 1 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 soát r ất chi tiết t ớ i t ất c ả các khía cạnh, cho phép mạng có thể đp ứng theo thờ i gian thực v ớ i s ự thay đổi ở các 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 soát chặt chẽ đến như vậ y, bở i vì tất cả các luồng giữa hai thiết bị đầu cuối 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 khác nhau hay không. Giao thức OpenFlow là một nhân tố quan tr ọng trong Mạng điều khiển ằ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 tác trên phần chuyển mạch của các thiết bị mạng. Ban đầu khi áp dụng cho các 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 cc trường hợp. Mạng SDN dựa trên OpenFlow có thể được triển khai trên cc mạng hiện có, cả vật lý và ảo. Thiết ị mạng có thể hỗ trợ việc chuyển tiếp cc 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 cc 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 ởi nhiều nhà cung cấp. Tổ chức Open Networking Foundation chịu trch nhiệm tiêu chuẩn hóa OpenFlow thông qua cc 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 tc, và cc hoạt động khc, giúp đảm ảo khả năng tương tc giữa cc thiết ị mạng và phần mềm kiểm sot từ cc nhà cung cấp khc nhau. OpenFlow được chấp nhận rộng rãi ởi cc nhà cung cấp cơ sở hạ tầng mạng, thông
qua cc ả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 cc 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 cc kĩ sư công nghệ thông tin giải quyết cc vấn đề liên quan
tới ăng thông cao, tính chất thay đổi của cc ứng dụng ngày nay, chuyển đổi mạng
NETFPGA GROUP-KSTN-ĐTVT-K52
11
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 1 cho phù hợp với cc yêu cầu làm việc luôn thay đổi, và làm giảm đng kể độ phức tạp của hoạt động điều hành và quản lý mạng. Cc lợi ích mà doanh nghiệp và cc hãng có thể đạt được thông qua kiến trúc mạng SDN dựa trên OpenFlow ao gồm:
Tập trung hóa việc điều khiển trong môi trường mạng của nhiều nh cung cấp: Phần mềm điều khiển có SDN thể kiểm sot ất kỳ thiết ị mạng hỗ trợ OpenFlow từ ất kỳ nhà cung cấp nào, ao gồm thiết ị chuyển mạch, định tuyến và chuyển mạch ảo. Thay vì phải quản lý từng nhóm thiết ị từ các nhà cung cấp riêng lẻ, nhà quản lý có thể sử dụng đồng ộ cc thiết ị và
cc 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 cc thiết ị trong toàn ộ 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 cc công cụ (framework) giúp tự động hóa và quản lý
mạng một cch linh hoạt, điều này hỗ trợ nhà quản lý có thể pht triển cc công cụ giúp thực hiện cc tc vụ quản lý một cch 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ự ất ổn định trong mạng gây ra ởi lỗi trong việc điều hành, và hỗ trợ cc mô hình triển khai tự phục vụ (self -service provisioning models). Ngoài ra, vớ i mạng SDN, các ứng d ụng d ựa trên điện toán đm 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 cách 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 để đp ứng nhu những yêu cầu công việc đặc biệt và nhu cầu phát sinh của ngườ i sử dụng. Bằng cách ảo hóa và tr ừu tượ ng hóa cơ sở hạ tầng mạng từ các 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 các dịch vụ mớ i
cũng như cc tính năng mớ i của mạng trong vòng vài giờ .
NETFPGA GROUP-KSTN-ĐTVT-K52
12
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 1
Tăng cườ ng đ tin cậy và an ninh mạng: SDN cho phép các nhà quản lý tự định nghĩa cc cấ u hình cấ p cao (high-level configuration) và chính sách 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 sách, điều này làm giảm thiểu khả năng phát sinh lỗi trong mạng do xung đột cấu hình hoặc chính sách. Bở i vì bộ điều khiển mạng SDN cung cấ p khả năng hiển th ị đầy đủ và kiểm soát qua mạng, đo đó đảm b ảo r ằng việc ki ểm soát truy cậ p, lưu lượ ng, chất
lượ ng d ịch v ụ, an ninh, và các chính sách khác đượ c th ực thi nhất quán trên cơ sở hạ tầng mạng có dây và không dây, bao gồm cả các chi nhnh văn phòng, trườ ng h ọc, và trung tâm dữ liệu. Doanh nghiệ p và các nhà khai thác 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 sách và c ấu hình thống nhất.
Trải nghiệm người dùng tốt hơn : Bằng cch tập trung hóa điều khiển mạng và đảm ảo thông tin trạng thi sẵn sàng cho cc ứ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 cch 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 cc thuê ao cao cấp xem hình với độ phân giải lớn nhất có thể một cch 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ể đp ứng, dẫn đến trễ và gin đoạn làm giảm trải nghiệm người dùng. Với mạng SDN dựa trên OpenFlow, cc ứng dụng video có thể tự nhận diện ă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, cc 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 my chủ, và yêu cầu đp ứng một cch 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
NETFPGA GROUP-KSTN-ĐTVT-K52
13
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 1 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 ằ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 máy tính và lưu trữ. SDN hứa hẹn sẽ iế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 ổ nguồn lực một cch năng động, trở nên linh hoạt hơn, đủ quy mô để hỗ trợ các 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 ton đm 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 Nguyễ n Duy Linh
Sinh viên:
Lê 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 khc nhau: lưu lượ ng thí nghiệm (xử lý bở i flow-tale) và lưu
lượ ng thực tế(xử lý bở i các giao thức lớ p 2 và 3). Do điều kiện nghiên cứu của tác giả là trong phòng thí nghiệm, nên tác giả chỉ tậ p trung nghiên cứu loại chuyển mạch OpenFlow chuyên dụng. Và trong đồ án
này, khi đề cập đến chuyển mạch OpenFlow là tác 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 các công nghệ thiết k ế mạch tổ hợ p khác nhau: thiết k ế Full-Custom, thiết k ế Semi-Custom, PLD (Programmable Logic Device).
Thiế t kế Full-Custom: Phương php 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
NETFPGA GROUP-KSTN-ĐTVT-K52
15
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2 hóa đượ c hi ệu năng cũng như kích thướ c c ủa mạch t ổ hợ p. Tuy v ậy, giá thành sản xuất của các chip thiết k ế theo Full-Custom r ất đắt. Cách thiết k ế này chỉ áp 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: Cách thiết k ế này sử dụng một thư viện các cell
chuẩn có sẵn( cc cell này đượ c ch ế tạo t ừ các Transistor theo kiểu FullCustom).
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 các nhà máy bán dẫn. Công nghệ FPGA nếu đem so snh vớ i các 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 tác vụ đặc biệt phức tạ p, tuy vậy FPGA ưu việt hơn ở chỗ có thể tái 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 các ngôn ngữ mô tả phần cứng HDL như VHDL, Verilog, AHDL, cc hãng sả n xuất FPGA lớ n
như Xilinx, Altera thườ ng cung cấ p các gói phần mềm và thiết bị phụ tr ợ cho quá trình thiết k ế, cũng có mộ t số các hãng thứ ba cung cấ p các gói phần mềm kiểu này
như Synopsys, Synplify... Các gói ph ần mềm này có khả năng thực hiện tất cả các ướ 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 ao gồm: xử lý tín hiệu số DSP, cc hệ thống hàng không, vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC (ASIC prototyping), cc 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 my tính... Do tính linh động cao trong qu trình thiết kế cho phép FPGA giải quyết lớp những ài ton phức tạp mà trước kia chỉ thực hiện nhờ phần mềm my 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 ài ton đòi hỏi khối lượng tính ton lớn và dùng trong cc hệ thống làm việc theo thời gian thực. FPGA cũng đượ c ứng d ụng để chế tạo ra các thiết b ị mạng my tính như ộ định tuyến, bộ chuyển mạch. Trong đồ án này là bộ chuyển mạch OpenFlow. 2.1.3 Kiến trúc của FPGA Trong đồ n 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.1 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 cc tài nguyên để tạo ra
mạch tổ hợ p và các 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.1 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 các 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.2 [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.2 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.3). Trong CLB có hai bảng LUT4-1, các bảng LUT4-1 này thực chất là các SRAM vớ i bốn
đầu vào là bốn it địa chỉ, đầu ra là bit giá tr ị của ô nhớ trong SRAM. Bảng LUT này có thể thực hiện các 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.3 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.4). Mỗi CLB có tổng cộng tám Flip-Flops. Đầu vào của các Flip-Flops này lấy từ đầu ra của các bảng LUT hoặc đầu vào của các CLB. Dòng chip VirtexTM-II pro tách riêng tín hiệu Set và Reset cho t ừng Flip-Flop.
Hình 2.4 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 các dãy xung quanh chip. Các chân vào ra này có th ể cấu hình để hoạt động ở các chuẩn khác nhau: LVTTL, LVDS... Mỗi chuẩn sẽ quy định mức điện áp biểu diễn 0 hoặc 1 . Việc có thể cấu hình các 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 các hệ thống yêu cầu nhiều chuẩn tín hiệu vào ra khác 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, các 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 rác trên bề mặt của chip hoặc trong những vùng khác 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ả các thành phần đồng bộ trong chip FPGA đề u phải được điều khiển bở i các tín hiệu đồng hồ. Các 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 cc kế t nối để đến các thành phần tương ứng. Trong các chip FPGA có m ột hệ thống các k ết nối riêng để đưa tín hiệu clock nối đến các thành phần tương ứng. Kiến trúc này
đảm bảo các thành ph ần khác ở các vị trí khác nhau sẽ nhận đượ c tín hiệu có đặc tính giống nhau trnh trườ ng hợ p bị trượ t clock do quá trình truyền tín hiệu vớ i các khoảng cch 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 khc nhau đảm b ảo chip FPGA có thể hoạt động ở nhiều t ần s ố khác nhau.
NETFPGA GROUP-KSTN-ĐTVT-K52
20
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2 2.1.4 Các bướ c thiế thiết k ế vớ i FPGA củ của Xilinx Hình 2.5 dướ i đây mô tả cc ướ c thiết k ế vớ i FPGA của Xilinx [6]
Hình 2.5 Design flow Bướ c 1: Design Entry Ngườ i sử dụng sẽ thiết k ế phần cứng trong ướ c này. Có r ất nhiều cách 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 các 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 cách khác là sử dụng công cụ Core Generator của
Xilinx để sinh ra các khối phần cứng có sẵn. Phần mềm đượ c sử dụng ở ướ ướ c này là ISE của Xilinx.
Bướ c 2: Synthesis (T ổ ổ ng ng hợ p) Đây là một ướ c quan tr ọng ọng trong cc ướ c thiết k ế FPGA của hãng Xilinx. Ở ước này 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 ế. Đầu ra của pha này là các file netlist mô t ả mạch phần cứng (bao nhiêu hợ p thiết k ế. gate, flip-flop, k ết nối giữa chúng). Cc file netlist có đuôi là .ngc, .ngd. Trong quá trình tổng h ợp, ngườ i s ử dụng có các 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à cc 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ả các file netlist r ờ ời r ạc thành một file netlist duy nhất. Bướ c 4: Mapping Bướ c này sẽ ánh xạ các thành phần trong thiết k ế của ngườ i sử dụng xuống các thành phần vật lý trên chip FPGA (slice, IOB, Ram kh ối…). Nếu thiết k ế quá lớn vượ t quá tài nguyên cho phép của chip FPGA, trình d ịch sẽ báo lỗi.
Bướ c 5: Placing & Routing Bướ c này sẽ đặt các thành phần c ủa thiết k ế xuống chip đồng thờ i s ẽ k ết n ối p lớ n nhất chúng và đưa ra o co về mặt thời gian như độ tr ễ, tần số xung nhị p mạch có thể chạy được. Ba ước 3, 4, 5 đượ c là Implementation.
Trong qu trình Implementation, ngườ i sử dụng cần đưa ra cc ràng uộc đố i vớ i h ệ thống như gn chân cho thiế t k ế vớ i chân chip thật (Pin Assignment) và tần số xung nhị p 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 ướ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 ở ướ ướ c này, thì khả năng chạy đượ c trên chip FPGA thật lả r ất cao.
NETFPGA GROUP-KSTN-ĐTVT-K52
22
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2 Bướ c 6: Bitstream Generation Khi thực hiện đến ướ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 .it 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ầ Phần mề mềm ISE Đây là một phần mềm thiết k ế của hãng Xilinx đượ c dùng cho các dòng chip FPGA của hãng. Phần mềm này chứa các công c ụ cho phép ngườ i sử dụng tạo ra các 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ả các 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 các báo cáo 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.6 Giao diệ diện phầ phần mề mềm ISE Qua phần này, chúng ta đã hình dung đượ c về chip FPGA và cc ướ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.7 dưới đây:
Hình 2.7 Cấu trúc của mt 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 các flow-entry và mỗi flow-entry có một
Action đi kèm dùng để xử lý các 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à các nhà nghiên cứu trnh đượ 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 cc khi niệm như flow, flow -entry. Một flow được định nghĩa là cc gói tin trùng (matching) vớ i m ột header cụ thể bên trong flow-table. Việc so sánh 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 sánh trùng một cách chính xác tất cả cc trườ ng (match exactly); hai là chỉ trùng một trường nào đó (wildcard match).
Hình 2.8 Cấu tạo của mt flow-entry Hình 2.8 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ơ ả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 các thí nghiệm nh ằm mục đích forward tất cả các 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) các 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 cc lưu lượ ng giả đượ c phát tán 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.9 Các bướ c khi mt flow mớ i tớ i b chuyển mạch OpenFlow Hình 2.9 là cc ước để định tuyến một flow từ một máy tính nguồn sang một my tính đích thông qua hai ộ chuyển mạch OpenFlow [4]. Trong sơ đồ bên trái, flow-table của hai bộ chuyển mạch đều không chứa gì. Khi một gói tin đến
trong ước 1, nó đượ c forward tớ i b ộ điều khiển trong ướ 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 các bộ chuyển mạch trong ước 3. Sau đó gói tin đượ c g ửi t ới my tính đích trong ướ c 4
và 5. Trong cc ướ 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 my tính đích.
2.2.2 Giớ i thiệu về NetFPGA NetFPGA là một nền tảng phần cứng giá 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 các thiết k ế phần cứng mạng
NETFPGA GROUP-KSTN-ĐTVT-K52
26
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2 như ộ định tuyến, bộ chuyển mạch, card mạng... NetFPGA đang đượ c phổ biến một cách r ộng rãi tớ i các sinh viên, gi ảng viên và các nhà nghiên c ứu và những
ngườ i quan tâm tớ i việc thử nghiệm cc ý tưở ng mới liên quan đến phần cứng mạng tốc độ cao.
Trong đồ án này, bộ chuyển mạch OpenFlow đượ c xây dựng trên nền tảng NetFPGA (Hình 2.10).
Hình 2.10 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 các thành phần chính sau: -
Xilinx VirtexTM-II pro 50
-
4x1 Gbps Ethernet ports sử dụng lõi MAC mềm
NETFPGA GROUP-KSTN-ĐTVT-K52
27
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2 -
4.5 Mb SRAM và 64 Mb DDR2
-
Một chip FPGA Spartan II dùng để làm khối Control Logic cho PCI interface
-
Kit NetFPGA giao tiế p với my tính thông qua đườ ng bus PCI.
Sơ đồ khối chi tiết các thành phần phần cứng cũng như cch sắ p xế p của chúng trong kit NetFPGA đượ c minh họa trên Hình 2.11[4].
Hình 2.11 Sơ đồ khối chi tiết các thành 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. Các 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ụ khc nhau như trên Hình 2.12. Trong đó: -
nf2_top
là mức cao nhất: Chứa các tín hiệu (signal) đầu vào, đầ u ra nối
các thiết bị ngoại vi ên ngoài như thạ ch anh, cổng mạng, … -
nf2_core
chứa các thành ph ần quan tr ọng cần có vớ i mọi d ự án làm việc
với NetFPGA như cc 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ự án khác nhau sẽ
bao gồm một cấu trúc khác nhau. Sự khác biệt giữa dự án bộ chuyển mạch OpenFlow vớ i các dự án khác như ộ định tuyến OpenFlow là ở
đây.
Hình 2.12 Cấu trúc đơn giản mt dự án vớ i NetFPGA Mỗi mức trong một dự n đều đượ c thiết k ế thành các modules nhằm mục
đích dễ dàng mở r ộng và cc 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.13 [4].
Hình 2.13 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 thi và điề u khiển giữa các modules phần cứng và phần mềm. Phần mềm
2.2.2.3
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, các ph ần mềm t ạo ra giao diện giữa
ngườ i dùng và thiết bị mạng, các công cụ thiết k ế của Xilinx như ISE, XPS.
Hình 2.14 Sơ đồ tổng quát của hệ thống NetFPGA 2.2.3 Làm việc vớ i mt dự án NetFPGA Cấu trúc thư mục của một dự án NetFPGA
2.2.3.1
Các dự án 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ư cc file thiết k ế, phần mềm như dưới đây: netfpga bin
{Base directory} {Scripts for simulation/synthesis/register gen}
NETFPGA GROUP-KSTN-ĐTVT-K52
30
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2 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
lib
{Perl and C headers}
regress
{Regression tests}
src
{non-library verilog}
sw
{Project-specific software}
synth
{Synthesis directory (contains all .xco
verif
{Simulation tests}
XML}
files)}
Trong đó,
netfpga
là thư mục gốc (base directory) nằm ở đườ ng dẫn
/root/netfpga
Thư mục bin chứa cc script để mô phỏng (nf_run_test.pl), sinh ra các thanh
ghi
(nf_register_gen.pl),
chạy
các
regress
test
(nf_regress_test.pl)…
Thư mục
bitfiles
chứa những file it 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 bit
lib/C
chứa cc chương trình C như nf_download để nạ p file
xuống chip, cc thư viện cho phép phần mềm viết trên máy tính có thể đọc ghi
các thanh ghi trên kit NetFPGA.
Thư mục
lib/Makefiles
chứa các 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 cc thư viện Perl để tạo ra các file dữ liệu gói tin đầu vào, các 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 cc 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 các module phần c ứng (dướ i dạng source code Verilog) do người dùng đóng góp cho dự án NetFPGA.
Thư mục
lib/verilog/core
chứa các module phần cứng đượ c sử dụng
lại trong nhiều các dự n netFPGA như module
sram_arbiter,
input_arbiter, output_queues, output_port_lookup …
Đặc biệt tác
giả quan tâm ở đây là module testbench, module này chứa các 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 các dự án NetFPGA. Trong thư mụ c này, tác 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 cc ướ 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 cc thư con sau ên trong thư mụ c project: include, src, synth,
và test. Cc thư mục con khc như doc, lib, và sw có
thể không cần thiết (Chú ý: thư mục lib sẽ đượ c tạo ra 1 cách t ự động khi chạy công cụ register generation).
Tạo một file project.xml file inside the include directory.
Thêm cc module trong thư việ n có sẵn vào trong file project.xml.
Thêm các 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 đnh gi một chức năng cụ thể của phần cứng. Các bài test nên được đặt trong thư mục test của project.
Thư
mục
test
both__
nên
được
đặt
tên
theo
kiểu
nếu nó có thể đượ c chạy cho cả mô phỏng
và phần cứng, hw__ nếu chỉ có thể đượ c chạy như là một bài kiểm tra phần cứng, và sim__, 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 cách 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 cách chạy l ệnh make trong thư mục synth.
Viết các 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 các phần mềm cần thiết và đăt trong thư mụ c sw.
Các 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[10]. 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). Các 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 báo một flow mới đến hoặc thông báo update tr ạng thi cc đườ 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 các flow-entry được trao đổi giữa các process của
không gian ngườ i dùng và kernel module thông qua các lờ i gọi hệ thống IOCTL. Kernel module chịu trách nhiệm bảo trì các flow-tables, xử lý gói tin và update các 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 các flow-table b ằng phần mềm và forward các gói tin qua card m ạng của máy tính. Kernel module có khả năng mở r ộng bằng cách cho phép các module phần cứng đăng kí cc f low-table thêm vào. Các flow-table của phần cứng sẽ có quyền
ưu tiên cao hơn cc flow -table của phần mềm. Các nhà phát tri ển có thể mở r ộng hệ thống tham khảo b ằng cách thêm một NetFPGA OpenFlow Kernel Module. Kernel module này sẽ sử dụng các interface của kernel module tham kh ảo để k ết nối các 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 sánh 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
NETFPGA GROUP-KSTN-ĐTVT-K52
34
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2 flow-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 flowtable 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.15 mô tả kiến trúc đơn giản trong nf2_core.
Hình 2.15 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ự án 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, tác 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 sánh header của các gói tin t ớ i v ớ i các flow-entry sử dụng 10 trườ ng trong mỗi flow-entry. Các 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 các 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.16 dưới đây:
NETFPGA GROUP-KSTN-ĐTVT-K52
35
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2 A
Input Arbiter
B
Header Paser
F Exact Lookup
C
D
M
Wildcard Lookup
Two hash functions computing
E Word Buffer
SRAM Bank 0 SRAM controller
Flow entry lookup & Update
TCAM
SRAM Bank 1
G
H
I
Match Arbiter
Packet Editor
Output Queues
Hình 2.16 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ố cc đầu vào MAC RxQ, CPU RxQ để lấy gói
tin đưa vào xử lý. Khối B s ẽ lấy ra cc trườ ng cần thiết trong header của gói tin và ghép lại vớ i
nhau. Cc 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ả cc 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 các flow entry.
Khối C sẽ tính ton 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 khác nhau. Theo cách 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 các 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 ao gồm một it để xc định flow-entry này có hợ p lệ không, 3 its xc đị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 its đị 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 giá 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 ank 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 các 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 qu 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 các khối khác. Khi các khối khác 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 các 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 máy tính thông qua các thanh ghi ánh xạ bộ nhớ (memory mapped registers). Và gói tin đượ c truyền qua lại giữa máy 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, cc 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 tác gi ả hy vọng người đọc sẽ có một cái 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 tác giả sẽ giớ i thiệu cách 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 Linh
Lê Thái Hưng Để thực hiện yêu cầu của đồ n cũng như phục vụ cho quá trình nghiên cứu, cc 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.1 mô tả một h ệ thống đp ứng linh hoạt năng lượ ng tiêu thụ bở i mạng trung tâm dữ liệu.
Hình 3.1 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 ton ra được đồ hình mạng tối ưu, tiêu thụ ít năng lượ ng mà vẫn đp ứ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 Các 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 các 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 thái tắt bật của các thiết b ị mạng trong mạng trong khi bộ định tuyến ti ến hành định tuyến cho các luồng theo đồ hình mớ i.
3.2
NOX controller Hiện nay, trên thế giới đã pht triển một số bộ điều khiển (controller) giúp
cho ngườ i s ử dụng phát triển các ứng d ụng bằng các ngôn ngữ lậ p trình khác nhau dựa trên nền tảng OpenFlow: -
Beacon: viết bằng Java do đại học Stanford phát triển
-
Floodlight: viết bằng Java do Apache phát tri ển
-
Maestro: viết bằng Java do đại học Rice phát tri ển
-
NodeFlow: viết bằng Javascript.
-
NOX: viết vằng C++ hoặc là Python do đại học Stanford phát triển [18].
-
Trema: viết bằng C hoặc Ruby do NEC phát tri ển. Trong số các bộ điều khiển trên, NOX là b ộ điều khiển đượ c s ử dụng khá là
phổ biến. NOX là một phần mềm mã nguồn mở dùng điều khiển mạng các OpenFlow switch. Mục đích của NOX nhằm cung cấ p một platform cho viết các phần mềm quản lý mạng (như cc ứ ng dụng định tuyến, tườ ng lửa…) sử dụng C++ hoặc Python. Tuy vẫn còn trong quá trình phát triển, nhưng NOX hiện nay đã đượ c sử dung trong một số các mạng lớ n. NOX hỗ tr ợ cả các 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, phát tri ển mạng triển khai các ý tưở ng m ới trong lĩnh vực mạng, sử dụng phần cứng thật.Các nhà phát triển có thể điều khiển tất cả cáck ế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 các tổng đài (operator), gồ m có việc quản lý tậ p trung cho t ất cả các 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 máy và quản lý việc chuyển tiế p các bản tin giữa nhiều switch khác nhau. - NOX cung cấ p các giao diện lậ p trình giúp cho nhà phát 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 các 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, các 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 cc gói đi trong mạ ng, thu thậ p các thông tin thống kê, chỉnh sửa được gói trong flow đó hoặ c có thể xem thêm đượ c v ề các gói khc trong cùng flow để thu thập đượ c thêm nhiều thông tin.
Hình 3.2 Mạng OpenFlow switch vớ i b điều khiển mạng NOX Hình 3.2 mô tả đồ hình mạng vớ i các switch OpenFlow và bộ điểu khiển mạng NOX (NOX Controller), ở đây cc phần mềm điều khiển mạng NOX chạy
NETFPGA GROUP-KSTN-ĐTVT-K52
41
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 3 trên một my 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 các 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 iệt
như định tuyến, chuyển mạch, xác thực... Có thể chạy một lúc nhiều NOX component vớ i các chức năng điều khiển khác 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. Cc ứ ng dụng trong bộ điều khiển mạng NOX có thể k ết h ợ p v ớ i nhận biết các 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 các switch và tạo ra lưu lượ ng. Các thành phần của NOX:
Core apps: cung cấ p chức năng cho cc ứ ng dụng mạng và các dịch vụ web.Thành phần Core apps được đặ t tại thư mục: src/nox/coreapps/
Network apps: các ứng dụng để quản lý mạng - Discovery: theo dõi các liên k ết giữa các 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ả các liên k ết hiện lên trong mạng. - Authenticator : theo dõi vị trí của máy chủ và thiết bị chuyển mạch trên mạng. - Routing :là thành phần chịu trách nhiệm tính ton đường đi.. Thành phần Network apps được đặt tại thư mục: src/nox/netapps/
Web apps: Các ứng dụng we 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 các ứng dụng NOX. - Webserver : là ứng dụng lưu trữ các giao diện điều khiển. - Webserviceclient Thành phần we được đặt tại thư mục: src/nox/webapps/ Ngoài ra chúng ta có thể tự phát triển thêm các chức năng khc để phục vụ
mục đích riêng hoặc chia sẻ cùng cộng đồng. Các nhà phát 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 phát triển, chia sẻ và đóng góp giúp cho cc phiên ả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/noxdependencies.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 các thiết bị k ết nối tớ i tắt đi một số port xc định. ./nox_core –v I ptcp:6633 spanning_tree
Ngoài cấu hình spanning_tree còn khá nhiều cấu hình khc như pyswitch,
router, … tu y nhiên trong khuôn khổ đồ án 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 Xây dự dự ng ng chuyể chuyển mạ mạch OpenFlow
3.3
Các chuyển mạch OpenFlow đượ c xây dựng trên các máy 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 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 máy tính chứa card NetFPGA.
3.3.1 Ci đặt đặt các gói phầ ph ần mềm mềm cơ bản bả n Việc cài đặ t các phần mềm cần thiết cho một chuyển mạch OpenFlow đượ c thực hiện theo cc ướ c sau:
Đăng kí để tải gói NetFPGA (NFP) ng dẫn: Để tải gói NFP: Đăng kí tài khoản trên FosWiki theo đườ ng http://netfpga.org/foswiki/bin/view/NetFPGA/UserRegistration Sau khi tài khoản đượ c tạo ta có thể tự động nhận các 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 cc script để test và project
mẫu dướ i d ạng nhị phân. Thay thế kí tự „x‟ ằ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 cc gói trên theo đườ ng ng dẫn sau: http://netfpga.org/foswiki/bin/view/NetFPGA/OneGig/Releases
Sau đó giải nén các 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à các project mẫu tham khảo. Gói OpenFlow Switch chứa project
đầy đủ của chuyển mạch OpenFlow cũng như cc 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 máy tính Máy 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 các phiên bản NetFPGA Packet từ
ở về trướ c). 3.0.0 tr ở c). Ở đây, do đồng bộ vớ i dự án 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:
Ci đặt đặt sử sử d dụng YUM: YUM: để đơn giản hóa việc cài đặt, ta sử dụng YUM và gói RPM; tất cả các thành phần riêng lẻ sẽ được cài đặt 1 cách 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ư
ng hướ ng
dẫn
theo
link:
http://wiki.centos.org/AdditionalResources/Repositories/RPMForge#head20e1f65f19ccf2f5fbf5adb30dbaf5ea963a64ae. 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 tch riêng để cài ng dẫn tại đặt gói này làm theo hướ ng 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 ng tại: /root/netfpga). (thông thườ ng
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í khác ví dụ netfpga_backup. Dòng lệnh sau sẽ copy thư mục NetFPGA và đặ t các biến môi trườ ng: ng: /usr/local/netfpga/lib/scripts/user_account_setup/user_accoun t_setup.pl
Câu lệnh này còn thêm các bi ến môi trườ ng ng sau vào file .bashrc -
NF_ROOT
-
NF_DESIGN_DIR
-
NF_WORK_DIR
-
PYTHONPATH
-
PERL5LIB
ết thúc qu trình cài đặ t. o Khở i động lại my tính để k ết Ci đặt đặt không sử sử d dụng YUM Để thực hi ện cài đặ t tối thiểu một NetFPGA card trên một máy 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à các kernel driver cho máy 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)) 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 cc trườ ng uppermem và vmalloc vào /boot/grub/grub.conf và khởi động lại.
o
Thực hiện các 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 quá 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 cc file sau vào thư mục /etc/rc.local theo hướ ng dẫn:
usr/local/netfpga/lib/scripts/cpci_reprogram/cpci_reprogram.p l /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 ướ c này chúng ta có th ể tải và chạy các project phần cứng (file .bit) khác.
Ci đặt các công cụ CAD Các source code c ủa cc module đều đượ c cung cấ p trong các file Verilog,
do đó ngườ i dùng có thể biên dich, mô phỏng và tổng hợ p thành các thiết bị cho NetFPGA. Các mô phỏng và tổng hợp đều đượ c sử dụng trên một phiên bản xác
định của các cộng cụ Xilinx. Sử dụng các phiên bản khác (cũ hơn hoặc mới hơn) đều không đc hỗ tr ợ. Ci đặ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 gio dục có thể nhận hỗ tr ợ theo đườ ng dẫn: http://www.xilinx.com/univ/don_program.htm
Ci đặt ModelSim Đây là phần mềm giúp sử dụng để mô phỏng các mạch phần cứng và xem dạng tín hiệu trong mạch đồng thờ i h ỗ tr ợ các phần mềm testbench; chúng ta sẽ cài
đặt phiên bản sau: Version SE 6.2G. Ci đặt ChipScope 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
NETFPGA GROUP-KSTN-ĐTVT-K52
48
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 3 Ci đặt các module b nhớ Chúng ta có thể sử dụng Script tự động cài đặt các 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 các module bộ nhớ một cách riêng r ẽ. 3.3.2 Biên dịch và tải Driver xuống NetFPGA Sau khi tải hoàn chỉnh các 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à các 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 các driver và công cụ
Cài đặt driver và kh ởi động lại. Các 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 máy 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: nf2
28428
0
NETFPGA GROUP-KSTN-ĐTVT-K52
49
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 3 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 máy tính, ta phải tải lại CPCI!
3.3.3 Ci đặ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
Nếu my 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:
NETFPGA GROUP-KSTN-ĐTVT-K52
50
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 3 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.0netfpga ./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: cd ~/
NETFPGA GROUP-KSTN-ĐTVT-K52
51
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 3 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 các 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 qu trình cài đặt các phần mềm cần thiết, để có mạng OpenFlow hoàn chỉnh, cần có thêm một máy 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ừ máy tính này vào các máy 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 các 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: &
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 cc trườ ng hostname và Ip address bằng địa chỉ Ip của máy cài bộ điều khiển NOX và giá 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 my đ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 cc 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 cc my tính vào cc cổng trên NetFPGA của switch, chạy thử lệnh ping giữa cc my ất kì và xem kết quả. Khi chưa cắm ộ điều khiển vào, kết quả là cc my tính không thể ping được cho nhau, hay chuyển mạch không chuyển tiếp cc gói tin đến cc my tính tương ứng. Nguyên nhân là do lúc này flow tale trong chuyển mạch còn trống nên no sẽ không iết phải xử lý thế nào với cc gói tin đến . Để chuyển mạch có thể chuyển tiếp gói tin, cc flow entry cần được thêm vào trong flow tale của chuyển mạch. Thực hiện thêm flow ằng câu lệnh add-flow,
dpctl
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ố khc 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ề cc Flow Tale 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 các 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ị cc flow được lưu trong my 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
Các cách dùng khác c ủa công cụ dpctl có thể xem thêm bằng cách ch ạy lệnh sau: man dptcl
3.4
K ết luận chương Trong chương này, nhóm tc giả đã thực hiện việc xây dựng mạng nội bộ sử
dụng các 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 các nhóm nghiên cứu khc đặ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ự án 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, tác gi ả sẽ trình bày về các giải pháp về phần cứng nhóm tác giả đưa ra nhằm tiết kiệm năng lượ ng cho trung tâm dữ liệu. Giải pháp phần cứng ở đây ao gồm các giải php không liên quan đến phần định tuyến đường đi của gói tin. Hai giải php đượ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 thi 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 thi năng lượ ng thấ p) trình bày ở
Chương 4. Các giải pháp này xuất pháp từ việc chuyển tr ạng thái của chuyển mạch về tr ạng thái tiết kiệm năng lượ ng (tr ạng thái không dùng hết các port, tr ạng thái 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 pháp 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ừ đó, tác giả sẽ áp 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 phát từ mục tiêu đã nêu, tc 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 các link giữa các 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.1 Sơ đồ mô tả vị trí của OSC trong mạng chuyển mạch Trên Hình 4.1, 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à cc đườ ng k ết n ối c ủa chuyển mạch này vớ i các chuyển mạch khác. Ngoài ra, OSC có khả năng điều khiển nhiều chuyển mạch
Controller
khác nhau và liên k ết
Openflow Switch controller
Switch/Hub
vớ i nhau tạo thành mạng các OSC. Hình
…….
4.2 mô tả một mạng
OSC 1
OSC 2
OSC n
OSC đơn giản gồm 1 Switch/Hub.
s21
s23
s22
s24
……. IP Network
Hình 4.2 Mạng OSC đơn giản
Yêu cầu chức năng v phi chức năng
4.2
Mạch thiết k ế cần có đủ các 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 báo tr ạng thái 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 thái các chuyển mạch từ tr ạng thi năng lương cao xuống thấp, đóng ngắt các 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 đp ứng của hệ thống không cần quá nhanh.
-
Giá 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.
Thiết k ế phần cứ ng
4.3
Dựa trên các yêu c ầu chức năng và phi chức năng, tác giả đi vào thiết k ế phần cứng của OSC.
Controller
Controller
Power link
Power supply
Ethernet & Power link
Power link
Switch
Power supply
Ethernet link
IP Network
OSC
Switch
Ethernet link
IP Network
Hình 4.3 Sơ đồ của chuyển mạch trướ c và 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.4 và sơ đồ chi tiết trên Hình 4.5:
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.4 Sơ đồ khối cơ bản của OSC
IP Network
...
On/ Off link block
On/ Off link block
...
On/ Off link block
On/Off switch block
Power supply Controller
Receiving Msg and control block
...
Switch
Hình 4.5 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 tách bản tin, điều khiển các khối đóng mở, đồng thời cũng gửi tình tr ạng các 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ể đp ứ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, tác 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 các thiết k ế nhúng. Do
có đặc điểm tiết kiệm năng lượ ng, các bộ CPU ARM chiếm ưu thế trong các sản phẩm điện t ử di động, mà vớ i các sản ph ẩm này việc tiêu tán 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- it đượ c sản xuất nhiều nhất trên thế giớ i[12]. CPU
ARM đượ c tìm thấy khắp nơi trong cc 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, my đa phương t iện, my trò chơi cầ m tay, và máy tính bảng) cho đến các thiết bị ngoại vi máy 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 các hệ thống nhúng. Nó đượ c phát triển để cung cấ p một nền tảng chi phí thấp, đp ứng yêu cầu thực thi của vi điều khiển vớ i việc giảm số bóng bán dẫn trong lõi ARM Cortex dẫn tớ i tiêu thụ năng lượ ng thấ p và giảm giá thành vi xử lí, đồng thờ i cung cấ p hi ệu năng tính ton cao và mộ t h ệ thống tiên tiến để đp ứng ngắt. B ộ vi x ử lý ARM Cortex-M3 32- it 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 các 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ó cc 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. Các 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 các 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 php để đó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, các thiết bị tham gia vào khối này không đượ c làm ảnh hưởng đến điện áp vi sai truyền trên k ết nối khi có tín hiệu (điện áp trên dây vào kho ảng 2.5V tùy vào tốc độ
đườ ng truyền là 10, 100 hay 1000Mbps [15]). Xét từng phương n cụ thể đã đưa ra: -
Phương n sử dụng transitor giảm điện áp khoảng 0.7V
-
Phương n sử dụng flip-flop và IC khác làm tr ễ tín hiệu truyền.
-
Phương n R elay là tỏ ra ưu việt khi không làm giảm điện áp và không gây tr ễ tín hiệu và đượ c chọn là phương n 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 độ đp ứ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 ự án 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 áp 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 5V60mA. Tuy không có thể đp ứng đượ c yêu cầu tiết kiệm năng lượ ng song chúng có thể đp ứng đượ c các 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. Khác 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 tác giả sử dụng ở đây phải là relay lớ n, loại ch ịu đượ c dòng cao và có cách ly vớ i mạch điều khiển chính bằng IC2803 nhằm tránh 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 Tác 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 ước đầu được ướ c tính theo datasheet của các thiết bị như trong Bảng 4.1 sau [13]:
Bảng 4.1 Bảng tổng hợ p công suất của các thành phần Năng lượ ng tiêu thụ
Linh kiện chính
Số lượ ng
Lm3s6965
1
~700
RJ45
1
0
Relay
5
~300
trung bình (mW/đơn vị)
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 các bản tin OpenFlow mớ i. Hình 4.6 và Hình 4.7 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.6 Sơ đồ nguyên lý mạch OSC
Hình 4.7 Phần cứ ng của OpenFlow switch controller
NETFPGA GROUP-KSTN-ĐTVT-K52
63
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 4 Thiết k ế phần mềm
4.4
Phần này sẽ trình bày về các loại bản tin trong giao thức OpenFlow, các
ướ c trong quá 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à các 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 các 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 các nhà phát triển có thể thí nghiệm, phát triển các 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à các b ản tin như sau:
OpenFlow Header:
Tất cả các 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 */
OFPT_VENDOR,
/* Symmetric message */
NETFPGA GROUP-KSTN-ĐTVT-K52
64
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 4
/* 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 các 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). - Bản tin giữa Controller và Switch (Controller to Switch Message) .
NETFPGA GROUP-KSTN-ĐTVT-K52
65
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 4
Bản tin đố i xứ ng:
Bản tin đối x ứng là các bản tin đượ c g ửi một cch độ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: Các bản tin Experimenter cho phép các 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 khác.
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. Cc thông tin đượ c gửi trong bản tin bất đối xứng này thườ ng là tr ạng thái của bộ chuyển mạch, các 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 các 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 ộ chuyển mạch sẽ gửi một bản tin thông báo về cho bộ điểu khiển. - Port Status: Bản tin gửi thông báo về tr ạng thái hiện tại của các cổng trên bộ chuyển mạch (đang ật hay tắt) về cho bộ điều khiển. - Error: Switch gửi bản tin thông báo lỗi bề cho bộ điều khiển.
Bản tin gử i từ Controller tớ i Switch :
Đây là cc ả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ó sáu 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. Các
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 ở các tầng cao hơn OpenFlow Channel. - Configuration: Bản tin nhằm hỏi và cài đặt, cấu hình các thông số hoạt
động của bộ chuyển mạch. - Modify-State: Bản tin nhằm quản lý các tr ạng thái 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 tale 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 các thông tin
đượ c thống kê trên bộ chuyển mạch. - Packet-Out: Bộ chuyển mạch sẽ gửi các 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 quá 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.8. 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 a ướ c của TCP/IP. Sau đó, ộ chuyển mạch sẽ gửi bản tin Hello theo giao thức OpenFlow như đã trình à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 quá 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
Openflow Switch
Controller
Hello Hello Feature Request Feature Reply Set Config Vendor Error Flow Mod
(Openflow packets exchanged)
Hình 4.8 Quy trình bắt tay giữ a b điều khiển và 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 ộ giao thức TCP/IP stack trong nó. Cc vi điều khiển hiện nay thường có ộ 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 cch thông thường mà không sử dụng thêm cc chip nhớ ngoài với cc vi điều khiển này là điều không thể. Tuy nhiên, thông qua việc sử dụng cc 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 cch triệt để. Module lwIP là một mã nguồn mở thực hiện trên giao thức TCP/IP đượ c phát triển theo định hướng giảm tài nguyên sử dụng trong khi vẫn giữ nguyên cc 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 ®[17]. Dưới đây là ảng so snh ưu, nhược điểm cc phần mềm mã nguồ n
mở dành cho TCP/IP stack trên hệ thống nhúng tc giả đã tìm hiểu và thử nghiệm trong thời gian thực hiện đề tài:
Bảng 4.2 So sánh ưu nhược điểm của mt số mã nguồn mở TCP/IP stack Tên phần mềm uIP lwIP
Ưu điểm
Nhược điểm
Miễn phí, kích thước rất nhỏ
Hỗ trợ kém, khó viết ứng dụng
Miễn phí, đầy đủ, thường được sử dụng Miễ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 qu lớn
Tinytcp, wattcp and others
Miễn phí
Khó dùng, không tiện lợi
uC/IP
Module lwIP đượ c phát triển bởi Adam Dunkels tại nhóm Hệ thống nhúng trong mạng tại khoa Khoa Học Máy Tính thuộc Viện Thuỵ Sỹ[17]. Hiện tại chương
trình này đang đượ c phát triển bởi Leon Woestenerg 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ở phát 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 các 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 các mở r ộng thí nghiệm UDP-lite.
Giao thức TCP với điều khiển sự quá 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.
Cc hàm API đặc biệt để tăng hiệu năng.
Các 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.9 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 và k ết quả đạt đượ c Các bản tin OpenFlow đượ c g ửi giữa b ộ điều khiển và các bộ chuyển mạch OpenFlow để quản lý và điều khiển các 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 ày từ các phần trên, OSC nhận các lệnh điều khiển từ bộ điều khiển OpenFlow để điều khiển các chế độ làm việc của bộ chuyển mạch và các cổng. Các lệnh điều khiển bao gồm:
Lệnh tắt bật các bộ chuyển mạch và các line card.
Lệnh tắt bật cc đườ ng link liên k ết và các 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.
Các lệnh trên cần đượ c thêm vào trong các b ản tin trao đổi giữa bộ điều khiển OpenFlow và OSC. Để phục v ụ cho mục đích này, tc 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 thái các 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.3 và Bảng 4.4 dưới đây là cc trường và ý nghĩa củ a chúng trong bản tin OFPT_PORT_MOD :
Bảng 4.3 Bản tin OFPT_PORT_MOD OpenFlow
Port
MAC
header
no
address
8bytes
2bytes
6bytes
Config Mask
Link
Advertise
Pad
4bytes
3bytes
state 4bytes 4bytes
1bytes
Bảng 4.4 Ý nghĩa các trườ ng trong bản tin OFPT_PORT_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
port_no
Chứa giá tr ị của port trên các b ộ chuyển mạch
hw_addr[OFP_ETH_ALEN]
Địa chỉ MAC của port
config
Các tr ạng thái của port tại thời điểm hiện tại
mask
Thông tin về sự thay đổi tr ạng thái của port
NETFPGA GROUP-KSTN-ĐTVT-K52
72
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 4 link_state
Thông tin về các chế độ của port như ật, tắt…
advertise
Thông tin về các 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 các cổng mạng như trên Hình 4.10. Nếu bit cờ có giá tr ị là 1, OSC sẽ thay đổi tr ạng thái cổng mạng. Trườ ng MOD biểu thị các chế độ làm việc c ủa c ổng mạng ví dụ bật, t ắt, t ốc độ link… Khi MOD có giá 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ó các giá tr ị tốc độ link 10Mps, 100Mps và 1Gps đượ c thêm vào và sử dụng để điều chỉnh tốc độ link. 7
Flag
0
Link Rate
Mod
Hình 4.10 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 thái các 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.5 và Bảng 4.6 dưới đây là cc trường và ý nghĩa củ a chúng trong bản tin OFPT_SWITCH_MOD :
Bảng 4.5 Ý 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
Các tr ạng thái 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.6 Bản tin OFPT_SWITCH_MOD
Opflow header
Datapath ID
Switch State
Option
Pad
8 bytes
1bytes
4bytes
3bytes
8bytes
Trườ ng Switch state chứa thông tin để thay đổi tr ạng thái các bộ chuyển mạch như Hình 4.11. Trườ ng MOD biểu thị các chế độ làm việc của bộ chuyển mạch như là tắt, bật, IDLE, SLEEP… 7
Flag
0
Reserved
Mod
Hình 4.11 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 thái 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.7 và Bảng 4.8 dưới đây là cc trường và ý nghĩa củ a chúng trong bản tin OFPT_LINECARD_MOD :
Bảng 4.7 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.8 Ý nghĩa các trườ ng trong bản tin OFPT_LINECARD_MOD Trườ ng header
datapath_id line_card_no
Ý nghĩa 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 Tên của bộ chuyển mạch được lưu trong Controller Số hiệu của line card trong bộ chuyển mạch
NETFPGA GROUP-KSTN-ĐTVT-K52
75
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 4 line_card_state
Các tr ạng thái của line card đượ c sử dụng cho việc điều khiển Tùy chọn
option
Trườ ng Line card chứa thông tin để thay đổi tr ạng thái các bôn chuyển mạch như Hình 4.12. Trườ ng MOD biểu thị các chế độ làm việc của line card như ậ t, tắt, IDLE, SLEEP… 7
0
Flag
Reserved
Mod
Hình 4.12 Trườ ng Line Card state Hình 4.13 mô tả quá 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 quá trình bắt tay giống
như qu trình ắt tay giữa bộ điều khiển và bộ chuyển mạch OpenFlow như đã trình bày ở trên. Các 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 thái 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 báo hiệu việc thay đổi tr ạng thái. Nếu bit báo hiệu là “1”, chương trình sẽ thực hiện việc
thay đổi tr ạng thi theo trường MOD, sau đó quay lạ i tr ạng thái chờ bản tin. Nếu bit báo hiệu là “0”, chương trình sẽ không thực hiện ướ c tiế p theo mà quay tr ở về tr ạng thái chờ ngay lậ p tức.
NETFPGA GROUP-KSTN-ĐTVT-K52
76
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 4 Begin
Handshake with Controller
N
OK?
Y Receive message
N Is PORT_MOD ?
Y Y
N
Change port state? Y Change port state
N
Is N LINE_CARD MOD?
Is SWITCH _MOD?
Y Change line card state?
Y
N
Change Switch state?
Y
Y Change line card state
N
Change switch state
End
Hình 4.13 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 pháp xây dựng bộ OSC có khả năng đưa cc
chuyển mạch OpenFlow sang tr ạng thi năng lượ ng thấp; đồng thờ i quan tr ọng hơn các tác giả đã tạo ra các b ản tin mớ i theo chuẩn giao thức OpenFlow mang thông tin về các chế độ tiết kiệm năng lượng đượ c gửi từ bộ điều khiển. Các bản tin này để thiết lậ p các tr ạng thái hoạt động của các b ộ chuyển mạch OpenFlow tại từng thờ i
điểm dựa theo các thuật toán tìm đường đượ c các nhà phát tri ển thử nghiệm và triển khai trong các trung tâm d ữ liệu.
Trong chương tiế p theo, nhóm tác giả sẽ sử dụng bản tin và cách 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
thi 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 à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 tác giả sẽ xây dựng theo cc ướ c sau: - Nghiên cứu giải pháp 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 pháp tiết kiệm năng lượ ng cho chuyển mạch OpenFlow.
Giải pháp tiết kiệm năng lượ ng
5.1
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
thi, 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 các giải pháp sau:
Giảm hệ số hoạt động, tức là giảm bớ t các thành phần tiêu thụ năng lượ ng trong thiết bị, tắt bớ t các thành phần này khi không hoạt động.
Giảm điện dung chuyển tr ạng thái. Vấn đề này phụ thuộc nhiều về mặt công nghệ chế tạo và sử dụng các vật liệu mớ i.
NETFPGA GROUP-KSTN-ĐTVT-K52
79
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 5
Giảm điện áp hoạt động của thiết bị. Tương tự như giảm điện dung chuyển tr ạng thi, phương php 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.
Giảm tần số làm việc của mạch hay các 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 php giảm điện dung chuyển tr ạng thi và điệ n áp hoạt động là không khả thi vì các tham s ố này đã đượ c c ố định b ở i nhà sản xu ất. Khi cố thay đổi các tham số đó, ví dụ giảm điện áp sử dụng, sẽ khiến cho các thiết b ị không hoạt động, hoạt
động sai chức năng. Giải pháp 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 ình thườ ng không có khả năng thực hi ện do các thiết bị sử dụng cc con chip đã được đóng gói sẵn, ngườ i dụng không thể can thiệ p vào cấu trúc ên trong đượ c. Tuy nhiên, vớ i nển tảng FPGA, hai giải pháp 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à, các 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, tác 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ư cc 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ả các 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 sáng, có thể một số cổng hoạt động nhưng không hề có lưu lượng đi qua).
NETFPGA GROUP-KSTN-ĐTVT-K52
80
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 5 -
Thứ hai, chuyển mạch có thể làm việc vớ i các tần số khc nhau tương
ứng với cc lưu lượ ng vào k hc nhau như 10Mps, 100Mps, 1 Gbps. 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 bảo hoạt động ì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, các port của chuyển mạch có thể đưa về làm việc v ớ i các giao tiế p t ốc độ thấp hơn như 10Mps hay 100Mps thay vì chỉ 1Gps như hiện tại để giảm năng lượ ng tiêu thụ.
Thiết k ế phần cứ ng
5.2
Dựa trên giải php được đưa ra, tc giả xây dựng một kh ối điều khiển có tên là Clock Controller (CC) có các 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 thi 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 us để điều khiển việc đóng ngắt các dây tín hiệu clock của các 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 php 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 Làm 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ừ các modules bằng ngôn ngữ Verilog và quản lý bằng các file xml . Chúng cùng các thành ph ần liên
quan đượ c tổ chức thành cc 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 các file xml, các file xml này ch ứa thông tin về các module phần cứng (trong lib/verilog ) đượ c sử dụng trong bộ
NETFPGA GROUP-KSTN-ĐTVT-K52
81
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 5 chuyển mạch OpenFlow và cc thanh ghi đượ c sử dụng bở i các module phần cứng đó.
Thư mục OpenFlow_switch/lib chứa cc thư viện Perl và C.
Thư mục OpenFlow_switch/src chứa các source code verilog của bộ chuyển mạch OpenFlow.
Thư mục OpenFlow_switch/synth chứa makefile và các 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 cc 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 các khối modules phần cứng đượ c mô tả trong các 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à các 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à các tin hiệu liên quan của chuyển mạch OpenFlow đượ c thể hiện như trên Hình 5.1.
I0
nf2_top
O I1 S
gtx clock
TX DCM I0 O I1 S
Ethernet PHY 1
TX clk
RX clk
DCM 1
I0 O
RGMII 1
O
RGMII 2
O
RGMII 3
I1 S
Ethernet PHY 2
RX clk
DCM 2
I0
I1 S
Ethernet PHY 3
RX clk
DCM 3
I0
I1 S
nf2_core Ethernet PHY 4
RX clk
DCM 4
I0 O
RGMII 4
I1 S
Core Clk
Core DCM
I0 O I1 S
CPCI Clk
I0 O I1 S
Hình 5.1 Sơ đồ hệ thống clock của chuyển mạch OpenFlow Theo Hình 5.1, 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 cc phương php tiế t ki ệm năng lượng đã nêu ở trên, nhóm đã đề xuất phương n 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 cc port đượ c thực hiện khi có yêu cầu từ bộ điều khiển (ví dụ như ộ điều khiển NOX). Giải pháp này có thể đượ c áp dụng bằng cách ngắt các xung tín hiệu clock ra khỏi các khối thực hiện việc truyền nhận dữ liệu (c ụ thể theo Hình 5.1 là các khối RGMII từ 1 đến 4). Đồ ng thờ i các tín hiệu TX_clk tương ứng vớ i các khối đó cũng phải bị cách 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ể tách toàn bộ các tín hiệu clock ra khỏi các 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 thi 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 các bộ BUFGMUX chọn hoặc không chọn đườ ng dây clock của các khối c ần điều khiển. M ặc định an đầu là cho phép các 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 Clock controller nf2_top
I0 O I1 S
gtx clock
TX DCM I0 O
TX clk
I1 S
Ethernet PHY 1
RX clk
DCM 1
I0 O
RGMII 1
O
RGMII 2
I1 S
Ethernet PHY 2
RX clk
DCM 2
I0
I1 S
nf2_core Ethernet PHY 3
RX clk
DCM 3
I0 O
RGMII 3
O
RGMII 4
I1 S
Ethernet PHY 4
RX clk
DCM 4
I0
I1 S
Core Clk
Core DCM
I0 O I1 S
I0
CPCI Clk
O I1 S
Hình 5.2 Sơ đồ vị trí lý tưở ng của CC trong nf2_top Sơ đồ khối như trên là lý tưở ng, có thể áp 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 các 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 phát triển t ừ năm 2007. Điều này dẫn đến vi ệc tác giả sử dụng cách 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:
Clock controller
Buffer I0
nf2_top
O I1 S
TX DCM
gtx clock
I0 O I1 S
Ethernet PHY 1
RX clk
Ethernet PHY 2
RX clk
Ethernet PHY 3
RX clk
DCM 1
I0 O
RGMII 1
O
RGMII 2
O
RGMII 3
O
RGMII 4
I1 S
DCM 2
I0
I1 S
DCM 3
RX clk
DCM 4
I0
I1 S
Core Clk
Core DCM
nf2_core
I0
I1 S
Ethernet PHY 4
TX clk
User data path
I0 O I1 S
CPCI Clk
I0 O I1 S
Hình 5.3 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 các module đã trình bày ở chương hai (Hình 2.13). Đâ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 quát giữa các khối trong user data path đã đượ c trình bày trong mục 2.2.4.2. Hình 5.4 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.4 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.13, mà sẽ đượ c nối thẳng tớ i khối buffer trong nf2_top như trên Hình 5.3. 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 :
...
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 các khối
điều khiển thanh ghi của các khối khác 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 thái key 16-bit ghi nhận của các clock. Bốn it đầ u cho bốn clock của các khối DCM1 đến DCM4. Bit thứ 8 cho clock của khối nf2_core. Các bit còn l ại sẽ sử dụng cho các tác v ụ khác 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 thái key.
Hình 5.5 Sơ đồ khối thiết k ế của CC Từ sơ đồ khối trên, tác 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,
input
[`UDP_REG_ADDR_WIDTH-1:0]
reg_addr_in,
NETFPGA GROUP-KSTN-ĐTVT-K52
88
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 5 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 thái key ở phần cứng s ẽ đượ c mô tả rõ ràng trong file mô t ả clock_controller.xml :
key The Key value used by the Clock Controller Module generic_software32
Cuối cùng, tác giả tiến hành biên dịch lại dựa án bằng câu lệnh sau: cd ~/netfpga/projects/OpenFlow_switch/synth/ time make
NETFPGA GROUP-KSTN-ĐTVT-K52
89
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 5 Sau khi biên dịch lại dự án, tác 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 các NetFPGA d ựa trên việc tắt
bật và thay đổi tr ạng thái của port và bộ chuyển mạch, tác giả đã nghiên cứu và triển khai các vấn đề sau : o Cách 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 my tính Linux có cài đặt card NetFPGA. o Thêm các 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 và xử lý bản tin từ b điều khiển Các 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 máy tính chứa card NetFPGA như Hình 5.6[8] dưới đây:
Hình 5.6 Sơ đồ mạng OpenFlow đơn giản
NETFPGA GROUP-KSTN-ĐTVT-K52
90
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 5 Cc port trên NetFPGA được dùng để gửi, nhận, chuyển tiếp… cc gói tin trong mạng OpenFlow theo cc flow entry và cc 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 máy tính chứa NetFPGA.
Hình 5.7 Sơ đồ hệ thống b điều khiển và b chuyển mạch OpenFlow Hình 5.7[9] mô t ả sơ đồ các 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 tách bản tin và gửi lệnh xuống NetFPGA thông qua khối DRIVER.
5.3.2 Làm 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 các hàm x ử lý gói tin, tác giả đã tìm hiểu cấu trúc cc 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.
NETFPGA GROUP-KSTN-ĐTVT-K52
91
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 5 Cấu trúc thư mụ c openflow trong đườ ng dẫn root/openflow như sau: ` |-- 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 cc file cài đặ t sau: ` |-- acinclude.m4 |-- Makefile.am `-- udatapath `-- automake.mk
Thêm các hàm x ử lý gói tin mới vào cc file sau trong thư mụ c udatapath vớ i cấu trúc thư mục như sau: `-- udatapath ` |-- chain.c |-- datapath.c |-- of_ext_msg.c |-- udatapath.c `-- some header files
Thay đổi cc file trong thư mục nf2 vớ i cấu trúc đườ ng dẫn như sau: `-- hw-lib `-- nf2
Vai trò chính của thư viện nf2 đó là:
NETFPGA GROUP-KSTN-ĐTVT-K52
92
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 5
Chứa các bảng nf2, biểu diễn của các bảng trên phần cứng NetFPGA. Các bảng này tương đương vớ i các 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. Làm sáng tỏ sự liên hệ giữa NetFPGA bitmaps và các 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 và 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, tác giả tậ p trung vào việc gửi nhận và xử lý các gói tin OFPT_PORT_MOD
và OFPT_SWITCH_MOD như đã trình ày trong phần 4.4.4.
Các hàm xử lý gói tin trong Bảng 5.1 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ý các gói tin. Bảng 5.1 Các hàm xử lý gói tin Hàm
Chức năng
turn_on_port()
Bật port
turn_off_port()
Tắt port
Thay đổi giá tr ị clock của port theo tốc độ link từng thờ i change_link_rate()
điểm
turn_on_switch()
Bật switch
turn_off_switch()
Tắt switch
sleep_switch()
Chuyển switch về chế độ sleep
Các hàm trong
NETFPGA GROUP-KSTN-ĐTVT-K52
93
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 5 Bảng 5.2 đượ c thêm vào file nf2_drv.c trong thư mục root/OpenFlow/hwlib/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.2 Các hm điều khiển phần cứ ng NetFPGA Chức năng
Hàm
Ghi giá tr ị “0” vào 1 trong 8 it đầu của thanh ghi nf2_turn_on_port()
CLOCK_CONTROLLER_KEY_REG để bật TX và RX của 1 trong 4 port. Ghi giá tr ị “1” vào 1 trong 8 it đầu của thanh ghi
nf2_turn_off_port()
CLOCK_CONTROLLER_KEY_REG để tắt TX và RX của 1 trong 4 port. Ghi giá tr ị 01,10,11 tương ứng vớ i các giá tr ị 10Mbps, 100Mbps và 1Gbps vào bit thứ 9 và 10 của
nf2_change_link_rate()
thanh ghi để thay đổi giá tr ị clock của port theo tốc độ link từng thờ i điểm. Ghi giá tr ị “00” vào it 11 và 12 củ a thanh ghi
nf2_turn_on_switch()
CLOCK_CONTROLLER_KEY_REG
để
bật
switch. Ghi giá tr ị “11” vào it 11 và 12 củ a thanh ghi nf2_turn_off_switch()
CLOCK_CONTROLLER_KEY_REG để tắt switch. Ghi giá tr ị “01” vào it 11 và 12 củ a thanh ghi
nf2_sleep_switch()
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 máy tính: $ cd /root/OpenFlow $ ./configure --enable-hw-tables=nf2 $ make $ make install
NETFPGA GROUP-KSTN-ĐTVT-K52
95
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 5 5.4
K ết luận chương Chương này đã đưa ra cc giả i pháp giúp tiết kiệm năng lượ ng trong các
trung tâm dữ liệu trên nền tảng mạng OpenFlow đó là thiết k ế các khối chức năng mớ i trong phần cứng NetFPGA để tạo nên các 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 đồ án 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 và k ết quả Trong chương này, tc giả sẽ đnh gi cc 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 các giải pháp 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 các thành phần quan tr ọng là bộ điều khiển, chuyển mạch OpenFlow, các host (hoặc máy tính cá nhân) k ết nối tớ i các 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 các chuyển mạch (hay ngắt các 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.1 dưới đây mô tả sơ đồ tested đơn giản an đầ 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 php cc chương trước đã đề ra.
Controller
Switch
Host 1
Host 2
Host 3
Host 4
Hình 6.1 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 ày tương đối rõ ràng trong Chương 3 của đồ án nên phần này chỉ tậ p trung chủ yếu vào thành phần còn lại là các 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 cách 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. Các cổng này có thể gửi nhận bản tin bằng cách
sử dụng các hàm có sẵn trong thư viện NetFPGA.
Cc ướ 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 các 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 các port trên NetFPGA. Công cụ này nằm ở thư mục sw trong reference_nic project. cd ~/netfpga/projects/reference_nic/sw/ make
NETFPGA GROUP-KSTN-ĐTVT-K52
98
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 6 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: nf2c0 Num pkts received on port 0: Num pkts dropped (rx queue 0 full): Num pkts dropped (bad fcs q 0): Num bytes received on port 0: Num pkts sent from port 0: Num bytes sent from port 0:
0 0 0 0 0 0
Num Num Num Num Num Num
pkts received on port 1: pkts dropped (rx queue 1 full): pkts dropped (bad fcs q 1): bytes received on port 1: pkts sent from port 1: bytes sent from port 1:
0 0 0 0 0 0
Num Num Num Num Num Num
pkts received on port 2: pkts dropped (rx queue 2 full): pkts dropped (bad fcs q 2): bytes received on port 2: pkts sent from port 2: bytes sent from port 2:
0 0 0 0 0 0
Num Num Num Num Num Num
pkts received on port 3: pkts dropped (rx queue 3 full): pkts dropped (bad fcs q 3): bytes received on port 3: pkts sent from port 3: bytes sent from port 3:
0 0 0 0 0 0
Ngoài counterdump các nhà phát 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.
NETFPGA GROUP-KSTN-ĐTVT-K52
99
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 6 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 máy 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 yte 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, tác giả thiết lậ p một hệ thống thực nghiệm bao gồm m ột my tính đóng vai trò Controller, mộ t Switch đượ c xây dựng trên một máy tính có card NetFPGA và thêm một máy 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 khác).
Controller
OSC
Host 1
Host 2
Switch
Host 3
Host 4
Hình 6.2 Sơ đồ hệ thống Testbed cho
Hình 6.3 Hệ thống Testbed thự c tế cho
OSC
OSC
Hình 6.2 và Hình 6.3 mô tả hệ thống testbed cho bộ OSC.
NETFPGA GROUP-KSTN-ĐTVT-K52
100
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 6
Bộ điều khiển (controller) là một máy 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à my 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à my 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 các 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 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.
NETFPGA GROUP-KSTN-ĐTVT-K52
101
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 6 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 các 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 các port và thực hiện lại cc ướ 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]# ./counterdump Found net device: nf2c0 Num pkts received on port 0: Num pkts dropped (rx queue 0 full): Num pkts dropped (bad fcs q 0): Num bytes received on port 0: Num pkts sent from port 0: Num bytes sent from port 0:
0 0 0 0 0 0
Num Num Num Num Num Num
pkts received on port 1: pkts dropped (rx queue 1 full): pkts dropped (bad fcs q 1): bytes received on port 1: pkts sent from port 1: bytes sent from port 1:
0 0 0 0 10 1000
Num Num Num Num Num Num
pkts received on port 2: pkts dropped (rx queue 2 full): pkts dropped (bad fcs q 2): bytes received on port 2: pkts sent from port 2: bytes sent from port 2:
0 0 0 0 0 0
Num pkts received on port 3:
10
NETFPGA GROUP-KSTN-ĐTVT-K52
102
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 6 Num Num Num Num Num
-
pkts dropped (rx queue 3 full): pkts dropped (bad fcs q 3): bytes received on port 3: pkts sent from port 3: bytes sent from port 3:
0 0 1000 0 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]# ./counterdump Found net device: nf2c0 Num pkts received on port 0: Num pkts dropped (rx queue 0 full): Num pkts dropped (bad fcs q 0): Num bytes received on port 0: Num pkts sent from port 0: Num bytes sent from port 0:
0 0 0 0 0 0
Num Num Num Num Num Num
pkts received on port 1: pkts dropped (rx queue 1 full): pkts dropped (bad fcs q 1): bytes received on port 1: pkts sent from port 1: bytes sent from port 1:
0 0 0 0 20 2000
Num Num Num Num Num Num
pkts received on port 2: pkts dropped (rx queue 2 full): pkts dropped (bad fcs q 2): bytes received on port 2: pkts sent from port 2: bytes sent from port 2:
0 0 0 0 0 0
Num Num Num Num Num Num
pkts received on port 3: pkts dropped (rx queue 3 full): pkts dropped (bad fcs q 3): bytes received on port 3: pkts sent from port 3: bytes sent from port 3:
10 0 0 1000 0 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.
NETFPGA GROUP-KSTN-ĐTVT-K52
103
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 6 Đo điện lượ ng tiêu thụ trên OSC bằng cch xc định điện p và dòng điện đi qua OSC, tác giả đã thu đượ c k ết quả như Bảng 6.1 và Bảng 6.2 dưới đây:
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 (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 703
Năng lượ ng tiêu thụ (mW)
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 (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. -
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, tác giả đã tính ton đượ c thời gian đp ứ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 cách sử dụng các timer thờ i gian của vi điều khiển).
NETFPGA GROUP-KSTN-ĐTVT-K52
104
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 6 Chuyển mạch OpenFlow có chức năng tiết kiệm năng lượ ng
6.3
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, tác giả thiết lậ p một hệ thống thực nghiệm bao gồm một máy tính làm controller và m ột máy tính có NetFPGA làm Switch và m ột máy tính có card mạng NIC 4 cổng (NIC 4 cổng này
đóng vai trò như là 4 host).
Controller
Switch
Host 1
Host 2
Host 3
Host 4
Hình 6.4 Sơ đồ hệ thống testbed
Hình 6.5 Hệ thống testbed chuyển mạch
cho chuyển mạch OpenFlow mớ i
OpenFlow trong thự c tế
Hình 6.4 và Hình 6.5 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 máy 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à my 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à my 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
NETFPGA GROUP-KSTN-ĐTVT-K52
105
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 6
Hình 6.6 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 n này tương tự với phương n 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 phát giống với phương n 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 cc 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ỉ đnh gi đượ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 các giải pháp
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 n đã thự c s ự thực hiện đượ c các yêu cầu đề ra c ủa đồ án. Về phương diện lý thuyết, phương n thứ hai - xây dựng khối phần cứng mớ i trên chuyển mạch 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 đnh gi nào về mức năng lượ ng tiêu thụ khi thực hi ện áp dụng
NETFPGA GROUP-KSTN-ĐTVT-K52
106
ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 6 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 v hướ ng phát triển của đề tài Thông qua đồ án, ta đã lần lượ t triển khai hai giải pháp 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 pháp 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 đồ án, các tác giả cũng tạo ra đượ c các 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 đồ án này tác 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 thi “nghỉ” toàn ộ (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, tác giả sẽ nghiên cứu cch đưa chuyể n mạch OpenFlow về tr ạng thi “nghỉ” toàn ộ, chuyển t ần s ố hoạt động của chuyển mạch theo yêu cầu và thực hiện đnh gi một cch đầ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 cc 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-wplatest.pdf , lần truy cậ p cuối 30/05/2012 [8] http://yuba.stanford.edu/foswiki/bin/view/OpenFlow/Deployment/HOWTO/L abSetup 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 [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
NETFPGA GROUP-KSTN-ĐTVT-K52
109
ĐỒ ÁN TỐT NGHIỆP
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 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_t ofp_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; int i;
NETFPGA GROUP-KSTN-ĐTVT-K52
111
ĐỒ ÁN TỐT NGHIỆP
2012
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_MOD buf+=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_t ofp_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);
NETFPGA GROUP-KSTN-ĐTVT-K52
113
ĐỒ ÁN TỐT NGHIỆP
2012
RIT128x96x4StringDraw("OK connected", 12, 48, 15); 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|G PIO_ 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/1ps module clock_controller #( parameter DATA_WIDTH = 64, parameter CTRL_WIDTH = DATA_WIDTH/8,
NETFPGA GROUP-KSTN-ĐTVT-K52
115
ĐỒ ÁN TỐT NGHIỆP
2012
parameter UDP_REG_SRC_WIDTH = 2 ) ( // --- data path interface // --input input input input input input
Register interface
[`UDP_REG_ADDR_WIDTH-1:0] [`CPCI_NF2_DATA_WIDTH-1:0] [UDP_REG_SRC_WIDTH-1:0]
output output output output output output
reg_req_in, reg_ack_in, reg_rd_wr_L_in, reg_addr_in, reg_data_in, reg_src_in,
reg_req_out, reg_ack_out, reg_rd_wr_L_out, [`UDP_REG_ADDR_WIDTH-1:0] reg_addr_out, [`CPCI_NF2_DATA_WIDTH-1:0] reg_data_out, [UDP_REG_SRC_WIDTH-1:0] reg_src_out,
// --- Misc input input
clk, reset,
// Them vao output [15:0] input
esrc_en, 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