nghiên cứu hệ thống cụm máy tính xử lý song song rocks và ứng dụng
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
HÀ NỘI - 2010
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin Cán bộ hướng dẫn: TS Nguyễn Trí Thành
HÀ NỘI - 2010
Trang 3Cuối cùng, tôi xin chân thành cảm ơn gia đình và bạn bè, những người đã luôn động viên, giúp đỡ tôi trong học tập cũng như trong cuộc sống
Trang 4ii
TÓM TẮT NỘI DUNG
Tài liệu này giới thiệu sơ lược về công nghệ xử lý song song nói chung và công nghệ xử lý song song phân cụm nói riêng, sau đó tập trung nghiên cứu một hệ thống cụm máy tính xử lý song song tiêu biểu: Rocks Các nội dung chính được trình bày là: Các kiến trúc xử lý song song SISD, SIMD, MISD, MIMD (theo phân loại của Flynn), cùng các hệ thống tính toán đa nhân, các hệ thống đa xử lý đối xứng, các hệ thống tính toán lưới, tính toán cụm và các hệ thống xử lý song song cực lớn (Chương 2); giới thiệu tổng quan về kiến trúc và thành phần của hệ thống Rocks, hướng dẫn cài đặt, nghiên cứu kiến trúc hệ thống và cách quản trị (Chương 3); hướng dẫn lập trình MPI căn bản, phương pháp xây dựng ứng dụng MPI để đạt hiệu quả cao, tận dụng được tài nguyên hệ thống (Chương 4);
Chương 5 của khóa luận trình bày chi tiết một ứng dụng xử lý song song tiêu biểu, cùng cách thức thiết lập môi trường và hướng dẫn biên dịch
Phần cuối của tài liệu có trình bày 4 phụ lục, xem như là các nội dung mở rộng cho những phần đã trình bày trong các chương
Trang 5iii
MỤC LỤC
LỜI CẢM ƠN i
TÓM TẮT NỘI DUNG ii
MỤC LỤC iii
DANH MỤC BẢNG BIỂU vii
DANH MỤC HÌNH VẼ viii
CHƯƠNG 1 GIỚI THIỆU 1
CHƯƠNG 2 CÁC KIẾN TRÚC VÀ CÁC HỆ THỐNG XỬ LÝ SONG SONG 4
2 1 Các kiến trúc xử lý song song 4
2 1 1 SISD 6
2 1 2 SIMD 7
2 1 3 MISD 7
2 1 4 MIMD 8
2 2 Các hệ thống xử lý song song 8
2 2 1 Các hệ thống tính toán đa nhân 8
2 2 2 Các hệ thống đa xử lý đối xứng 9
2 2 3 Các hệ thống tính toán phân tán 10
2 2 3 1 Các hệ thống tính toán lưới 10
2 2 3 2 Các hệ thống xử lý song song cực lớn 12
2 2 3 3 Các hệ thống tính toán cụm 12
Trang 6iv
CHƯƠNG 3 HỆ THỐNG ROCKS 16
3 1 Giới thiệu 16
3 1 1 Tổng quan 16
3 1 2 Kiến trúc của HPC Cluster sử dụng Rocks 17
3 1 3 Rocks và Rolls 18
3 2 Cài đặt 20
3 2 1 Cấu hình 20
3 2 2 Cài đặt frontend 20
3 2 3 Cài đặt hàng loạt các compute node 24
3 3 Kiến trúc hệ thống 25
3 3 1 Quy tắc đặt tên của Rocks 25
3 3 2 Về cơ sở dữ liệu cluster 28
3 3 3 Về sơ đồ cơ sở, file cơ sở và quá trình cài đặt một compute node 34
3 4 Quản trị 39
3 4 1 Tổng quan 39
3 4 2 Frontend quản trị cluster như thế nào? 40
3 4 3 Các tác vụ quản trị cơ bản 43
3 4 3 1 Cài đặt lại một compute node trong lần boot PXE tiếp theo 43
3 4 3 2 Xem và thay đổi các cấu hình mạng 48
CHƯƠNG 4 LẬP TRÌNH SONG SONG VỚI MPI 50
4 1 Các mô hình lập trình song song 50
4 1 1 Mô hình bộ nhớ chia sẻ 50
4 1 2 Mô hình đa luồng 51
Trang 7v
4 1 3 Mô hình truyền thông điệp 52
4 1 4 Mô hình song song dữ liệu 53
4 2 Các ưu điểm của mô hình truyền thông điệp 54
4 2 1 Phổ biến 54
4 2 2 Khả năng mô tả 54
4 2 3 Dễ gỡ lỗi hơn 55
4 2 4 Hiệu năng 55
4 3 Giới thiệu về MPI 55
4 4 Mục tiêu của MPI 56
4 5 Các đặc điểm của MPI 56
4 6 Khác biệt giữa các bản cài đặt bằng C và C++ của MPI 58
4 7 MPI trên Rocks 58
4 8 Viết chương trình Hello World 59
4 9 Các hàm MPI cơ bản 64
4 8 1 Hàm MPI_Init 64
4 8 2 Hàm MPI_Finalize 65
4 8 3 Hàm MPI_Comm_size 65
4 8 4 Hàm MPI_Comm_rank 65
4 10 Giá trị trả về của các hàm MPI 66
4 11 Về các khái niệm Nhóm, Ngữ cảnh và Bộ liên lạc 66
4 12 Liên lạc giữa các tiến trình 67
4 13 Xây dựng một ứng dụng tự trị 70
Trang 8vi
4 14 Về mối quan hệ giữa kích thước bài toán và chi phí tính toán 75
4 15 Phương hướng xây dựng một ứng dụng MPI 77
CHƯƠNG 5 CÀI ĐẶT THỬ NGHIỆM ỨNG DỤNG TRÊN HỆ THỐNG ROCKS 78
5 1 Thiết lập môi trường 78
5 2 Mã nguồn ứng dụng 79
5 3 Biên dịch và chạy ứng dụng 86
5 4 Kết quả thử nghiệm 86
CHƯƠNG 6 KẾT LUẬN 89
PHỤ LỤC 1 SƠ LƯỢC VỀ CÁCH PHÁT TRIỂN ROLL MỚI 90
PHỤ LỤC 2 LIÊN LẠC GIỮA CÁC TIẾN TRÌNH MPI 99
PHỤ LỤC 3 SỬ DỤNG MPI ĐỂ TÍNH TÍCH PHÂN 102
PHỤ LỤC 4 SỬ DỤNG MPI ĐỂ TÍNH TOÁN SỐ PI 104
TÀI LIỆU THAM KHẢO 109
Trang 9vii
DANH MỤC BẢNG BIỂU
Bảng 1 – Tương ứng các hàm MPI trong C và C++ 58 Bảng 2 – Các hằng số toán tử 106
Trang 10viii
DANH MỤC HÌNH VẼ
Hình 1 – Các lĩnh vực ứng dụng của xử lý song song 2
Hình 2 - SISD 4
Hình 3 - SIMD 5
Hình 4 - MISD 5
Hình 5 - MIMD 6
Hình 6 – Xử lý đường ống 5 giai đoạn 6
Hình 7 – Mô hình bộ xử lý 2 nhân 9
Hình 8 - SMP 9
Hình 9 – Mô hình lưới tính toán 11
Hình 10 - MPP 12
Hình 11 – Thống kê về kiến trúc của 500 siêu máy tính 13
Hình 12 – Mô hình của HPC Cluster 14
Hình 13 – Rockstar cluster 15
Hình 14 – Kiến trúc của Rocks 17
Hình 15 – Một báo cáo sinh bởi Ganglia 19
Hình 16 – Màn hình khởi động 21
Hình 17 – Lựa chọn Roll (1) 22
Hình 18 – Lựa chọn Roll (2) 23
Hình 19 - Phân chia ổ 24
Hình 20 – Lựa chọn appliance type 25
Hình 21 – Vai trò trung tâm của cơ sở dữ liệu SQL 29
Trang 11ix
Hình 22 – Thao tác trực tiếp với cơ sở dữ liệu cluster 32
Hình 23 – Minh họa trực quan một phần của sơ đồ cơ sở 35
Hình 24 – Quá trình sinh file cơ sở 36
Hình 25 – Nhận diện appliance mới 37
Hình 26 – Đã thêm appliance vào cơ sở dữ liệu 37
Hình 27 – Đã yêu cầu thành công file cơ sở 38
Hình 28 – File cơ sở 39
Hình 29 – Các node trong cluster 40
Hình 30 – Tạo cặp khóa private, public trong lần đầu khởi động terminal 41
Hình 31 – SSH tới compute-0-0 42
Hình 32 – Giá trị tham số action với các node trong cluster 43
Hình 33 – Các bootaction hiện có 44
Hình 34 – Thêm bootaction 45
Hình 35 – Các thuộc tính của node compute-0-0 46
Hình 36 – Thay đổi giá trị tham số installaction 46
Hình 37 – Giá trị tham số installaction thay đổi 47
Hình 38 – Loại bỏ một bootaction 48
Hình 39 – Xem các cổng ethernet 49
Hình 40 – Mô hình bộ nhớ chia sẻ 51
Hình 41 – Mô hình đa luồng 52
Hình 42 – Mô hình truyền thông điệp 53
Hình 43 – Mô hình song song dữ liệu 54
Hình 44 – MPI trên Rocks 59
Trang 12x
Hình 45 – Output của chương trình Hello World (1) 61
Hình 46 – Output của chương trình Hello World (2) 62
Hình 47 – Output của chương trình Hello World (3) 63
Hình 48 – Output của chương trình Hello World (4) 64
Hình 49 – Trước khi chạy ứng dụng 87
Hình 50 – Sau khi chạy ứng dụng 88
Hình 51 – Output của hg clone 90
Hình 52 – Repository cục bộ 91
Hình 53 – Thư mục scratch của các Roll 92
Hình 54 – Thư mục scratch của Roll java 93
Hình 55 – Một phần sơ đồ cơ sở 95
Hình 56 – Minh họa việc liên lạc giữa các tiến trình 101
Hình 57 – Tính tích phân 103
Hình 58 – Tính toán số PI 104
Trang 131
CHƯƠNG 1 GIỚI THIỆU
“Đạt tới tốc độ tính toán 1 teraflop là bài toán lớn nhất trong khoa học máy tính trong 2 thập kỷ qua Chỉ mới 10 năm trước đây, những nhà lãnh đạo đáng tin cậy nhất trong ngành công nghiệp tính toán còn nói rằng điều đó là không thể.” (Gil Weigand)
[45]
Nếu chúng ta đã từng dùng Google để tìm kiếm thông tin trên Internet, thì hẳn sẽ có lúc chúng ta phải ngạc nhiên trước tốc độ xử lý của cỗ máy tìm kiếm này Mỗi một giây qua đi, Google tiếp nhận tới hàng nghìn yêu cầu tìm kiếm, và mỗi yêu cầu tìm kiếm đó cần phải được xử lý qua hàng chục tỷ phép tính với lượng dữ liệu truy cập lên đến hàng trăm Megabytes Ngoài một hệ thống cơ sở dữ liệu được thiết kế đặc biệt, cùng với những thuật toán khai phá dữ liệu được tối ưu hóa, thì bí mật đằng sau tốc độ xử lý của Google chính là hệ thống các cluster với tổng cộng khoảng 15000 máy tính trên toàn thế giới Google tối thiểu hóa thời gian xử lý đối với mỗi yêu cầu tìm kiếm bằng cách tiến hành xử lý song song mỗi yêu cầu đó Điều này cũng có nghĩa là Google sẽ xử lý được nhiều yêu cầu tìm kiếm hơn trong cùng một khoảng thời gian [6]
Google chính là một ví dụ điển hình về vai trò và sự thành công của xử lý song song trong ngành công nghiệp tính toán nói riêng và trong cuộc sống nói chung Trong thời đại thông tin bùng nổ, con người càng ngày càng trở nên bận rộn thì nhu cầu của xử lý song song ngày càng được nâng cao nhằm xử lý được một lượng dữ liệu lớn nhất trong thời gian nhanh nhất có thể Xử lý song song ngày càng được quan tâm trên thế giới vì 2 lý do chính sau đây:
Đạt được hiệu năng cao hơn trong khi tiết kiệm được thời gian và tiền bạc Về lý thuyết, càng đầu tư nhiều tài nguyên cho một nhiệm vụ nào đó thì càng rút ngắn được thời gian thực hiện nhiệm vụ đó, đồng thời tiết kiệm được càng nhiều chi phí Hơn nữa, nhiều hệ thống xử lý song song có thể được xây dựng từ những thành phần rẻ tiền và phổ biến
Khả năng xử lý các bài toán lớn Nhiều bài toán trong thực tế đòi hỏi tài nguyên tính toán lớn đến mức không một máy tính đơn lẻ nào có thể đáp ứng nổi Chẳng
Trang 142
hạn, các bài toán dạng "Grand Challenge" (Thách Thức Lớn) [16] như dự báo thời tiết, giải mã bộ gene người, yêu cầu những tài nguyên tính toán được tính bằng PetaFlops và PetaBytes [23]
Hình 1 – Các lĩnh vực ứng dụng của xử lý song song
Nguồn: [4]
Những nhu cầu này đã dẫn tới những cơ hội lớn cho xử lý song song, song những thách thức đi kèm cũng không hề nhỏ Cụ thể, sẽ khó khăn hơn trong việc phát triển các phần mềm phục vụ cho xử lý song song do thiếu các môi trường phát triển và các mô hình lập trình thống nhất và hiệu quả Việc phát triển thuật toán cũng khó khăn hơn do sự phức tạp của việc xử lý các tác vụ đồng thời Đó là chưa kể đến sự phát triển nhanh chóng của công nghệ phần cứng dẫn tới sự lạc hậu nhanh chóng của các kiến trúc xử lý song song Hệ quả gián tiếp của điều này chính là khả năng mở rộng của hệ thống bị giới hạn, do các thuật toán xử lý song song hiện hành có thể không còn phù hợp với các kiến trúc phần cứng của tương lai
Tại Việt Nam, đã có một vài hệ thống xử lý song song được nghiên cứu thành công
và đưa vào ứng dụng, đem lại hiệu quả bước đầu, như hệ thống máy tính bó song song do CADPRO thiết kế cho Trung tâm Quốc gia dự báo khí tượng thủy văn [2], hoặc các trung
Trang 153
tâm dữ liệu của FPT Telecom, CMC Telecom, Ngân hàng Sài Gòn Thương tín – Sacombank, Ngân hàng Đông Nam Á [3], … Tuy nhiên, số lượng không nhiều các hệ thống xử lý song song kiểu này đã chứng tỏ xử lý song song chưa thực sự phát triển mạnh
mẽ ở Việt Nam
Xét về mặt công nghệ, việc xây dựng, quản trị và ứng dụng một hệ thống xử lý song song cũng không phải dễ dàng Thông thường, chi phí phải trả cho việc quản trị một hệ thống xử lý song song trong 1 năm còn cao hơn nhiều so với chi phí bỏ ra để mua cả hệ thống Ví dụ, một cluster có tốc độ tính toán 1 TeraFlops có chi phí vào khoảng 100 nghìn US$, gần bằng chi phí phải trả cho một người quản trị hệ thống trong một năm [39]
Nghiên cứu về xử lý song song vì vậy không chỉ mang ý nghĩa khoa học, mà còn có
ý nghĩa thực tiễn rất lớn Việc nghiên cứu về xử lý song song, từ lý thuyết cho đến ứng dụng, không chỉ giúp chúng ta nắm được nền tảng công nghệ, mà còn giúp chúng ta nhìn thấy tiềm năng to lớn của xử lý song song trong công nghệ nói riêng và các lĩnh vực kinh
tế quốc dân nói chung
Khóa luận này tập trung nghiên cứu tổng quan về xử lý song song nói chung và nghiên cứu cách thức cài đặt, quản trị, kiến trúc hệ thống và ứng dụng của hệ thống cụm máy tính xử lý song song Rocks nói riêng Ngoài ra, tài liệu còn được đi kèm với một số ứng dụng MPI tiêu biểu, trong đó có ứng dụng chuyển đổi video mà nội dung chương 5 chính là mô tả chi tiết
Trang 164
CHƯƠNG 2 CÁC KIẾN TRÚC VÀ CÁC HỆ THỐNG XỬ
LÝ SONG SONG
2 1 Các kiến trúc xử lý song song
Vào năm 1966, Michael Flynn đã đưa ra cách phân loại các kiến trúc xử lý song
song dựa trên sự khác nhau về các dòng trong tiến trình tính toán Một dòng là một chuỗi các đối tượng (như dữ liệu), hoặc hành động (như các chỉ dẫn) Các dòng là độc lập với nhau Mỗi một phần tử trong dòng có thể chứa một hoặc nhiều đối tượng hoặc hành
động Trên cơ sở 2 dòng chính là dữ liệu và chỉ dẫn, Flynn đã đưa ra 4 tổ hợp, đại diện cho 4 kiểu kiến trúc xử lý song song khác nhau [8]:
SISD (Single Instruction, Single Data Stream - Đơn dòng chỉ dẫn, đơn dòng
dữ liệu) Đây thực chất chính là kiến trúc Von Neumann [1, 43]
Trang 18Kiến trúc SISD là kiến trúc quen thuộc nhất, cũng là kiến trúc ít song song nhất
Các hệ thống kiểu này chủ yếu xử lý theo kiểu đường ống, trong đó các giai đoạn khác nhau của tiến trình xử lý một chỉ dẫn được thực thi song song (kiến trúc này không song song hóa các tiến trình mà song song hóa các giai đoạn của việc thực thi tiến trình)
Hình 6 – Xử lý đường ống 5 giai đoạn
Trang 197
hiện động vào thời điểm chạy, còn với VLIW, việc phân tích là tĩnh vào thời điểm biên dịch Cả hai kiến trúc này đều có sự cân bằng giữa độ linh động (adaptability) và độ phức
tạp (complexity) – các bộ xử lý superscalar linh động nhưng phức tạp, còn các bộ xử lý
VLIW không linh động nhưng cũng không phức tạp Cả 2 kiến trúc đều sử dụng các phương pháp biên dịch như nhau nhằm đạt được hiệu năng cao
Xu hướng hiện tại đối với các bộ xử lý SISD là hướng tới kiến trúc superscalar nhằm tận dụng các công nghệ ILP sẵn có
2 1 2 SIMD
Lớp kiến trúc SIMD của các bộ xử lý bao gồm các bộ xử lý mảng (Array Processors) và bộ xử lý vectơ (Vector Processors) Các bộ xử lý này là câu trả lời tự nhiên cho việc sử dụng các cấu trúc dữ liệu thường gặp như vectơ và ma trận
Một bộ xử lý mảng bao gồm nhiều khối xử lý (PU - Processor Unit) hoạt động song song trên nhiều thành phần dữ liệu Một bộ xử lý vectơ bao gồm một khối xử lý hoạt động tuyến tính trên nhiều thành phần dữ liệu Cả 2 loại bộ xử lý đều sử dụng một phép toán (operation) để thực thi nhiều hành động (action) Một bộ xử lý mảng phụ thuộc vào kích thước lớn của tập dữ liệu đầu vào để đạt được hiệu năng cao (vì vậy thường các bộ
xử lý này thường được gọi là các bộ xử lý song song cực lớn (Massively Parallel Processors)) Một bộ xử lý mảng đặc trưng bao gồm từ hàng trăm đến hàng chục nghìn khối xử lý hoạt động cùng nhau Một bộ xử lý vectơ cũng phụ thuộc vào sự đơn điệu của các hành động tương tự như bộ xử lý mảng, nhưng trên một tập dữ liệu nhỏ hơn, đồng thời dựa vào phương pháp đường ống (pipelining) và nhịp đồng hồ cao nhằm giảm độ trễ của các phép toán
Trên thị trường hiện nay chưa có nhiều bộ xử lý được phát triển theo kiến trúc mảng
do nhu cầu không cao và hạn chế về số lượng ứng dụng Trong khi đó rất nhiều bộ xử lý theo kiến trúc vectơ đã được phát triển, đồng thời các bộ xử lý vectơ hiện đại là các bộ xử
lý có hiệu năng cao, có thể tuân theo các kiến trúc SIMD hoặc MIMD
2 1 3 MISD
Theo Flynn thì không tồn tại máy tính theo kiến trúc này [1]
Trang 208
2 1 4 MIMD
Kiến trúc MIMD là kiến trúc song song quen thuộc nhất, cũng là hình thức cơ bản nhất của các bộ xử lý song song Các bộ xử lý MIMD bao gồm nhiều khối xử lý được kết nối với nhau Không giống như các bộ xử lý SIMD, mỗi khối xử lý trong bộ xử lý MIMD thực thi hoàn toàn độc lập (mặc dù cùng một chương trình).Mặc dù về lý thuyết các khối
xử lý không cần phải giống nhau, nhưng thực tế hầu hết các hệ thống MIMD bao gồm các khối xử lý giống nhau
Việc liên lạc giữa các khối xử lý được thực hiện thông qua một không gian địa chỉ dùng chung (không gian địa chỉ này có thể là toàn cục, cũng có thể được phân chia giữa các khối xử lý, khi đó nó có tên gọi là bộ nhớ chia sẻ phân tán (Distributed Shared Memory) để phân biệt với bộ nhớ phân tán (Distributed Memory)) Cách xử lý này dẫn đến 2 vấn đề: Một là tính ổn định (consistency) và hai là tính thống nhất (coherence) của
dữ liệu Tính ổn định nói đến việc tham chiếu bộ nhớ – trên cả 2 phạm trù là trong một khối xử lý và giữa các khối xử lý Tính thống nhất yêu cầu tất cả các khối xử lý đều phải
“nhìn thấy” cùng 1 giá trị đối với cùng 1 địa chỉ vùng nhớ Tính ổn định là hiện, trong khi tính thống nhất là ẩn đối với người lập trình Thường thì tính ổn định có thể giải quyết bằng một sự phối hợp giữa các kỹ thuật về phần cứng và phần mềm, trong khi tính thống nhất lại được giải quyết bằng các kỹ thuật về phần cứng
Các hệ thống tuân theo kiến trúc MIMD bao gồm từ các bộ xử lý truyền thống đến các bộ xử lý độc lập hoạt động thông qua một mạng máy tính Sự khác nhau giữa các hệ thống này chủ yếu là giữa cách kết nối giữa các khối xử lý trên một bộ xử lý và cách kết nối giữa các bộ xử lý trên một mạng WAN Tuy nhiên, cả 2 kiểu hệ thống đều có sự cân bằng giữa độ trễ trong liên lạc và giới hạn kích thước của hệ thống
2 2 Các hệ thống xử lý song song
2 2 1 Các hệ thống tính toán đa nhân
Vi xử lý đa nhân (Multicore Processor) là vi xử lý bao gồm nhiều khối chức năng (Functional Unit, Execution Unit, hay “nhân”) Các vi xử lý đa nhân khác các vi xử lý siêu thang bậc (Superscalar Processor) ở chỗ, các vi xử lý đa nhân có thể thực thi nhiều chỉ dẫn từ nhiều nguồn trong một chu kỳ tính toán, còn các vi xử lý siêu thang bậc có thể
Trang 219
thực thi nhiều chỉ dẫn từ một nguồn trong một chu kỳ tính toán Mỗi nhân trong vi xử lý
đa nhân có thể là một vi xử lý siêu thang bậc con, theo nghĩa mỗi nhân này có thể thực thi nhiều chỉ dẫn từ một nguồn trong một chu kỳ tính toán
Trang 22Các hệ thống SMP có nhiều ứng dụng trong khoa học, công nghiệp và kinh doanh Tuy nhiên, những ứng dụng phổ biến nhất như các hệ xử lý văn bản hoặc các trò chơi trên máy tính thì lại được viết theo cách không tận dụng được lợi thế từ các hệ thống xử
lý đồng thời Chẳng hạn, với các trò chơi trên máy tính, nếu như được viết để có thể chạy tốt trên các hệ thống SMP, thì lại khiến hiệu năng giảm sút trên các hệ thống đơn vi xử lý (uniprocessor)
Các hệ thống đơn vi xử lý và các hệ thống SMP yêu cầu hai phương pháp lập trình khác nhau để đạt được hiệu năng cao nhất Vì thế nhà phát triển có thể sẽ phải phát triển
và bảo trì cả 2 phiên bản của cùng 1 ứng dụng Các ứng dụng chạy trên các hệ thống SMP có thể đạt được hiệu năng cao hơn so với khi chạy trên các hệ thống đơn vi xử lý, ngay cả khi chúng được viết ra dành cho các hệ thống đơn vi xử lý Nguyên nhân là vì các ngắt phần cứng thường tạm dừng việc thực thi ứng dụng, trong khi ứng dụng có thể tiếp tục được thực thi trên một bộ xử lý rỗi Đối với một số ứng dụng, đặc biệt là các trình biên dịch và các dự án tính toán phân tán, hiệu năng của ứng dụng được tăng lên khi thêm mới một bộ xử lý
Trong trường hợp có nhiều ứng dụng cùng chạy một lúc, một hệ thống SMP có thể cho hiệu năng tốt hơn một hệ thống đơn vi xử lý, do các ứng dụng có thể được đồng thời thực thi trên các bộ xử lý một cách đồng thời
Trang 2311
Các hệ thống tính toán lưới (Grid Computing) là hình thức “phân tán” nhất của tính toán song song Các hệ thống này bao gồm các máy tính hoàn chỉnh (có đầy đủ CPU, bộ nhớ, nguồn nuôi, card mạng) kết nối với một mạng (có thể là mạng riêng, mạng chung hoặc thậm chí là mạng internet), sử dụng các giao diện mạng truyền thống như Ethernet Đây là điểm khác biệt so với các siêu máy tính: Một siêu máy tính bao gồm nhiều bộ xử
lý được kết nối với nhau bởi một mạng cục bộ bao gồm các bus máy tính tốc độ cao
Hình 9 – Mô hình lưới tính toán
Nguồn: [44]
Ưu điểm lớn nhất của tính toán lưới đó là các điểm lưới (các máy tính tham gia tính toán) có thể là các máy tính phổ biến, cấu hình trung bình, giá thành rẻ Sau khi được nối với nhau thành một lưới tính toán thì hệ thống lưới này có thể cung cấp một hệ thống tài nguyên tính toán tương đương với một siêu máy tính nhưng giá rẻ hơn nhiều
Trong khi đó, nhược điểm lớn nhất của tính toán lưới lại nằm ở kết nối giữa các điểm lưới Tuy nhiên, các ứng dụng được xử lý song song trên nhiều điểm lưới một cách độc lập có thể đạt hiệu năng cao trên lưới, do mỗi điểm lưới không yêu cầu các kết quả trung gian từ các điểm lưới khác
Trang 2412
2 2 3 2 Các hệ thống xử lý song song cực lớn
Các hệ thống xử lý song song cực lớn (MPP – Massive Parallel Processing) là các
hệ thống lai giữa 2 mô hình bộ nhớ chia sẻ (Shared Memory) và bộ nhớ phân tán (Distributed Memory) Các hệ thống MPP khắc phục nhược điểm của mô hình bộ nhớ chia sẻ: Các CPU có bộ đệm (Cache) và bộ nhớ (Memory) riêng nên tránh được xung đột
bộ nhớ Đồng thời, MPP cũng khắc phục nhược điểm của mô hình bộ nhớ phân tán: Đường mạng kết nối có tốc độ cao hơn, độ trễ thấp, các bộ đệm cũng được kết nối với nhau và sử dụng phần cứng hỗ trợ
Trang 2513
kết nối mạng thích hợp Ở mức độ đơn giản nhất, khi hai hoặc nhiều hơn máy tính được
sử dụng cùng với nhau để giải quyết một vấn đề nào đó, hệ thống hai hoặc nhiều máy tính này được xem như một cluster Ở mức độ tổng quát, ta có thể định nghĩa cluster như
là một nhóm các máy tính độc lập có khả năng làm việc cùng nhau như một máy tính duy nhất, nhằm mục tiêu tăng cường sức mạnh tính toán, khả năng đáp ứng và giảm rủi ro khi xảy ra lỗi cục bộ cho các ứng dụng hoặc các dịch vụ
Trong số 500 siêu máy tính (danh sách cập nhật mới nhất là vào tháng 11 / 2009) thì hầu hết đều là các hệ thống cluster
Hình 11 – Thống kê về kiến trúc của 500 siêu máy tính
Nguồn: [45]
HPC Cluster, viết tắt của High Performance Computing Cluster, là loại cluster được
sử dụng để tăng cường hiệu năng cho các ứng dụng tính toán phức tạp bằng cách "chia nhỏ" các tác vụ tính toán này ra các máy con trong cluster Các cluster kiểu này thường chạy các chương trình được thiết kế đặc biệt để tận dụng khả năng tính toán song song của hệ thống Chúng được tối ưu hóa cho các tiến trình được thực thi đồng thời trên các máy con trong cluster, nhưng có "liên lạc" trong quá trình thực thi; các tiến trình này bao gồm cả những tác vụ tính toán phụ thuộc lẫn nhau (kết quả tính toán từ máy con này có tác động đến kết quả tính toán tiếp theo của máy con khác)
Trang 2614
HPC Cluster thường được dùng cho các bài toán khoa học nên còn có tên khác là Scientific Cluster Ngoài ra, có một loại HPC Cluster đặc thù sử dụng Linux làm hệ điều hành và các phần mềm miễn phí để cung cấp khả năng tính toán song song Loại HPC Cluster này được gọi là Beowulf Cluster "Các phần mềm miễn phí" nói đến ở đây bao gồm cả các API messaging phổ biến như Message Passing Interface (MPI) hoặc Parallel Virtual Machine (PVM) [29]
Hình 12 – Mô hình của HPC Cluster
Nguồn: [5]
Các hệ thống HPC Cluster đạt được hiệu năng cao là nhờ tăng cường được băng thông và giảm được độ trễ trên đường truyền Sở dĩ như vậy là vì chúng thường không sử dụng những giao thức mạng như TCP/IP Mặc dù TCP/IP rất lý tưởng cho mạng Internet, nhưng nó không thực sự phù hợp khi áp dụng cho một hệ thống các máy tính rất gần nhau, đặc biệt là khi các máy tính trong cluster được biết về sự hiện diện của nhau Thay
vì đó, nhiều hệ thống HPC tiến hành truy cập bộ nhớ trực tiếp (DMA - Direct Memory Access) giữa các máy con trong cluster Các máy con trong cluster có thể sử dụng chung
Trang 27Một trong số các hệ thống cluster tiêu biểu chính là Rocks Rocks ra đời tại Đại học California với mục tiêu đơn giản hóa quá trình xây dựng một cluster [18] Rocks là một
hệ thống tính toán cụm hết sức mạnh mẽ đã có lịch sử 10 năm phát triển [18] và 1632 cluster đã đăng ký [41] Sử dụng Rocks, các nhà phát triển có thể xây dựng một HPC Cluster hết sức nhanh chóng (cluster Rockstar (đứng thứ 201 trong danh sách 500 siêu máy tính, số liệu tháng 11/2003) được xây dựng trong vòng dưới 2 giờ [39]) Đây cũng là
lý do khóa luận nàyxem Rocks như một hệ thống xử lý song song tiêu biểu
Hình 13 – Rockstar cluster
Nguồn: [39]
Trang 28Một cluster được xây dựng bởi Rocks sẽ bao gồm 2 thành phần: Thành phần frontend (frontend node), được dùng để quản lý các gói phần mềm và các tác vụ tính toán trên cluster, và thành phần compute (compute node), cung cấp sức mạnh tính toán cho cluster
Quá trình xây dựng một cluster bằng Rocks có rất nhiều thuận lợi như dưới đây:
Tất cả các máy con (frontend node hoặc các compute node) đều yêu cầu tài nguyên ở mức trung bình, có thể dễ dàng đáp ứng được bởi một máy tính có cấu hình phổ biến hiện nay Rocks yêu cầu tối thiểu 30GB ổ cứng và 1GB bộ nhớ cho mỗi máy con Ngoài ra, đối với máy frontend, Rocks yêu cầu 2 cổng ethernet
Việc cài đặt máy frontend có thể thực hiện gần tương tự như cài đặt một máy Linux thông thường, toàn bộ các package cần cho quá trình cài đặt được chứa gọn trong một DVD không quá lớn về kích thước nếu như so với các DVD phân phối của các distro nổi tiếng như Fedora hay CentOS
Việc cài đặt các máy compute được thực hiện gần như tự động, do đó cho phép cài đặt hàng loạt các compute node, rút ngắn quá trình xây dựng cluster
Ngoài những thuận lợi về quá trình cài đặt, Rocks đem lại nhiều lợi thế trong việc xây dựng một cluster HPC, bao gồm:
Rocks có thể tùy biến Rocks không lệ thuộc vào các giải pháp của một nhà cung cấp cụ thể nào Trong quá trình cài đặt, có thể sửa lại cấu trúc ổ đĩa cho phù hợp với nhu cầu Thậm chí, người dùng còn có thể tùy biến kernel của Rocks để sử
Trang 293 1 2 Kiến trúc của HPC Cluster sử dụng Rocks
Xem xét sơ đồ dưới đây, chúng ta có thể thấy frontend node đóng vai trò như là giao diện giữa cluster và người sử dụng
Hình 14 – Kiến trúc của Rocks
Nguồn: [5]
Trang 30vụ tính toán), và các tác vụ chung cho tất cả các cluster (các tác vụ quản lý cluster) Một
hệ thống cluster Rocks cơ bản bao gồm 4 roll: Kernel, OS, Web Server và Base Các roll khác cung cấp các tác vụ nâng cao về tính toán, quản trị các tác vụ tính toán và quản trị cluster, như:
Roll SGE (SUN Grid Engine): Đây là một trong những Roll quan trọng nhất được phân phối kèm theo Rocks [7] Roll này chịu trách nhiệm lập lịch, điều hướng và quản lý các tác vụ của người dùng trên toàn cluster SGE được sử dụng rất rộng rãi trong các cluster hoặc các hệ thống tính toán lưới SGE giúp tận dụng tối đa sức mạnh xử lý song song trong hệ thống Việc quản lý SGE được thực hiện hoàn toàn bằng command line, nhưng cũng có thể được hiển thị dưới dạng hình ảnh, chẳng hạn thông qua Roll Ganglia
Roll Ganglia cho phép người quản trị và người dùng hệ thống có thể quản trị hiệu năng của cluster thông qua giao diện web trên máy frontend Các báo cáo sinh bởi Ganglia bao gồm số lượng node đang hoạt động và tỉ lệ CPU và bộ nhớ được sử dụng Ngoài ra Ganglia cũng cho phép người dùng xem các tác vụ đang nằm trong hàng đợi của cluster
Trang 3119
Hình 15 – Một báo cáo sinh bởi Ganglia
Trang 32Cấu hình yêu cầu tối thiểu để cài đặt frontend node là:
Do hạn chế về độ dài tài liệu nên ở đây chỉ lưu ý những bước cài đặt cơ bản
3 2 2 Cài đặt frontend
Khởi động frontend Mặc định frontend sẽ boot từ ổ DVD
Màn hình tùy chọn cài đặt hiện ra Gõ build rồi nhấn Enter Lưu ý màn hình này
chỉ hiện ra trong một thời gian ngắn, vì thế cần thao tác nhanh
Trang 3321
Hình 16 – Màn hình khởi động
Sau khi nạp các dữ liệu cần thiết cho quá trình cài đặt, Rocks sẽ yêu cầu người dùng chọn các Roll cần thiết
Trang 3422
Hình 17 – Lựa chọn Roll (1) Lưu ý chọn CD/DVD-based Roll, và ở màn hình tiếp theo, chọn 4 Roll: Base, OS,
Kernel và Web Server Có thể chọn thêm các Roll khác nếu muốn
Trang 3523
Hình 18 – Lựa chọn Roll (2) Sau khi nhấn Submit, tất cả các thông tin để mặc định Ở bước Disk Partitioning, chọn Auto
Trang 3624
Hình 19 - Phân chia ổ
Rocks sẽ tiến hành cài đặt trong một thời gian tương đối lâu Sau khi cài đặt xong Rocks sẽ tự khởi động lại, sau đó ta có thể đăng nhập với tài khoản root để bắt đầu sử dụng
3 2 3 Cài đặt hàng loạt các compute node
Khởi động Root Terminal trên frontend và gõ insert-ethers Chọn Compute và
nhấn OK
Trang 373 3 1 Quy tắc đặt tên của Rocks
Một cluster thường được tổ chức thành các Rack, trong mỗi Rack lại có một hoặc nhiều máy con (Rank) Các Rack này thường được đặt thành một hàng trên sàn Nếu như cluster là rất lớn, thì số lượng Rack trở nên khá nhiều, khi đó các Rack có thể được sắp thành nhiều hàng, tuy nhiên, bằng cách áp dụng quy tắc đếm từ trên xuống dưới, từ trái sang phải, ta luôn luôn có thể quan niệm các Rack trong trường hợp này được sắp thẳng hàng Còn các Rank trong mỗi Rack thì thường được xếp thành hàng dọc từ dưới lên Do đặc điểm này, chúng ta có thể quan niệm mỗi compute node trong cluster như một điểm trên hệ tọa độ Oxy mà Oy là trục ứng với các Rack, còn Ox là trục ứng với các Rank Đi
Trang 3826
từ trái sang phải (theo quy tắc đếm bên trên) chỉ số Rack tăng dần từ 0 Đi từ dưới lên trên, chỉ số Rank tăng dần từ 0 Áp dụng quan niệm này, Rocks mặc định đặt tên các compute node theo định dạng <basename>-<cabinet>-<chassis> với <basename>được định nghĩa là compute (do đó định dạng sẽ là compute-<rack>-<rank>, ví dụ compute-0-0 là máy ở Rack đầu tiên tính từ bên trái và Rank đầu tiên (của Rack đó) tính
từ bên dưới)
Do Rocks lưu thông tin của các compute node vào cơ sở dữ liệu, nên số lượng các Rack và Rank của một cluster là có giới hạn Tuy nhiên, con số này là rất lớn, vì Rocks dùng đến 11 chữ số để đánh chỉ số cho các node, vì thế về lý thuyết có thể coi như số lượng compute node là vô hạn Có thể khẳng định điều này bằng cách xem xét mô tả bảng nodes như dưới đây:
+ -+ -+ -+ -+ -+
| Field | Type | Null | Key | Default |
+ -+ -+ -+ -+ -+
| ID | int(11) | NO | PRI | NULL |
| Name | varchar(128) | YES | | NULL |
| Membership | int(11) | YES | | 2 |
| CPUs | int(11) | NO | | 1 |
| Rack | int(11) | YES | | NULL |
| Rank | int(11) | YES | | NULL |
| Arch | varchar(32) | YES | | NULL |
| OS | enum('linux','sunos') | NO | | linux |
| RunAction | varchar(64) | YES | | os |
| InstallAction | varchar(64) | YES | | install |
+ -+ -+ -+ -+ -+
Các giá trị lưu trong bảng nodes:
mysql> select Name, Membership, Rack, Rank, RunAction, InstallAction from nodes;
+ -+ -+ -+ -+ -+ -+
| Name | Membership | Rack | Rank | RunAction | InstallAction | + -+ -+ -+ -+ -+ -+
| cluster | 1 | 0 | 0 | os | install |
Trang 3927
| compute-0-0 | 2 | 0 | 0 | os | install |
| compute-0-1 | 2 | 0 | 1 | os | install | + -+ -+ -+ -+ -+ -+
3 rows in set (0.00 sec)
Thông thường khi cài đặt một cluster, người quản trị sẽ cài đặt hàng loạt các compute node theo từng Rack, nghĩa là, đầu tiên cài đặt hàng loạt các compute node trong Rack số 1 (index là 0) bằng cách bật các máy trong Rack theo thứ tự từ dưới lên, sau khi cài xong tiếp tục cài đặt các compute node trong rack số 2, Mặc dù về lý thuyết Rocks hỗ trợ việc cài đặt hàng loạt, nên ta có thể cài đặt một cluster hàng nghìn máy tính chỉ trong một thời gian không quá dài so với thời gian cài đặt một compute node thông thường, nhưng việc cài đặt theo từng rack giúp công việc quản trị và bảo trì các máy tính trong cluster dễ dàng hơn, vì nó cho phép ánh xạ một cách chính xác chỉ số Rack và Rank của từng compute node trong cơ sở dữ liệu với vị trí vật lý của compute node đó trong khu vực đặt cluster Để làm như vậy, người quản trị thực thi command sau để cài đặt các
compute node cho Rack thứ n + 1:
Trang 4028
Giá trị của <basename> trong định dạng bên trên được định nghĩa là compute, nên các compute node sẽ có tên bắt đầu bằng compute Để thay đổi giá trị này ta thực thi command:
insert-ethers basename mybasename
Tên được đặt của các compute node sẽ được dùng trong các tác vụ tính toán và quản trị về sau Chúng ta có thể kể ra đây 2 ví dụ về việc sử dụng tên này:
Ví dụ 1: Khi tính toán, để chỉ ra các compute node sẽ tham gia vào tác vụ tính toán, chúng ta sử dụng một file trong đó ghi tên của các compute node (có thể bao gồm cả frontend node mặc dù không khuyến khích điều này), mỗi tên một dòng:
compute-0-0
compute-0-1
localhost
(có thể dùng tham số -hosts để thay thế file danh sách cũng được)
Ví dụ 2: Khi quản trị, ta dùng tên đã đặt của compute node để quản trị node đó Ví
dụ, muốn xóa một compute node là compute-0-0 khỏi cluster ta thực thi command: rocks remove host compute-0-0
Sau đó update các file cấu hình nhờ lệnh
rocks sync config
3 3 2 Về cơ sở dữ liệu cluster
Rocks sử dụng một cơ sở dữ liệu MySQL để lưu giữ các thông tin về cluster Các thông tin này bao gồm: Các máy con (node), thông tin về các phân vùng, các tham số khởi động và một số thông tin khác Từ các thông tin này, một số file cấu hình liên quan
sẽ được sinh và sử dụng khi cần thiết Quá trình sinh file cấu hình diễn ra khi có bất kỳ máy con nào được thêm vào hay xóa khỏi cluster