ĐẠI HỌC THÁI NGUYÊN

TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

----------------

PHAN THỊ GIANG

NGHIÊN CỨU VÀ ỨNG DỤNG CÁC THUẬT TOÁN GIẢI CÁC BÀI TOÁN TÍNH TOÁN TRÊN

COMPUTER CLUSTER

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

Thái Nguyên - 2012

ii

LỜI CAM ĐOAN

Học viên xin khẳng định tất cả các kết quả được trình bày trong luận văn

là của riêng học viên, không sao chép từ bất kỳ một công trình nào khác. Nếu

có điều gì không trung thực, học viên xin hoàn toàn chịu trách nhiệm.

Học viên

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Phan Thị Giang

iii

LỜI CẢM ƠN

Luận văn được thực hiện tại trường Đại học Công nghệ Thông tin và

Truyền Thông – Đại học Thái Nguyên dưới sự hướng dẫn của GS.TS Nguyễn

Thanh Thuỷ.

Trước hết học viên xin bày tỏ lòng biết ơn sâu sắc tới thầy Nguyễn

Thanh Thuỷ, người đã có những định hướng, những kiến thức quý báu, những

lời động viên và chỉ bảo giúp học viên vượt qua những khó khăn để học viên

hoàn thành tốt luận văn của mình.

Học viên xin được bày tỏ lòng cảm ơn và sự kính trọng của mình đến các

thầy cô giáo Trường Đại học Công nghệ Thông tin và Truyền Thông, Đại học

Thái Nguyên, các thầy bên Viện Công nghệ thông tin, đặc biệt là các thầy cô

giáo đã giảng dạy và giúp đỡ học viên trong suốt quá trình học tập tại trường.

Học viên cũng đặc biệt cảm ơn tới bạn bè lớp Cao học K9, các đồng

nghiệp đã luôn động viên, giúp đỡ học viên trong quá trình học tập và công

tác, để học viên hoàn thành nhiệm vụ được giao.

Xin chân thành cảm ơn sự quan tâm, giúp đỡ, chia sẻ, động viên về tinh

thần và vật chất của người thân trong gia đình, bạn bè để học viên hoàn thành

luận văn.

Thái Nguyên, tháng 10 năm 2012

Học viên

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Phan Thị Giang

iv

MỤC LỤC

LỜI CAM ĐOAN ............................................................................................. 1

LỜI CẢM ƠN ................................................................................................. iii

MỤC LỤC ........................................................................................................ iv

MỞ ĐẦU ........................................................................................................... 1

1. Lý do chọn đề tài ........................................................................................ 1

2. Đối tượng và phạm vi nghiên cứu .............................................................. 1

3. Hướng nghiên cứu của đề tài ...................................................................... 1

4. Phương pháp nghiên cứu ............................................................................ 2

5. Ý nghĩa khoa học của đề tài ........................................................................ 2

6. Cấu trúc của luận văn ................................................................................. 2

Chƣơng 1. LÝ THUYẾT XỬ LÝ SONG SONG VÀ PHÂN TÁN .............. 3

1.1. Giới thiệu chung ...................................................................................... 3

1.2. Lý thuyết xử lý song song ....................................................................... 3

1.2.1. Khái niệm .......................................................................................... 3

1.2.2. Phân biệt xử lý song song với tuần tự ............................................... 3

1.2.3. Phân loại máy tính song song ............................................................ 6

1.2.4. Song song hóa trong máy tính tuần tự ............................................ 11

1.3. Lý thuyết xử lý phân tán ........................................................................ 14

1.3.1. Khái niệm ........................................................................................ 14

1.3.2. Tính toán phân tán ........................................................................... 15

1.4. Các phương pháp giải bài toán bằng xử lý song song và phân tán ....... 15

1.4.1. Mô hình gửi/nhận thông báo ........................................................... 16

1.4.3. Mô hình lập trình ............................................................................. 19

1.4.4. Lập trình trên cụm máy tính ............................................................ 23

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Chƣơng 2. CLUSTER VÀ TÍNH TOÁN PHÂN TÁN BẰNG CLUSTER26

v

2.1. Mô hình chung của hệ thống Cluster ..................................................... 26

2.1.1. Mô hình ........................................................................................... 26

2.1.2. Chế độ hoạt động của Cluster ......................................................... 27

2.1.3. Một số ứng dụng trong Cluster ....................................................... 29

2.2. Các ưu điểm của hệ thống Cluster ......................................................... 30

2.3. Các thành phần của Cluster Service ...................................................... 32

2.4. Nguyên tắc hoạt động của Server Cluster ............................................. 37

2.5. Cách cài đặt và cấu hình Cluster trên Linux .......................................... 42

2.5.1. Khái niệm LVS ................................................................................ 43

2.5.2. Các mô hình LVS ............................................................................ 44

2.5.3. Mô hình Virtual Server via NAT .................................................... 44

2.5.4. Mô hình Virtual Server via Tunneling ............................................ 45

2.5.5. Mô hình Virtual Server via Direct Routing .................................... 46

2.5.6. Cách triển khai các mô hình ............................................................ 47

2.5.7. Các bước triển khai LVS via Direct Routing .................................. 47

2.6. Tính toán phân tán bằng Cluster ............................................................ 53

2.6.1. Lập trình trên môi trường MPI ........................................................ 53

2.6.2. Cài đặt MPICH2 .............................................................................. 55

2.6.3. Tính toán trên MPI .......................................................................... 57

2.6.4. Các mô hình tương tác trong lập trình MPI .................................... 61

Chƣơng 3. CÀI ĐẶT THỬ NGHIỆM .......................................................... 66

3.1. Phương trình vi phân đạo hàm riêng ..................................................... 66

3.2. Phương trình Laplace ............................................................................. 67

3.3. Công thức lặp Jacobi ............................................................................. 69

3.3.1. Giá trị riêng của ma trận lặp Jacobi ................................................ 70

3.3.2. Tính toán Jacobi .............................................................................. 71

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

3.4. Song song hóa thuật toán ....................................................................... 73

vi

3.5. Kết quả thực hiện ................................................................................... 74

3.5.1. Thông tin chung về hệ thống .............................................................. 74

3.5.2. Giao diện và lệnh thực hiện............................................................. 74

3.5.3. Kết quả thực hiện tuần tự ................................................................ 77

3.5.4. Kết quả thực hiện thực hiện xử lý song song trên nhiều máy ......... 77

3.6. Nhận xét và đánh giá ............................................................................. 78

KẾT LUẬN VÀ KIẾN NGHỊ ....................................................................... 79

1. Kết luận ..................................................................................................... 79

2. Kiến nghị ................................................................................................... 79

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

TÀI LIỆU THAM KHẢO ............................................................................. 80

vii

DANH MỤC HÌNH VẼ

Hình 1.1. Mô hình xử lý tuần tự ........................................................................ 4

Hình 1.2. Mô hình xử lý song song ................................................................... 4

Hình 1.3. Mô hình của kiến trúc SISD .............................................................. 7

Hình 1.4. Mô hình của kiến trúc SIMD ............................................................ 8

Hình 1.5. Mô hình MISD .................................................................................. 8

Hình 1.6. Mô hình của kiến trúc MISD ............................................................ 9

Hình 1.6.1. Thực hiện tuần tự và hình ống của hai tiến trình gồm 4 giai đoạn 10

Hình 1.7. (a) Xử lý hình ống theo ALU, (b) Xử lý hình ống theo CU ........... 10

Hình 1.8. Mô hình của kiến trúc MIMD ......................................................... 11

Hình 1.9. Hệ thống bộ nhớ phân cấp .............................................................. 13

Hình 1.10. Dịch đơn chương trình, đa thao tác dữ liệu .................................. 20

Hình 1.11. Sự trao đổi thông điệp giữa hai tiến trình ..................................... 22

Hình 1.12. Sự trao đổi thông điệp của các máy tính trong hệ PVM ............... 24

Hình 1.13. Gọi hàm pvm_psend() và pvm_precv() ........................................ 25

Hình 2.1. Nguyên lý hoạt động của một Cluster ............................................. 28

Hình 2.2. Linux Virtual Server ....................................................................... 43

Hình 2.3. Mô hình Virtual Server via NAT ..................................................... 45

Hình 2.4. Mô hình Virtual Server via Tunneling ............................................ 46

Hình 2.5. Mô hình Virtual Server via Direct Routing ................................... 47

Hình 2.6. Mô hình chuẩn gồm 4 server ........................................................... 48

Hình 2.7. 6 vi xử lý kết nối với nhau thành hình tròn .................................... 63

Hình 2.8. Các vi-xử-lý kết nối với nhau thành lưới ........................................ 64

Hình 3.1. Miền Ω và đường biên ∂Ω .............................................................. 67

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Hình 3.2. Sai phân hữu hạn (Finite difference) .............................................. 68

viii

Hình 3.3. Phương trình Laplace/Poisson biểu diễn trên một hình lưới hình chữ

nhật với Nx x Ny điểm. .................................................................................... 69

Hình 3.4. Cấu trúc dải của ma trận lặp Jacobi cho phương trình Laplace/

Poisson ........................................................................................................... 70

Hình 3.5. Thực hiện tính toán Jacobi trên một đối tượng ............................... 73

Hình 3.6a. Đăng nhập vào trung tâm với tên ccs1.hnue.edu.vn ..................... 75

Hình 3.6b. Nhập thông tin tài khoản ............................................................... 75

Hình 3.6c. Sử dụng phần mềm winscp để đăng nhập vào hệ thống ............... 75

Hình 3.6d. Các file trên tài khoản đăng nhập vào hệ thống ............................ 76

Hình 3.7. Thời gian thực hiện trên tính toán tuần tự > 200s ............................ 77

Hình 3.8a. Lệnh qsub –q l1 –l nodes=2:ppn=4 Laplace.script trên 2 ............ 77

Hình 3.8b. Kết quả thời gian thực hiện ........................................................... 77

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Hình 3.8c. Kết quả lưu trữ trên tệp. dat .......................................................... 78

1

MỞ ĐẦU

1. Lý do chọn đề tài

Ngày nay có rất nhiều bài toán phức tạp và các ứng dụng thực tế cần

phải tính toán, giải trên một số lượng lớn các dữ liệu, nếu chúng ta sử dụng

máy tính thông thường để thực thi thì sẽ mất rất nhiều thời gian và công sức.

Để giải quyết được những khó khăn trên chúng ta có thể sử dụng một hệ

thống máy tính được kết nối với nhau gọi là Computer Cluster.

Trong cuốn luận văn này học viên đã thực hiện tìm hiểu cách thức xây

dựng một Computer Cluster cho việc giải quyết bài toán lớn (Phương trình

Laplace với công thức lặp Jacobi) bằng cách song song hóa để đưa ra sự so

sánh về thời gian thực hiện khi xử lý tuần tự.

2. Đối tƣợng và phạm vi nghiên cứu

- Lý thuyết xử lý song song, xử lý phân tán.

- Hệ thống Computer Cluster.

- Một số bài toán thực tế trong Khoa học kỹ thuật.

- Ngôn ngữ xử lý song song MPI (Message Passing Interface).

3. Hƣớng nghiên cứu của đề tài

- Nghiên cứu các lý thuyết xử lý song song, xử lý phân tán.

- Nghiên cứu cách xây dựng và vận hành Computer Cluster, tìm hiểu

các khả năng của Computer Cluster. Nghiên cứu cách cài đặt các thuật toán

xử lý song song trên Computer Cluster.

- Giải quyết một số bài toán thực tế trong khoa học kỹ thuật.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

- Tìm hiểu thêm về ngôn ngữ xử lý song song MPI.

2

4. Phƣơng pháp nghiên cứu

- Về lý thuyết:

+ Ứng dụng các kết quả của lý thuyết xử lý song song.

+ Nắm bắt cách thức xây dựng và hoạt động của Computer Cluster, từ đó

xây dựng và triển khai Computer Cluster theo yêu cầu của các bài toán.

+ Nghiên cứu triển khai các thuật toán xử lý song song trên Computer

Cluster.

- Về thực nghiệm:

+ Xây dựng và triển khai Computer Cluster.

+ Cài đặt liên quan tới bài toán thực tế.

5. Ý nghĩa khoa học của đề tài

Luận văn nghiên cứu chi tiết lý thuyết xử lý song song và xử lý phân tán,

nghiên cứu việc cài đặt hệ thống Cluster server và ứng dụng để giải phương

trình vi phân đạo hàm riêng Laplace, một phương trình có ứng dụng lớn trong

khoa học kỹ thuật và có cách giải rất phức tạp. Các kết quả khả quan thu được

sẽ minh chứng nói lên triển vọng tính toán song song của Computer Cluster.

6. Cấu trúc của luận văn

Nội dung của luận văn được chia thành 3 chương như sau:

Chương I: Lý thuyết xử lý song song và phân tán.

Chương II: Cluster và tính toán phân tán bằng Cluster.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Chương III: Cài đặt thử nghiệm.

3

Chƣơng 1

LÝ THUYẾT XỬ LÝ SONG SONG VÀ PHÂN TÁN

Trong chương này chúng ta sẽ tìm hiểu thế nào là xử lý song song và xử

lý phân tán. Đồng thời đưa ra các mô hình diễn tả cách thức hoạt động trong

việc xử lý dữ liệu.

1.1. Giới thiệu chung

Hiện nay lý thuyết xử lý song song và xử lý phân tán đang được quan

tâm và nghiên cứu để giải quyết những bài toán lớn và cần tốc độ tính toán

cao mà trước đó một máy tính không thể làm được. Nó là một vấn đề quan

tâm đối với các nhà nghiên cứu ngày nay để sử dụng chiến thuật hợp tác

tương tự trong việc xây dựng các siêu máy tính có thể thực hiện hàng nghìn tỉ

tính toán trong một giây. Hầu hết các siêu máy tính đều sử dụng phương pháp

xử lý song song, chứa một giàn các bộ vi xử lý cực nhanh, làm việc đồng loạt

để giải quyết những bài toán phức tạp, dữ liệu lớn như dự báo thời tiết hoặc

mô phỏng vụ nổ hạt nhân, vv…

1.2. Lý thuyết xử lý song song

1.2.1. Khái niệm

Xử lý song song là quá trình xử lý gồm nhiều tiến trình được kích hoạt

đồng thời và cùng tham gia giải quyết một bài toán, nói chung xử lý song

song được thực hiện trên những hệ thống đa bộ xử lý [7].

1.2.2. Phân biệt xử lý song song với tuần tự

Trong tính toán tuần tự với một bộ xử lý (BXL) thì tại mỗi thời điểm chỉ

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

thực hiện được một phép toán.

4

Hình 1.1: Mô hình xử lý tuần tự

- Bài toán được tách thành một chuỗi các câu lệnh rời rạc

- Các câu lệnh được thực hiện một cách tuần tự

- Tại mỗi thời điểm chỉ thực hiện được một câu lệnh

Trong tính toán song song thì nhiều BXL cùng kết hợp với nhau để giải

quyết một bài toán nên sẽ giảm được thời gian xử lý vì mỗi thời điểm có thể

thực hiện đồng thời nhiều phép toán.

Hình 1.2. Mô hình xử lý song song

Mục đích của xử lý song song: là thực hiện tính toán nhanh trên cơ sở

sử dụng nhiều BXL đồng thời. Cùng với tốc độ xử lý nhanh hơn, việc xử lý

song song cũng giải được những bài toán lớn hơn, phức tạp hơn.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Ba yếu tố chính dẫn đến việc xây dựng các hệ thống xử lý song song:

5

1. Hiện nay giá thành của phần cứng (CPU) giảm mạnh, tạo điều kiện để

xây dựng những hệ thống có nhiều BXL với giá thành hợp lý.

2. Sự phát triển của công nghệ mạch tích hợp (VLSI) cho phép tạo ra

những hệ thống có hàng triệu transistor trên một chip.

3. Tốc độ xử lý của các BXL theo kiểu Von Neumann đã dần tiến tới giới

hạn, không thể cải tiến thêm được do vậy dẫn tới đòi hỏi phải thực hiện

xử lý song song.

Những yếu tố trên thúc đẩy các nhà nghiên cứu phải tập trung khai thác

công nghệ xử lý song song. Vấn đề xử lý song song liên quan trực tiếp đến

kiến trúc máy tính, phần mềm hệ thống (hệ điều hành), thuật toán và ngôn

ngữ lập trình, v.v…

Một máy tính song song: là một tập các BXL (thường là cùng một loại)

kết nối với nhau theo một kiến trúc nào đó để có thể hợp tác trong hoạt động

và trao đổi dữ liệu được với nhau [5].

Các máy tính song song có thể phân thành nhiều loại dựa vào các đặc

trưng của các kiến trúc và việc tổ chức bộ nhớ. Phần lớn các hệ điều hành

ngày nay đều hỗ trợ đa xử lý/đa nhiệm và cho phép thực hiện việc xử lý song

song. Như vậy, để xử lý song song chúng ta phải có nhiều BXL (các đơn vị

tính toán độc lập) cùng hoạt động và quan trọng hơn là chúng ta phải thiết kế

các thuật toán để chúng cùng tham gia "giải quyết một bài toán". Nói cách

khác, những tiến trình thực hiện trên mỗi BXL phải trao đổi dữ liệu với nhau

để giải quyết một bài toán cho trước. Trường hợp ngược lại thì đó không phải

là xử lý song song. Chúng ta dễ nhận thấy là độ phức tạp của xử lý song song

sẽ lớn hơn xử lý tuần tự rất nhiều, tập trung chủ yếu ở phương diện truyền

thông và sự đồng bộ các tiến trình.

Một trong các mục đích chính của xử lý song song là nghiên cứu và xây

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

dựng những thuật toán thích hợp để cài đặt trên các máy tính song song, nghĩa

6

là phát triển các thuật toán song song. Câu hỏi tự nhiên là đánh giá một thuật

toán song song như thế nào được gọi là thích hợp cho xử lý song song? Đối

với thuật toán tuần tự thì chúng ta có thể thống nhất cách đánh giá dựa vào

thời gian thực hiện thuật toán, không gian bộ nhớ và khả năng lập trình, v.v...

Đánh giá thuật toán song song thì phức tạp hơn nhiều, ngoài những tiêu chuẩn

trên còn phải bổ sung thêm những tham số về số BXL, khả năng của các bộ

nhớ cục bộ, sơ đồ truyền thông và các giao thức đồng bộ hoá, v.v...

Để cài đặt các thuật toán song song trên các máy tính song song chúng ta

phải sử dụng những ngôn ngữ lập trình song song. Nhiều ngôn ngữ lập trình

song song đang được sử dụng như: Fortran 90, nCUBE C, Occam, C-Linda,

PVM với C/C++, CDC 6600, v.v...

1.2.3. Phân loại máy tính song song

Dựa vào các đặc tính về số lượng BXL, số chương trình thực hiện, cấu

trúc bộ nhớ, v.v..., Michael Flynn (1966) [8] đã đưa ra cách phân loại nổi

tiếng được nhiều người chấp nhận. Máy tính song song được phân chia thành

các loại:

+ SISD: Single Instruction Stream, Single Data Stream: Đơn luồng lệnh,

đơn luồng dữ liệu.

+ SIMD: Single Instruction Stream, Multiple Data Stream: Đơn luồng

lệnh, đa luồng dữ liệu.

+ MISD: Multiple Instruction Stream, Single Data Stream: Đa luồng

lệnh, đơn luồng dữ liệu.

+ MIMD: Multiple Instruction Stream, Multiple Data Stream: Đa luồng

lệnh, đa luồng dữ liệu.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

a) Mô hình SISD (Simple Instruction Simple Data)

7

Máy tính loại SISD chỉ có một CPU, ở mỗi thời điểm thực hiện một chỉ lệnh

và chỉ đọc, ghi một mục dữ liệu. Tất cả các máy tính SISD chỉ có một thanh ghi

register được gọi là bộ đếm chương trình được sử dụng để nạp địa chỉ của lệnh

tiếp theo khi xử lý tuần tự và kết quả là thực hiện theo một thứ tự xác định của các

câu lệnh. Hình 1.3 mô tả hoạt động của máy tính theo mô hình SISD.

Hình 1.3. Mô hình của kiến trúc SISD

Mô hình SISD còn được gọi là SPSD (Simple Program Simple Data),

đơn chương trình và đơn luồng dữ liệu.

b). Mô hình SIMD (Simple Instruction Multiple Data)

Máy tính loại SIMD có một đơn vị điều khiển để điều khiển nhiều đơn vị

xử lý (nhiều hơn một đơn vị) thực hiện theo một luồng các câu lệnh. CU phát

sinh tín hiệu điều khiển tới tất cả các phần tử xử lý, những BXL này cùng

thực hiện một phép toán trên các mục dữ liệu khác nhau, nghĩa là mỗi BXL có

luồng dữ liệu riêng.

Mô hình SIMD còn được gọi là SPMD, đơn chương trình và đa luồng dữ

liệu. Đây chính là mô hình máy tính phổ biến có trên thị trường như: DAP và

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Connection Machine CM-2.

8

Hình 1.4. Mô hình của kiến trúc SIMD

c) Mô hình MISD (Multiple Instruction Simple Data)

Máy tính loại MISD là ngược lại với SIMD. Máy tính MISD có thể thực

hiện nhiều chương trình (nhiều lệnh) trên cùng một mục dữ liệu, nên còn

được gọi là MPSD (đa chương trình, đơn luồng dữ liệu).

Hình 1.5. Mô hình MISD

Kiến trúc kiểu này có thể chia thành hai nhóm:

 Lớp các máy tính yêu cầu những đơn vị xử lý (PU) khác nhau có thể

nhận được những chỉ lệnh khác nhau để thực hiện trên cùng một mục

dữ liệu. Đây là kiến trúc khó và hiện nay chưa có loại máy tính nào

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

được sản xuất theo loại này.

9

Hình 1.6. Mô hình của kiến trúc MISD

 Lớp các máy tính có các luồng dữ liệu được gửi tuần tự theo dãy các

CPU liên tiếp. Đây là loại kiến trúc hình ống, xem xét như sau:

Nguyên lý hình ống (pipelined) dựa vào phương pháp phân đoạn hoặc

chia nhỏ một tiến trình tính toán thành một số đoạn nhỏ hơn để thực hiện

trong các pha liên tiếp. Tất cả các giai đoạn của một tiến trình được thực hiện

tuần tự, khi thực hiện xong thì bắt đầu thực hiện của tiến trình tiếp theo. Mỗi

pha thực hiện xong sẽ gửi kết quả cho pha tiếp theo. Như vậy, trong cách thực

hiện theo nguyên lý hình ống, khi một giai đoạn công việc đang thực hiện thì

một giai đoạn khác có thể nạp dữ liệu vào và dữ liệu vào của giai đoạn này có

thể là kết quả của giai đoạn trước nó.

Ví dụ, hình 1.6.1 mô tả một tiến trình được phân thành 4 giai đoạn thực

hiện tuần tự, nhưng có thể thực hiện song song theo nguyên lý hình ống để

tăng tốc độ tính toán khi phải thực hiện nhiều tiến trình như thế.

Một tiến trình được chia thành 4 giai đoạn:

Thực hiện tuần tự hai tiến trình phải qua 8 giai đoạn:

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Thực hiện theo hình ống hai tiến trình trên chỉ cần trải qua 5 giai đoạn:

10

Hình 1.6.1. Thực hiện tuần tự và hình ống của hai tiến trình gồm 4 giai

đoạn

Nếu ký hiệu Si là thời gian cần thiết để thực hiện giai đoạn thứ i thì:

Tổng thời gian tính toán tuần tự là: 2*(S1 + S2 + S3+ S4)

Tổng thời gian tính toán hình ống là: S1 + S2 + S3+ S4 + S4

Nguyên lý hình ống có thể áp dụng theo hai mức:

 Hình ống theo đơn vị số học: Các đơn vị số học và logic ALU được tổ

chức thành mảng, các phép toán bên trong được thực hiện theo nguyên

lý hình ống (hình 1.7.(a)).

 Hình ống theo đơn vị câu lệnh: Các đơn vị điều khiển CU được phân

đoạn và tổ chức theo hình ống (hình 1.7.(b)).

Hình 1.7.(a) Xử lý hình ống theo ALU (b) Xử lý hình ống theo CU

d) Mô hình MIMD (Multiple Instruction Multiple Data)

Máy tính loại MIMD còn gọi là đa BXL, trong đó mỗi BXL có thể thực

hiện những luồng lệnh (chương trình) khác nhau trên các luồng dữ liệu riêng.

Hầu hết các hệ thống MIMD đều có bộ nhớ riêng và cũng có thể truy cập vào

được bộ nhớ chung (global) khi cần, do vậy giảm thiểu được sự trao đổi giữa

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

các BXL trong hệ thống. Đây là kiến trúc phức tạp nhất, nhưng nó là mô hình

11

hỗ trợ xử lý song song cao nhất và đã có nhiều máy tính được sản xuất theo

Luồng dữ liệu 1

Luồng lệnh 1

CU 1

Phần tử xử lý 1

Luồng dữ liệu 2

Luồng lệnh 2

CU 2

Phần tử xử lý 2

. . .

. . .

Luồng dữ liệu n

Luồng lệnh n

CU n

Phần tử xử lý n

kiến trúc này, ví dụ: BBN Butterfly, Alliant FX, iSPC của Intel, v.v...

Hình 1.8. Mô hình của kiến trúc MIMD

1.2.4. Song song hóa trong máy tính tuần tự

Mục tiêu của xử lý song song là khai thác đến mức tối đa các khả năng

sử dụng của các thiết bị phần cứng nhằm giải quyết nhanh những bài toán đặt

ra trong thực tế. Nhưng cấu trúc phần cứng thường là trong suốt đối với

những người lập trình. Sau đây chúng ta tìm hiểu về kỹ thuật song song áp

dụng trong các máy tính có một BXL.

a) Đa đơn vị chức năng

Hầu hết các máy tính truyền thống chỉ có một đơn vị số học và logic

(ALU) trong BXL. Ở mỗi thời điểm nó chỉ có thể thực hiện một chức năng.

Nhiều máy tính thực tế hiện nay có thể có nhiều đơn vị chức năng (nhất là

những chức năng chuyên biệt) và những đơn vị này có thể thực hiện song

song được. Ví dụ máy CDC 6600 (thiết kế năm 1964) có 10 đơn vị chức năng

được tổ chức trong một BXL. Những đơn vị chức năng này độc lập với nhau

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

và do vậy có thể thực hiện đồng thời. Thường đó là các đơn vị thực hiện các

12

phép toán rất cơ bản như: phép cộng, nhân, chia, tăng giảm, các phép logic và

các phép dịch chuyển (shift). Với 10 đơn vị chức năng và 24 thanh ghi

(register), máy tính CDC 6600 có thể thực hiện tính toán với tốc độ tăng lên

đáng kể, đáp ứng được nhiều bài toán xử lý song song.

Vấn đề chính đối với những máy tính loại này là cần phải xây dựng bộ

lập lịch tối ưu để phân chia các câu lệnh thực hiện sao cho tận dụng được tối

đa các đơn vị chức năng cũng như các tài nguyên mà máy tính cung cấp.

b) Xử lý theo nguyên lý hình ống trong CPU

Nhiều pha thực hiện khác nhau của các câu lệnh có thể thực hiện theo

nguyên lý hình ống, ví dụ nạp cậu lệnh về từ bộ nhớ, giải mã (decode), xác

định các toán hạng, thực hiện các phép số học/logic và lưu trữ kết quả, v.v.

Những câu lệnh trong chương trình có thể thực hiện gối đầu nhau theo nguyên

lý hình ống và nó sẽ hiệu quả hơn khi dựa vào kỹ thuật tạo ra vùng đệm dữ

liệu. Bằng cách thực hiện như trên thì trong quá trình thực hiện của BXL có

thể thực hiện được nhiều câu lệnh gối đầu nhau trong cùng một thời gian.

Trước khi một câu lệnh kết thúc thực hiện thì câu lệnh tiếp theo đã có thể thực

hiện pha giải mã, câu lệnh khác lại có thể được nạp về, v.v...

c) Sự gối đầu CPU và các thao tác vào/ra (I/O)

Nhiều phép vào/ra có thể thực hiện đồng thời đối với nhiều nhiệm vụ

tính toán khác nhau bằng cách sử dụng những bộ điều khiển vào/ra, các kênh

hay những BXL vào/ra khác nhau.

Nhiều máy tính hiện nay có nhiều bộ điều khiển thiết bị vào/ra, cho phép

đa xử lý vào/ra do vậy tăng được tốc độ trao đổi dữ liệu giữa các thiết bị

ngoài với CPU.

d) Các hệ thống bộ nhớ phân cấp

Tốc độ các phép toán thực hiện trong BXL nhanh hơn rất nhiều so với

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

việc truy cập vào bộ nhớ và tốc độ truy cập vào bộ nhớ trong (RAM) nhanh

13

hơn rất nhiều so với việc truy cập vào bộ nhớ ngoài. Hệ thống bộ nhớ phân

cấp như thế có thể mô tả như hình 1.9.

Hình 1.9. Hệ thống bộ nhớ phân cấp

Các thanh ghi được sử dụng trực tiếp cho ALU. Bộ nhớ cache được xem

như vùng đệm giữa BXL và bộ nhớ chính. Sự song song hóa trong sự trao đổi

dữ liệu theo cấu trúc phân cấp là cách khai thác chung để cải tiến hiệu quả xử

lý của hệ thống. Ví dụ, trong khi dữ liệu được lấy từ bộ nhớ ngoài vào bộ nhớ

chính thì đồng thời có thể gửi dữ liệu từ cache vào cho CPU.

e) Đa chương trình và chia sẻ thời gian

Các hệ điều hành của máy tính đơn bộ xử lý cho phép thực hiện song

song dựa vào cách tiếp cận phần mềm. Trong cùng một khoảng thời gian, có

nhiều tiến trình cùng truy cập vào dữ liệu từ những thiết bị vào/ra chung (VD:

Cổng giao tiếp, Đĩa cứng, CD, …). Chúng ta biết rằng phần lớn các chương

trình đều có hai phần: phần vào/ra và các thành phần tính toán trong quá trình

xử lý. Các hệ điều hành đa chương trình luân phiên thực hiện các chương

trình khác nhau.

Để thực hiện việc này HĐH sử dụng Bộ lập lịch chia sẻ thời gian làm

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

nhiệm vụ phân chia CPU cho mỗi tiến trình một khoảng thời gian cố định

14

theo phương pháp quay vòng tròn. Bằng cách đó, tất cả các tiến trình đều

được sẵn sàng để thực hiện trên cơ sở được phép sử dụng CPU và những tài

nguyên khác của hệ thống.

Do vậy, về nguyên tắc việc phát triển những chương trình song song trên

máy đơn BXL thực hiện được nếu có hệ điều hành cho phép nhiều tiến trình

thực hiện, nghĩa là có thể xem hệ thống như là đa bộ xử lý.

Kết luận: Sự phát triển của công nghệ phần cứng dẫn tới xu thế xử lý

song song để đáp ứng các yêu cầu tính toán của nhiều bài toán trong thực tế.

Nhiều máy tính có kiến trúc song song như các loại máy tính kiểu SIMD,

MISD, MIMD ra đời tạo điều kiện cho công nghệ xử lý song song phát triển

cả về mặt công nghệ lẫn triển khai ứng dụng. Vấn đề xử lý song song cũng có

thể thực hiện được trên các máy tuần tự kiểu Von Neumann bằng cách sử dụng

nguyên lý xử lý hình ống hay chia sẻ thời gian, v.v...

1.3. Lý thuyết xử lý phân tán

1.3.1. Khái niệm

Xử lý phân tán bao gồm một loạt các hệ thống máy tính, sử dụng nhiều

hơn một máy tính, hoặc bộ xử lý để chạy một ứng dụng. Bao gồm xử lý song

song, trong đó một máy tính đơn sử dụng nhiều hơn một CPU để thực hiện

chương trình. Xử lý phân tán có thể sử dụng trong mạng LAN được thiết kế để

cho một chương trình đơn có thể chạy đồng thời ở các địa điểm khác nhau.

Một hình thức xử lý phân tán bao gồm cơ sở dữ liệu phân tán, cơ sở dữ

liệu trong đó dữ liệu được lưu trữ trên hai hoặc nhiều hệ thống máy tính. Hệ

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

thống cơ sở dữ liệu theo dõi các dữ liệu ở đó được phân phối tới người sử dụng.

15

1.3.2. Tính toán phân tán

Tính toán phân tán là những tính toán được thực hiện trên cơ sở kết hợp

khả năng tính toán và truyền thông của hai hay nhiều máy tính trên mạng.

Mô hình tính toán phân tán có những ưu điểm sau:

 Cho phép chia sẻ dữ liệu được lưu trữu ở nhiều máy tính khác nhau.

 Chia sẻ với nhau về một số chức năng chính của máy tính.

 Độ tin cậy cao hơn. Trong trường hợp có một máy tính bị trục trặc thì

những máy tính khác có thể thay thế để hoàn thành nhiệm vụ của hệ

thống.

 Tính kinh tế: thường đầu tư vào hệ phân tán sẽ thấp hơn đầu tư cho hệ

tập trung.

Tuy nhiên, hệ tính toán phân tán cũng đứng trước nhiều thách thức:

+ Những vấn đề liên quan đến việc quản trị hệ thống, vấn đề đảm bảo an

toàn hệ thống, bảo mật thông tin, v.v...

+ Xử lý trong các hệ thống phân tán không có bộ nhớ chia sẻ để trao đổi

dữ liệu với nhau. Sự trao đổi được thực hiện bằng cách gửi/nhận thông báo.

Hiện nay có nhiều công cụ lập trình được sử dụng cho tính toán phân tán

ở nhiều mức độ trừu tượng khác nhau, như PVM, MPI, vv...

1.4. Các phƣơng pháp giải bài toán bằng xử lý song song và phân tán

Những buổi đầu của tính toán với máy tính, tất cả các dữ liệu và mọi sự

tính toán đều thực hiện tập trung ở những máy tính lớn. Sau đó, với sự phát

triển của các máy tính PC, ngày càng nhiều dữ liệu được lưu trữ và được xử

lý ở những máy tính cá nhân. Những dữ liệu này cần phải được chia sẻ và các

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

tính toán ở nhiều nơi này cũng cần phải được kết hợp lại để giải quyết hiệu

16

quả hơn những bài toán đặt ra trong thực tế. Từ đó xuất hiện mô hình tính

toán phân tán [7].

1.4.1. Mô hình gửi/nhận thông báo

Giống như mô hình chia sẻ bộ nhớ, các đơn vị xử lý song song trong mô

hình gửi/nhận thông báo là các tiến trình. Tuy nhiên cũng có một số điểm

khác nhau giữa hai mô hình này, trong mô hình gửi/nhận thông báo:

 Các tiến trình có thể thực hiện trên những bộ xử lý khác nhau và không

truy cập được vào không gian bộ nhớ chia sẻ. Vì lý do này, những

chương trình trao đổi thông điệp với nhau còn được gọi là các chương

trình phân tán.

 Các chương trình phân tán trao đổi dữ liệu với nhau qua hệ thống mạng

cục bộ hoặc mạng diện rộng.

 Việc truyền thông và đồng bộ hóa hoạt động của các tiến trình được

thực hiện thông qua hai phương thức send() và receive().

 Tất cả các biến là cục bộ của các tiến trình. Vì thế, những vấn đề về

xung đột dữ liệu (cần phải khoá dữ liệu khi một tiến trình truy cập), hay

tranh chấp thông tin (bài toán loại trừ nhau) không xuất hiện trong mô

hình tính toán phân tán.

 Việc đồng bộ hoá các tiến trình của một chương trình song song được

thực hiện theo có chế gửi/nhận thông báo. Khi một tiến trình muốn gửi

một thông điệp thì nó phải chờ cho đến khi tiến trình nhận sẵn sàng

nhận thông điệp đó và ngược lại, cũng tương tự. Ở đây không có các

buffer để tạm lưu giữ các thông điệp cần trao đổi giữa các tiến trình.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

1.4.2. Mô hình tổng quát

17

Trong mô hình gửi/nhận thông báo các tiến trình chia sẻ với nhau kênh

truyền thông. Kênh (channel) là khái niệm trừu tượng của đường truyền thông

vật lý giữa các tiến trình.

Các kênh được truy cập bởi hai phương thức: send() và receive(). Để bắt

đầu trao đổi được với nhau thì một tiến trình phải gửi đi (send) một thông

điệp vào kênh truyền thông và có một tiến trình khác yêu cầu nhận (receive)

thông điệp đó. Sự trao đổi được hoàn tất khi dữ liệu đã được gửi từ địa chỉ

nguồn tới đích.

Có hai mô hình gửi/nhận thông báo:

- Gửi/nhận thông báo theo cơ chế dị bộ: Trong mô hình này, một kênh

truyền thông được giả thiết là có khả năng tiếp nhận không bị giới hạn. Khả

năng không giới hạn được cài đặt trong thực tế bằng cách sử dụng bộ đệm

(buffer) để tiếp nhận các thông điệp gửi đến cho mỗi tiến trình. Do vậy, tiến

trình gửi sẽ không phải chờ để tiến trình nhận sẵn sàng nhận mà cứ gửi khi có

dữ liệu. Ở đây, hai tiến trình gửi và nhận có thể hoạt động gần như độc lập với

nhau và thông điệp có thể nhận được sau một khoảng thời gian nào đó (lâu bất

kỳ) kể từ khi nó được gửi đi. Tuy nhiên, tiến trình nhận muốn nhận dữ liệu thì

phải chờ cho đến khi có thông điệp của một tiến trình khác gửi cho nó. Từ đó

dẫn đến một số yêu cầu sau:

o Khi tiến trình A gửi đi một thông điệp cho tiến trình B thì sau đó nó

cần phải được biết xem B có nhận được hay không, nghĩa là A phải

chờ để nhận được câu trả lời khẳng định của B.

o Việc phân phát thông điệp cũng không thể đảm bảo rằng không bị

thất bại. Nếu A gửi đi một thông điệp cho B và A không nhận được

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

câu trả lời từ B thì nó sẽ không biết là thông điệp đó đã được gửi đến

18

đích B hay chưa? (có thể là tiến trình B không nhận được hoặc câu trả

lời của B không đến được A).

o Tất cả các thông điệp đều phải đưa vào bộ đệm (hàng đợi), nhưng

trong thực tế không gian hàng đợi là hữu hạn. Khi có quá nhiều thông

điệp được gửi đi thì phương thức gửi sẽ bị chặn lại. Điều này vi phạm

ngữ nghĩa của mô hình gửi/nhận thông báo dị bộ.

- Gửi/nhận thông báo theo cơ chế đồng bộ: Trong mô hình này, tiến trình

gửi bị chặn lại cho đến khi tiến trình nhận sẵn sàng nhận. Ở đây, sự truyền

thông và đồng bộ hoá luôn gắn chặt với nhau. Mô hình này có thể tìm thấy ở

những hệ thống đa bộ xử lý được cài đặt dựa trên các Transputer. Mô hình

đầu tiên cho hệ thống trao đổi thông tin đồng bộ là CSP của Hoare [4].

Ưu điểm:

+ Làm cho nhiều vấn đề trong đồng bộ hoá và việc cấp phát bộ nhớ động

trở lên đơn giản hơn.

Nhược điểm:

+ Việc gắn chặt các tiến trình với thời gian phân phát thông điệp cũng

được xem như là điều kiện ràng buộc bổ sung đòi hỏi trong thiết kế và thực

thi chương trình.

+ Việc bắt tiến trình gửi phải chờ dẫn đến việc làm giảm tính đồng thời

của hệ thống.

+ Ngoài ra, để cài đặt hiệu quả các hệ thống truyền thông đồng bộ đòi

hỏi phải có những phần cứng đặc biệt để đảm bảo rằng sự truyền thông phải

cực nhanh và sự trao đổi dữ liệu không ảnh hưởng tới sự tính toán của hệ

thống. Mà các mạng truyền thông nhanh có nhiều nút mạng trao đổi dữ liệu

với nhau là rất đắt tiền. Vì những lý do trên, nên hệ gửi/nhận thông báo dị bộ

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

làm việc trên mạng cục bộ đã được phát triển mạnh mẽ hơn.

19

1.4.3. Mô hình lập trình

Trong phần này chúng ta định nghĩa mô hình lập trình cho hệ thống

gửi/nhận thông báo dị bộ.

Ở đây chúng ta xét các chức năng chính ở mức khái niệm như: tạo lập

nhiều tiến trình trong chương trình song song, định nghĩa các kênh truyền

thông, cơ chế ghi địa chỉ cho các tiến trình, và các chức năng đồng bộ, v.v...

Những hệ thống cụ thể, như PVM được đề cập đến ở phần sau.

Lập trình theo mô hình gửi/nhận thông báo trong hệ thống nhiều máy

tính có thể thực hiện theo ba cách:

1. Sử dụng ngôn ngữ lập trình song song đặc biệt, ví dụ Occam được thiết

kế để sử dụng với các Transputer (Inmos 1986).

2. Sử dụng ngôn ngữ lập trình bậc cao (tuần tự) được mở rộng bằng cách

bổ sung thêm các từ khoá và cú pháp mở rộng để xử lý việc trao đổi

thông điệp, ví dụ C, C++.

3. Sử dụng những ngôn ngữ lập trình bậc cao và các thư viện gồm những

thủ tục xử lý việc trao đổi thông điệp, ví dụ ngôn ngữ C/C++ và hệ

chương trình thư viện để chạy với PVM, MPI, PTHREAD, …

Chúng ta tập trung vào cách thứ ba. Trong hệ thống trao đổi thông điệp

thì vấn đề tạo lập các tiến trình để thực hiện trên những bộ xử lý khác nhau và

việc gửi, nhận thông điệp là quan trọng nhất.

Phát sinh các tiến trình con:

Một chức năng quan trọng trong lập trình song song là tạo lập ra nhiều

tiến trình để thực hiện những công việc con của một chương trình song song.

Nói chung, một chương trình bắt đầu thực hiện như một tiến trình và sau đó

phát sinh ra nhiều tiến trình con để khai thác khả năng song song của bài toán.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Có hai cách tạo lập tiến trình: tạo lập tĩnh và tạo lập động.

20

 Tạo lập tiến trình tĩnh: tất cả các tiến trình được xác định trước khi thực

hiện và hệ thống có một số tiến trình xác định trước. Trong các hệ

thống này thường có một tiến trình điều khiển còn được gọi là tiến trình

“chủ” (master), những tiến trình khác được gọi là tiến trình tớ (slave).

Đây là mô hình SPMD. Sau khi chương trình nguồn được viết với các

lệnh phân chia công việc cho từng tiến trình, nó sẽ được dịch sang mã

thực thi được cho những tiến trình đó. Quá trình này được mô tả như

Chương trình nguồn

Đoạn chương trình thực thi

Đoạn chương trình thực thi

Biên dịch theo các bộ xử lý

BXL n-1

BXL 0

hình sau:

Hình 1.10. Dịch đơn chương trình, đa thao tác dữ liệu

Ví dụ điển hình là hệ thư viện MPI được xây dựng theo cách tạo lập tĩnh

như trên.

 Tạo lập tiến trình động: các tiến trình được tạo lập sau đó chúng có thể

thực hiện trong các tiến trình khác. Các tiến trình có thể được tạo lập

mới hoặc bị huỷ bỏ có điều kiện và một số tiến trình có thể thay đổi

trong quá trình thực hiện. Mô hình cho phép thực hiện tạo lập động là

MPMD (MIMD), trong đó những chương trình khác nhau có thể thực

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

hiện trên những bộ xử lý khác nhau.

21

 Tất cả các hệ thư viện gửi/nhận thông báo đều có hàm phát sinh các

tiến trình con với cấu trúc tổng quát như sau:

spawn(prog:string, host:int, count:int, id[]:int)

 prog: tên chương trình được nạp xuống như là chương trình con. Kết

quả khi thực hiện thành công sẽ trả lại mảng id là địa chỉ của các tiến

trình được tạo ra để gửi/nhận thông báo. Mảng id có chỉ số từ 1, tiến

trình đầu tiên của chương trình song song có chỉ số là 0.

 host: tên của tiến trình mà ở đó các tiến trình con được tạo ra.

 count: số các đại diện của chương trình được tạo ra.

Các hàm send() và receive():

Việc gửi một thông điệp được thực hiện bằng cách xác định địa chỉ của

một hay tất cả các tiến trình nhận theo một kênh truyền thông. Để lựa chọn

thông điệp, tiến trình nhận có thể dựa vào tiến trình gửi, kênh truyền thông,

hay thẻ bài (tag) của thông điệp, v.v...

Lời gọi send() là không bị chặn, không phải chờ câu trả lời của nơi nhận.

Nhưng việc gọi receive() sẽ bị chặn lại, chỉ có thể tiếp tục khi có một thông

điệp tương ứng đã được gửi đến.

1. Gửi thông điệp cho một tiến trình id:

send(id:int, message:message_type);

send(id:int,tag:int,message:message_type);

2. Gửi thông điệp tới một kênh truyền thông: một thông điệp có thể gửi

cho tất cả các tiến trình trên cùng một kênh mych (my channel).

send(mych:channel, message:message_type);

3. Nhận thông điệp từ một kênh: để nhận một thông điệp đang chờ đợi từ

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

một kênh thì có thể sử dụng lời gọi hàm sau:

22

receive(mych:channel,message:message_type);

Nếu thông điệp được ghi thẻ thì tiến trình nhận có thể phân loại thông

điệp trong hộp nhận và chọn thông điệp theo thẻ xác định.

receive(id:int,tag:int,msg:message_type);

Ví dụ: send(destination_id,&x);

trong tiến trình nguồn và gọi:

receive(source_id,&y);

ở tiến trình đích để gửi giá trị dữ liệu x từ tiến trình nguồn (source-id) sang

biến y cho tiến trình đích. Tất nhiên là x, y phải có cùng kiểu (kiểu tương

Tiến trình 1

Tiến trình 2

x . . .send(2, &x); . . .

y . . .receive(1, &y); . . .

thích với nhau) và cùng kích cỡ.

Hình 1.11. Sự trao đổi thông điệp giữa hai tiến trình

Như đã phân tích, việc gửi và nhận thông điệp có thể thực hiện một cách

đồng bộ hoặc dị bộ. Trong trao đổi thông điệp đồng bộ, tiến trình gửi trước

tiên phải gửi đi yêu cầu gửi và nó phải chờ đến khi nhận được câu trả lời sẵn

sàng nhận của tiến trình đích thì mới tiến hành gửi. Ngược lại, khi có một tiến

trình muốn nhận một thông điệp thì nó phải chờ để có một tiến trình khác gửi

cho nó thì sau đó mới có thể thực hiên các công việc tiếp theo. Trong mô hình

dị bộ thì các thông điệp được gửi đi và được đưa vào bộ đệm để sau đó gửi

dần tới cho các tiến trình đích. Để linh hoạt cho việc trao đổi, người ta thường

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

gán cho mỗi thông điệp một thẻ bài (tag) và nó được sử dụng để phân biệt các

23

thông điệp trong quá trình trao đổi. Ví dụ: để gửi thông điệp x từ tiến trình số

1 tới tiến trình số 2 và gán cho y, ta viết:

send(&x,2,5);

ở tiến trình số 1 và ở tiến trình số 2 gọi:

receive(&y,1,5);

1.4.4. Lập trình trên cụm máy tính

Mô hình gửi/ nhận thông báo nêu trên được sử dụng rất hiệu quả để lập

trình song song theo cụm máy tính. Một môi trường cho hệ thống nhiều máy

tính, nhất là các cụm máy tính đã được phát triển và được sử dụng phổ biến

hiện nay là PVM (Oak Ridge National Laboratories). PVM cung cấp môi

trường phần mềm để gửi/nhận thông báo cho các hệ máy tính thuần nhất và cả

không thuần nhất. PVM có một tập hợp các hàm thư viện được viết bằng

C/C++ hoặc Fortran.

Mỗi chương trình được viết bằng C/C++, được biên dịch để chạy trên

những kiểu máy tính xác định trên mạng. Nếu mạng gồm những máy tính

cùng kiểu thì chương trình chỉ cần dịch 1 lần. Mỗi nút trong mạng(LAN) phải

truy cập đến hệ thống tệp chứa các chương trình đã được dịch để thực hiện.

Tập các máy tính được sử dụng trong mạng phải được định nghĩa theo

các mức ưu tiên để chạy các chương trình. Điều này được thực hiện trên tập

máy ảo song song PVM [1]. PVM là hệ thống cho phép một tuyển tập các

trạm máy tính không thuần nhất và các máy tính kết nối với nhau để xử lý

song song [8]. Cách thực hiện tốt nhất là tạo ra một danh sách tên gọi của các

máy tính và đặt ở hostfile. Tệp này được PVM đọc để thực hiện các chương

trình. Mỗi máy tính có thể chạy một hay nhiều tiến trình. Các chương trình

ứng dụng chạy trong các máy tính thông qua các tiến trình của PVM để trao

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

đổi với nhau trên mạng.

24

Máy tính trạm

`PVM

Chương trình ứng dụng

Máy tính trạm

Máy tính trạm

PVM

Trao đổi thông điệp trên mạng

PVM

Chương trình ứng dụng

Chương trình ứng dụng

Hình 1.12. Sự trao đổi thông điệp của các máy tính trong hệ PVM

Các chương trình của PVM thường được tổ chức theo mô hình chủ-tớ

(master-slave), trong đó tiến trình chủ được thực hiện trước tiên, sau đó các

tiến trình tớ sẽ được tạo ra trong tiến trình chủ đó. Hàm phát sinh tiến trình

mới trong PVM là: pvm_spawn(). Một tiến trình muốn tham gia vào hệ PVM

thì nó phải ghi danh bằng cách gọi hàm pvm_mytid(). Các tiến trình muốn

được huỷ bỏ thì gọi hàm pvm_exit().

Các chương trình trao đổi thông điệp với nhau thông qua các hàm

pvm_send() và pvm_recv(). Tất cả các thủ tục gửi đều không bị chặn (dị bộ)

còn các thủ tục nhận thì hoặc bị chặn (được đồng bộ) hoặc không bị chặn. Các

thao tác chính của việc gửi và nhận dữ liệu được thực hiện ở các bộ đệm

buffer.

Nếu dữ liệu được gửi đi là một danh sách các mục có cùng kiểu thì trong

PVM sử dụng pvm_psend() và pvm_precv(). Hình 1.13 mô tả hoạt động của

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

hai tiến trình trao đổi một mảng dữ liệu với nhau.

25

Tiến trình 1

send buffer

Tiến trình 2

Chờ thông điệp

Tiếp tục xử lý

. . . pvm_psend(); . . .

. . . pvm_precv(); . . .

Hình 1.13. Gọi hàm pvm_psend() và pvm_precv()

Khi dữ liệu gửi đi là phức tạp, gồm nhiều kiểu khác nhau thì chúng

phải được đóng gói lại (pack) để gửi đến buffer, sau đó tiến trình nhận lại mở

gói (unpack) để nhận về dữ liệu tương ứng. Đó là các hàm:

pvm_pkint() và pvm_upkint(): cho dữ liệu kiểu int

pvm_pkfloat() và pvm_upkfloat(): cho dữ liệu kiểu float

pvm_pkstr() và pvm_upkstr(): cho dữ liệu kiểu string, v.v.

Lưu ý: thứ tự mở gói để lấy dữ liệu ra phải đúng theo thứ tự mà chúng

được đóng gói ở tiến trình gửi. Bộ đệm buffer để gửi dữ liệu là mặc định và

nó phải được khởi tạo ở tiến trình gửi bằng lệnh pvm_inistend().

Tương tự, các lệnh khác về trao đổi thông điệp theo nhóm như:

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

pvm_bcast(), pvm_scatter(), pvm_gather(), pvm_reduce(), v.v...

26

Chƣơng 2

Trong chương I chúng ta đã nghiên cứu lý thuyết xử lý song song và xử

CLUSTER VÀ TÍNH TOÁN PHÂN TÁN BẰNG CLUSTER

lý phân tán, trong chương này chúng ta sẽ tìm hiểu một mô hình hiện thực hóa

các kiến trúc xử lý song song - Computer Server Cluster. Cụ thể chúng ta sẽ

tìm hiểu cách thức hoạt động của một Cluster, các bước xây dựng một Cluster

cũng như cách lập trình với thư viện xử lý song song MPI trên Cluster.

2.1. Mô hình chung của hệ thống Cluster

2.1.1. Mô hình

Server Cluster là một mô hình được đưa ra nhằm đáp ứng các nhu cầu

ngày càng gia tăng trong việc truy xuất các ứng dụng có tính chất quan trọng

như trí tuệ tính toán, thương mại điện tử, database … Các ứng dụng này phải

có khả năng chịu được lỗi cao, luôn đáp ứng được tính sẵn sàng và khả năng

có thể mở rộng hệ thống khi cần thiết. Các khả năng của Server Cluster giúp

cho hệ thống có thể tiếp tục hoạt động và cung cấp dịch vụ luôn sẵn sàng

ngay cả khi hệ thống có thể xảy ra lỗi như hỏng ổ đĩa hay server bị down.

Mô hình Server Cluster bao gồm nhiều server riêng lẻ được liên kết và

hoạt động cùng với nhau trong một hệ thống. Các Server này giao tiếp với

nhau để trao đổi thông tin lẫn nhau và giao tiếp với bên ngoài để thực hiện các

yêu cầu. Khi có lỗi xảy ra, các service trong Cluster hoạt động tương tác với

nhau để duy trì tính ổn định và tính sẵn sàng cao cho Cluster.

Cluster được tổ chức thành các nhóm gọi là các farm hay pack. Trong

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

hầu hết các trường hợp, các dịch vụ ở tầng trước và giữa được tổ chức thành

27

các farm sử dụng các clone, trong khi đó các dịch vụ tầng sau (back-end

services) được tổ chức thành các pack.

Cluster Farm là một nhóm các máy chủ chạy các dịch vụ giống nhau,

nhưng không dùng chung cơ sở dữ liệu. Được gọi là farm (trang trại) bởi vì

chúng xử lý bất cứ yêu cầu nào gửi đến cho chúng bằng các bản sao cơ sở dữ

liệu (tài nguyên) giống hệt nhau được lưu giữ cục bộ, chứ không dùng chung

một bản cơ sở dữ liệu. Cũng bởi tính chất này nên các máy chủ thành viên của

farm làm việc độc lập và chúng được gọi là clone (clone là máy tính được

thiết kế để mô phỏng chức năng của máy tính khác).

Cluster Pack là một nhóm các máy chủ hoạt động cùng với nhau và chia

sẻ với nhau các phần của cơ sở dữ liệu. Được gọi là pack (khối) vì sự hoạt

động của các máy chủ thành viên của pack có liên hệ chặt chẽ với nhau và

chúng làm việc theo một phương thức thống nhất để quản lý và duy trì các

dịch vụ.

2.1.2. Chế độ hoạt động của Cluster

Mỗi máy chủ trong Cluster được gọi là một nút (Cluster node), và có thể

được thiết lập ở chế độ chủ động (active) hay thụ động (passive). Khi một nút

ở chế độ chủ động, nó sẽ chủ động xử lý các yêu cầu. Khi một nút là thụ

động, nó sẽ nằm ở chế độ dự phòng nóng (stanby) chờ để sẵn sàng thay thế

cho một nút khác nếu bị hỏng. Nguyên lý hoạt động của Cluster có thể biểu

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

diễn như hình:

28

Hình 2.1. Nguyên lý hoạt động của một Cluster

Trong một Cluster có nhiều nút có thể kết hợp cả nút chủ động và nút

thụ động. Trong những mô hình loại này việc quyết định một nút được cấu

hình là chủ động hay thụ động rất quan trọng. Để hiểu lý do tại sao, hãy xem

xét các tình huống sau:

- Nếu một nút chủ động bị sự cố và có một nút thụ động đang sẵn sàng,

các ứng dụng và dịch vụ đang chạy trên nút hỏng có thể lập tức được chuyển

sang nút thụ động. Vì máy chủ đóng vai trò nút thụ động hiện tại chưa chạy

ứng dụng hay dịch vụ gì cả nên nó có thể gánh toàn bộ công việc của máy chủ

hỏng mà không ảnh hưởng gì đến các ứng dụng và dịch vụ cung cấp cho

người dùng cuối.

- Nếu tất cả các máy chủ trong Cluster là chủ động và có một nút bị sự

cố, các ứng dụng và dịch vụ đang chạy trên máy chủ hỏng sẽ phải chuyển

sang một máy chủ khác cũng đóng vai trò nút chủ động. Vì là nút chủ động

nên bình thường máy chủ này cũng phải đảm nhận một số ứng dụng hay dịch

vụ gì đó, khi có sự cố xảy ra thì nó sẽ phải gánh thêm công việc của máy chủ

hỏng. Do vậy để đảm bảo hệ thống hoạt động bình thường kể cả khi có sự cố

thì máy chủ trong Cluster cần phải có cấu hình dư ra đủ để có thể gánh thêm

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

khối lượng công việc của máy chủ khác khi cần. Trong cấu trúc Cluster mà

29

mỗi nút chủ động được dự phòng bởi một nút thụ động, các máy chủ cần có

cấu hình sao cho với khối lượng công việc trung bình chúng sử dụng hết

khoảng 50% CPU và dung lượng bộ nhớ. Trong cấu trúc Cluster mà số nút

chủ động nhiều hơn số nút bị động, các máy chủ cần có cấu hình tài nguyên

CPU và bộ nhớ mạnh hơn nữa để có thể xử lý được khối lượng công việc cần

thiết khi một nút nào đó bị hỏng.

Các nút trong một Cluster thường là một bộ phận của cùng một vùng

(domain) và có thể được cấu hình là máy điều khiển vùng (domain

controllers) hay máy chủ thành viên. Lý tưởng nhất là mỗi Cluster nhiều nút

có ít nhất hai nút làm máy điều khiển vùng và đảm nhiệm việc failover đối

với những dịch vụ vùng thiết yếu. Nếu không như vậy thì khả năng sẵn sàng

của các tài nguyên trên Cluster sẽ bị phụ thuộc vào khả năng sẵn sàng của các

máy điều khiển trong domain.

2.1.3. Một số ứng dụng trong Cluster

- Ứng dụng khoa học: Một ví dụ khá nổi bật về ứng dụng Cluster là công

ty Compagnie Générale de Géophysique (CGG) tại Pháp. CGG thực hiện việc

thăm dò địa chất và cung cấp các hình ảnh 3 chiều dưới lòng đất để giúp các

công ty khai thác dầu khí xác định trữ lượng các mỏ dầu. Giải pháp Cluster

của CGG bao gồm 512 máy chủ IBM xSeries 330 hai CPU Pentium III 1GHz

tại văn phòng ở Luân-đôn của công ty và 128 máy chủ như vậy ở Pari. Các

máy chủ chạy RedHat Linux và hai cụm Cluster được nối mạng với nhau, cho

phép CGG giải quyết các bài toán ở cả hai nơi. Cluster Linux của CGG có

khả năng tính toán 1,25 teraflop và đã giúp công ty tiết kiệm tới 50% chi phí

máy chủ.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

- Ứng dụng Internet: Các ISP lớn và các công ty thương mại điện tử với

30

cơ sở dữ liệu lớn cần tới hệ thống máy chủ với tính sẵn sàng cao, khả năng

cân bằng tải và nâng cấp dễ dàng.

- Xử lý đồ hoạ ba chiều và tạo hình ảnh chuyển động: Trường hợp của

nhóm tạo hiệu ứng đặc biệt cho phim Titanic nêu trên là một ví dụ.

Có thể phân loại Cluster theo chức năng như sau:

- Cluster xử lý phân tán: Các tác vụ (các đoạn code nhỏ) được thực hiện

trên nhiều máy nhỏ thay vì tập trung trong một máy siêu tính. Loại Cluster

này rất thích hợp cho các phân tích khoa học hay tài chính. Cluster xử lý lỗi

(Fail-over): Các Cluster được dùng để nâng độ sẵn sàng và khả năng phục vụ

của các mạng dịch vụ. Khi một ứng dụng hay máy chủ ngừng hoạt động, các

dịch vụ của nó được chuyển sang máy khác. Định danh của máy ngừng hoạt

động cũng được chuyển sang. Các failover Cluster được dùng làm máy chủ cơ

sở dữ liệu, mail server hay file server.

- Cluster xử lý lỗi (Fail-over): Các cluster được dùng để nâng độ sẵn

sàng và khả năng phục vụ của các mạng dịch vụ.

- Cluster cân bằng tải có độ sẵn sàng cao: Một ứng dụng nhất định có thể

chạy trên tất cả các máy tính và một máy tính trong nhóm có thể chứa nhiều

ứng dụng. Bên ngoài chỉ giao tiếp với Cluster, mỗi máy tính trong nhóm là ẩn

với người dùng. Loại này không yêu cầu chỉnh sửa ứng dụng, làm việc tốt

nhất với các ứng dụng không cần lưu trạng thái và có thể chạy đồng thời.

2.2. Các ƣu điểm của hệ thống Cluster

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

 Cung cấp tính sẵn sàng cao:

31

o Hệ thống Server Cluster cung cấp tính luôn sẵng sàng cho các ứng

dụng và các service ngay cả khi các thành phần hardware hay

software bị lỗi.

o Khi một server trong Cluster bị fail, quyền sở hữu tài nguyên của nó

như là các ổ đĩa và IP address tự động chuyển tới một server khác

còn hoạt động.

 Cung cấp khả năng dễ mở rộng:

o Khi các ứng dụng trong Cluster sử dụng tài nguyên hệ thống vượt

quá khả năng của nó, ta có thể dễ dàng add thêm node vào Cluster

để đáp ứng nhu cầu truy cập hay dễ dàng thêm vào nhiều bộ xử lý (

8 CPU cho Windows Server 2003 Enterprise Edition và 32 CPU cho

Windows Server Datacenter Edition) hoặc thêm bộ nhớ RAM (8GB

cho Windows Server 2003 Enterprise Edition và 64GB cho

Datacenter Edititon).

 Cung cấp sự dễ dàng trong quản lý:

o Ta có thể dùng Cluster Administrator tools để quản lý một Cluster

như là một hệ thống đơn và quản lý một ứng dụng khi chúng chạy

trên một server đơn.

o Có thể di chuyển các ứng dụng giữa các server khác nhau bên trong

một Cluster.

o Có thể chuyển đổi lượng công việc giữa các server hay đặt server ở

trạng thái không hoạt động cho kế hoạch bảo trì.

o Có thể giám sát trạng thái của Cluster, tất cả các node và tài nguyên

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

từ bất kỳ nơi nào trong mạng.

32

2.3. Các thành phần của Cluster Service

Cluster service chạy trên mỗi node trong server Cluster và điều khiển

mọi hoạt động của server Cluster. Cluster service bao gồm nhiều thành phần

software làm việc cùng với nhau. Các thành phần này thực hiện việc theo dõi,

duy trì tính ổn định và vận chuyển các resource từ một node qua một node

khác:

 Resource DLLs: Mỗi ứng dụng chịu trách nhiệm theo dõi và điều

khiển ứng dụng đó. Ví dụ: Resource DLL sao lưu và phục hồi các

thuộc tính của ứng dụng trong Cluster database, mang resource online,

offline và kiểm tra trạng thái của resource đó. Khi cần thiết phải thực

hiện failover, Resource DLL làm việc cùng với Resource Monitor và

Failover Manager để đảm bảo quá trình failover được thực hiện dễ

dàng.

 Checkpoint Manage: Để đảm bảo cho việc Cluster service có thể phục

hồi từ một resource bị lỗi, Checkpoint Manager kiểm tra các khóa

registry khi một resource được mang online và ghi dữ liệu checkpoint

lên quorum resource khi resource này offline. Một vài ứng dụng chứa

thông tin cấu hình tại cục bộ thay cho việc chứa thông tin trong cơ sở

dữ liệu cấu hình Cluster. Nếu một ứng dụng yêu cầu chứa đựng cục bộ

thông tin có thể failover, Checkpoint Manager cung cấp cho yêu cầu

này bằng cách duy trì một bản sao của thông tin cục bộ hiện hành này

trên Quorum resource. Đối với các ứng dụng chứa thông tin cấu hình

trong registry trên server, Checkpoint Manager theo dõi dữ liệu này khi

ứng dụng đang online. Khi có sự thay đổi xảy ra, Checkpoint Manager

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

cập nhật quorum resource với dữ liệu cấu hình hiện hành.

33

 Database Manager: Chạy trên mỗi node và duy trì một bản sao lưu cục

bộ của cơ sở dữ liệu cấu hình Cluster - chứa những thông tin về những

thực thể vật lý và logic trong một Cluster. Những thực thể này bao gồm

bản thân Cluster, các node thành viên, các resource group, các loại

resource và những mô tả của các loại resource đặc biệt như là các ổ đĩa

và địa chỉ IP. Database Manager dùng Global Update Manager cho việc

cập nhật lẫn nhau (replicate) tất cả những thay đổi tới các node khác

trong Cluster. Theo cách này, những thông tin cấu hình được duy trì

qua Cluster nay cả khi một node bị hỏng và khi Administrator thay đổi

cấu hình Cluster trước khi node đó quay trở lại phục vụ. Database

Manager cũng cung cấp một interface chứa những thay đổi trong cơ sở

dữ liệu cấu hình Cluster thông qua các thành phần Cluster service khác

như là Failover Manager và Node Manager. Interface này dùng để tạo

ra những thay đổi tương tự như interface dùng để tạo ra những thay đổi

tới registry qua Windows Programming Interface (API). Những thay

đổi khác này được Database Manager tiếp nhận để cập nhật cho các

node khác trong Cluster qua Global Update Manager.

 Event Log Replication Manager: Là một phần của Cluster service làm

việc cùng với Event Log Service để sao chép các event log tới tất cả

các node trong Cluster. Các sự kiện này được đánh dấu để cho thấy

node nào mà sự kiện xảy ra trên đó. Các sự kiện được ghi lại trên một

node được sắp xếp, củng cố và gửi qua Event Log Replication Manager

để broadcast tới các node đang hoạt động khác. Nếu một vài sự kiện

được ghi lại trong một khoảng thời gian, mỗi sự kiện có thể broadcast

một cách riêng lẻ, nhưng nếu nhiều sự kiện được ghi lại trong một

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

khoảng thời gian ngắn, chúng được kết hợp với nhau trước khi

34

broadcast. Các sự kiện được dán nhãn để cho biết node nào chúng được

xảy ra. Các node khác tiếp nhận các sự kiện và ghi chúng lên local log.

 Failover Manager: Quản lý các resource và các resource group. Nó

chịu trách nhiệm tắt hay khởi động các resource, quản lý các resource

liên quan và chuẩn bị cho một quá trình failover các resource group. Để

thực hiện các hoạt động này, nó tiếp nhận resource và thông tin trạng

thái hệ thống từ các thành phần Cluster trên một node và từ Resource

Monitors. Resource Monitors cung cấp môi trường thực hiện cho

resource DLLs và cung cấp sự giao tiếp giữa resource DLLs và

Failover Manager. Failover Manager xác định node nào trong Cluster

nên sở hữu resource group. Khi cần thiết phải failover một resource

group, Failover Manager trên mỗi node trong Cluster làm việc cùng

nhau để tái chỉ định quyền sở hữu cho resource group đó. Dựa trên cách

mà resource group được cấu hình, Failover Manager có thể cục bộ khởi

động lại resource bị hỏng hay có thể làm cho resource đó offline đối

với các resource liên quan với nó và sau đó chuẩn bị cho một quá trình

failover.

 Global Update Manager: Được dùng bởi các thành phần bên trong

Cluster như là Failover Manager hay Database Manager để mang

những cập nhật thay đổi tới mỗi node trong Cluster. Khi quá trình cập

nhật xảy ra, nó bắt đầu tại một node client và một node khác được bổ

nhiệm theo dõi việc cập nhật để đảm bảo việc cập nhật được xảy ra trên

tất cả các node. Node client yêu cầu node này gửi tới một global lock

để thực hiện cập nhật. Nếu lock này chưa sẵn sàng, nó sẽ chờ. Khi lock

này sẵn sàng node giám sát sẽ gán cho node client và chỉ định cập nhật

tại cục bộ. Nếu node này cập nhật thành công mà quá trình update bị lỗi

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

trên một node khác thì node này sẽ bị loại bỏ khỏi danh sách các node

35

đang hoạt động và sự cập nhật tiến hành trên các node còn hoạt động

khác. Nếu việc này xảy ra, quorum log sẽ được ghi lại để đảm bảo rằng

node bị lỗi có thể nhận được tất cả các thông tin cấu hình cần thiết khi

nó quay trở lại hoạt động.

 Log Manager: Cùng với Checkpoint Manager tương tác với nhau đảm

bảo rằng recover log trên quorum resource chứa đựng dữ liệu cấu hình

mới nhất và các checkpoint thay đổi. Nếu một hay nhiều node trong

Cluster bị hỏng, các node còn hoạt động khác vẫn có thể thực hiện thay

đổi cấu hình. Khi những node này bị hỏng, Database Manager sử dụng

Log Manager để ghi lại sự thay đổi cấu hình lên Quorum resource. Khi

các node bị lỗi quay trở lại phục vụ, chúng đọc vị trí của quorum

resource trong local Cluster. Các cơ chế được xây dựng bên trong sẽ dò

tìm trong cơ sở dữ liệu cũ những quorum resource nào không đúng. Sau

đó Database Manager sẽ yêu cầu Log Manager cập nhật bản sao cục bộ

của Cluster sử dụng file checkpoint trong Quorum resource và sau đó

đối chiếu với file log trong Quorum disk. Kết quả là hoàn thành việc

cập nhật Cluster.

 Membership Manager: Chịu trách nhiệm duy trì một một cái nhìn nhất

quán về các node trong Cluster hiện đang hoạt động hay bị hỏng tại

một thời điểm nhất định. Trọng tâm của thành phần này là thuật toán

regroup được yêu cầu thực hiện bất cứ khi nào có dấu hiệu của một hay

nhiều node bị lỗi.

 Node Manager: Chạy trên mỗi node và duy trì một danh sách cục bộ

các node, các network, các network interface trong Cluster. Qua sự giao

tiếp giữa các node, Node Manager đảm bảo cho tất cả các node có cùng

một danh sách các node đang hoạt động. Node Manager dùng những

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

thông tin trong cơ sở dữ liệu cấu hình Cluster để xác định các node nào

36

được thêm vào hay bị loại bỏ khỏi Cluster. Node Manager trên mỗi

node cũng theo dõi các node khác để tìm ra node bị lỗi. Để thực hiện

việc theo dõi, nó gửi và nhận những message gọi là các heartbeat tới

mỗi node trong Cluster. Nếu một node có một sự giao tiếp bị lỗi với

một node khác, nó gửi broadcast một message tới các node khác sao

cho tất cả các node nhận message này để xác nhận lại danh sách các

node đang hoạt động trong Cluster. Quá trình này gọi là một regroup

event. Node Manager cũng tham gia vào quá trình một node tham gia

vào Cluster. Tại thời điểm một node được thêm vào Cluster, Node

Manager trên node đó thành lập một quá trình giao tiếp với các Node

Manager trên các node khác để thực hiện quá trình chứng thực.

 Resource Monitor: Cung cấp một interface giao tiếp giữa resource

DLLs và Cluster service. Khi Cluster cần lấy dữ liệu từ một resource,

Resource Monitor tiếp nhận yêu cầu và đẩy yêu cầu đó tới resource

DLL thích hợp. Ngược lại, khi một resource DLL cần báo cáo trạng

thái của nó hoặc thông báo cho Cluster service một sự kiện, resource

đẩy thông tin này từ resource tới Cluster service.

 Backup/Restore Manager: Cluster service đưa ra một API dùng để

backup cơ sở dữ liệu Cluster, BackupClusterDatabase. Backup Cluster

Database trước tiên tương tác với Failover Manager, sau đó đẩy yêu

cầu tới node sở hữu quorum resource. Database Manager trên node đó

sẽ được yêu cầu và sau đó tạo một bản backup cho quorum log file và

các file checkpoint.

Cluster service cũng đưa ra một API khác, Restore Cluster Database để

restore cơ sở dữ liệu Cluster từ một backup path. API này có thể chỉ được yêu

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

cầu tại cục bộ từ một trong các node của Cluster. Khi API được yêu cầu,

37

trước tiên nó tắt Cluster service, restore cơ sở dử liệu Cluster từ bản backup,

tạo một giá trị registry chứa backup path và sau đó khởi động lại Cluster

service. Cluster service khi khởi động sẽ dò tìm yêu cầu restore và tiến hành

restore cơ sở dữ liệu Cluster từ backup path tới Quorum resource.

2.4. Nguyên tắc hoạt động của Server Cluster

Khi một node hay một application trong Cluster bị fail, Server Cluster có

thể phản ứng bằng cách khởi động lại application bị lỗi hay phân tán công

việc từ node bị fail tới các node khác còn hoạt động trong Cluster đó.

Cluster service kiểm tra tình trạng không hoạt động của các resource

riêng biệt hay một node, và tự động di chuyển hay khởi động lại các ứng

dụng, dữ liệu và file resource tới một node còn hoạt động trong Cluster. Quá

trình này cho phép các resource như là database, file share và application duy

trì tính sẵn sàng cao cho các ứng dụng của user và client.

 Detect Node Failure: Một cách định kỳ, mỗi node trao đổi các gói

message với những node khác trong Cluster sử dụng private Cluster

network. Những message này được gọi là Heartbeat. Sự trao đổi

Heartbeat cho phép mỗi node kiểm tra tính sẵng sàng của các node

khác và các ứng dụng của chúng. Nếu một server bị fail trong việc phản

hồi 1 Heartbeat, các server còn hoạt động bắt đầu một quá trình

Failover để đàm phán quyền sở hữu đối với các tài nguyên và ứng dụng

của node bị fail. Việc đàm phán này sử dụng Challenge và Defense

protocol.

Việc bị fail trong quá trình phản hồi Heartbeat có thể xảy ra trong nhiều

sự kiện như là computer failure, network interface failure, network

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

failure, hay trong lúc hoạt động cao bất thường nào đó. Thông thường,

38

khi tất cả các node giao tiếp với nhau, Configuration Database Manager

gửi Global Configuration Database update tới mỗi node. Tuy nhiên, khi

fail trong quá trình trao đổi heartbeat xảy ra, Log Manager cũng lưu lại

cấu hình database thay đổi tới Quorum Resource. Nó đảm bảo các node

còn hoạt động có thể truy cập thông tin cấu hình Cluster mới nhất và dữ

liệu registry cục bộ trên node trong quá trình phục hồi.

 Detect Resource Failure: Failover Manager và Resource Monitors làm

việc cùng với nhau để dò tìm và khôi phục resource bị fail. Resource

Monitors theo dõi trạng thái của resource bằng cách kiểm tra định kỳ

các resource sử dụng Resource DLLs. Việc kiểm tra vòng gồm hai

bước, một query LookAlive lướt qua và một query lâu hơn, cuối cùng -

IsAlive. Khi Resource Monitor dò tìm một resource bị fail, nó thông

báo cho Failover Manager và tiếp tục giám sát resource này.

Failover Manager duy trì trạng thái của các resource và resource group.

Nó cũng chịu trách nhiệm thực hiện việc phục hồi khi một resource bị fail và

sẽ yêu cầu Resource Monitor phản hồi tới user tình trạng hoạt động hay

không hoạt động của resource.

Sau khi resource bị fail được tìm thấy, Failover Manager có thể thực

hiện việc phục hồi bằng cách khởi động lại một resource và các resource hay

di chuyển toàn bộ resource group tới một node khác. Công việc phục hồi xác

định đã được thực hiện bởi resource và resource group properties và node

availability.

Trong quá trình failover, một resource group được coi như là một

failover unit, để đảm bảo resource được phục hồi đúng. Khi một resource

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

được phục hồi từ trạng thái fail, Resource Monitor thông báo tới Failover

39

Manager để tự động thực hiện quá trình failback các resource group dựa trên

cấu hình của resource group failback properties.

 Heartbeat: Là một UDP packet chuyển đổi giữa các node mỗi 1.2 giây

một lần để xác định mỗi node trong Cluster vẫn hoạt động. Nếu một

node thiếu hụt liên tiếp 5 heartbeat, node đó sẽ chuẩn bị một quá trình

regroup event để đảm bảo rằng tất cả các node đi tới một sự nhất quán

danh sách các node còn đang hoạt động.Server Cluster network có thể

là private (chỉ có sự giao tiếp giữa các node với nhau), public (giao tiếp

giữa client với node), hay mixed (cả sự giao tiếp giữa các node và sự

giao tiếp giữa client với node). Heartbeat được giao tiếp qua tất cả các

loại network, tuy nhiên việc theo dõi heartbeat và cách mà Cluster thể

hiện các heartbeat bị lỗi dựa trên các kiểu network sau:

- Trên private hay mixed network, cả hai đều có sự giao tiếp giữa

các node, heartbeat được theo dõi để xác định node có hoạt động trong

Cluster hay không.

- Trên public network, chỉ có sự giao tiếp giữa client với node,

heartbeat được theo dõi chỉ để xác định network adapter của node có

hoạt động hay không.

 Regroup event: Nếu một node thiếu hụt liên tiếp 5 heartbeat, một quá

trình regroup event được xảy ra. Nếu node vẫn duy trì tính trạng không

thể phản hồi, node đó sẽ được loại bỏ khỏi danh sách các node hoạt

động. Nếu node không phản hổi này đang sở hữu một quorum resource,

các node còn lại cũng bắt đầu một quá trình đàm phán quorum. Sau đó,

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

quá trình failover được bắt đầu.

40

 Quá trình đàm phán quorum: Quá trình đàm phán quorum xảy ra khi

một node đang sở hữu một quorum resource bị lỗi hay không hoạt

động, và các node còn lại sẽ xác định node nào sẽ giữ quyền sở hữu

quorum resource. Mục đích của quá trình đàm phán quorum là tại một

thời điểm đảm bảo rằng chỉ một node duy nhất được sở hữu quorum

resource. Việc chỉ cho một node sở hữu quorum resource là rất quan

trọng bởi vì nếu tất cả các giao tiếp giữa 2 hay nhiều node bị lỗi, nó có

khả năng chia Cluster thành 2 hay nhiều phần riêng biệt để giữ cho nó

vần tiếp tục hoạt động (split brain). Server Cluster ngăn ngừa nó bằng

cách chỉ cho phép duy nhất một Cluster tách ra này có chứa node đang

sở hữu quorum resource tiếp tục hoạt động như một Cluster. Bất kỳ

node nào không thể giao tiếp với node đang sở hữu quorum resource,

thì node đó sẽ không còn là node thành viên trong Cluster.

 Cách Cluster giữ cho các resource group luôn sẵn sàng: Cluster giữ

cho các resource group luôn sẵn sàng bằng cách theo dõi trạng thái của

các resource, mang các resource online, và tiến hành failover.

 Theo dõi trạng thái các resource: Resource Monitor đưa ra 2 cách theo

dõi trạng thái các resource trên node mà nó giám sát: Look Alive

(resource xuất hiện là online) và IsAlive (kiểm tra chi tiết trạng thái

online và hoạt động của resource là đúng chức năng).

 Cách Failover xảy ra: Quá trình failover xảy ra khi một group hay một

node đang sở hữu resource bị lỗi. Một resource bị lỗi có thể là lý do cho

một group fail nếu ta cấu hình Affect the group cho resource đó.

Failover có hai dạng: Resource failure hay Group failure và Node

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

failure hay mất sự giao tiếp giữa các node.

41

o Resource failure và Group failure:Khi một resource bị hỏng quá

 Resource Monitor dò tìm lỗi qua Looks Alive hay Is Alive

trình sau sẽ xảy ra:

hoặc qua một sự kiện được ghi bởi resource đó. Resource

Monitor gọi điểm vào Is Alive của resource DLL để xác

 Nếu Is Alive bị lỗi, trạng thái resource chuyển thành fail

 Nếu ta cấu hình cho resource khởi động lại khi bị lỗi,

định resource đó bị hỏng

Failover Manager cố gắn khởi động lại resource để mang

nó online trở lại. Nếu sự cố gắng mang resource online

không đạt được hay vượt qua ngưỡng hay thời gian cho

 Thông qua Resource Monitor, Failover Manager gọi

phép khởi động lại, Resource Monitor stop resource này.

 Nếu resource này được cấu hình là Affect the group, quá

Terminal entry point của resource DLL

trình làm việc được tiếp tục, ngược lại, nó sẽ kết thúc mà

không có hoạt động nào khác. Khi cấu hình là Affect the

group, Failover Manager trên các node trong Cluster làm

việc cùng với nhau để tái chỉ định quyền sở hữu cho group

 Trên node mà resource bị hỏng, Failover Manager kết thúc

đó.

 Failover Manager trên node mà resource bị hỏng thông

resource đó và các resource liên quan với nó

báo cho Failover Manager trên node sẽ sở hữu resoure đó

và cũng thông báo với Failover Manager trên tất cả các

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

node khác cho sự thay đổi này

42

 Nếu bất kỳ resource nào được cấu hình lưu thông tin cấu

hình trên cục bộ registry, Checkpoint Manager sẽ restore

 Node mà Failover Manager sẽ chuyển resource tới là duy

bản sao registry cho resource đó từ quorum resource

 Node mới sở hữu group sẽ điều khiển các resource của

nhất, sử dụng danh sách phụ thuộc để xác định thứ tự đúng

o Node failure và mất sự giao tiếp giữa các node: Failover xảy ra

group đó thông qua Resource Monitor tương ứng

khi một node bị hỏng khác với Failover xảy ra khi một resource

bị hỏng. Trong Clustering, một node được coi là bị hỏng nếu nó

mất sự giao tiếp với các node khác. Nếu một node mất liên tiếp 5

heartbeat, nó được coi là bị hỏng và một quá trình regroup event

được xảy ra. Sau khi một node bị hỏng, các node còn lại tiến

hành đàm phán cho việc sở hữu các resource group. Failover

Manager trên các node còn sử dụng được xác định quyền sở hữu

 Các node mà ta chỉ định có khả năng sở hữu các resouce

các resource group dựa trên:

 Thứ tự được chỉ định trong danh sách các node ưu tiên

group đó.

 Cách Failback xảy ra: Failback là quá trình Cluster service chuyển các

resource group trả về node thích hợp hơn sau khi node này online trở

lại. Node mà một group được trả về chuẩn bị một quá trình failback.

Failover Manager trên node đó tương tác với Failover Manager trên

node đang sở hữu group và tiến hành đàm phán sau đó chuyển quyền

sở hữu resource group trở về node thích hợp hơn.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

2.5. Cách cài đặt và cấu hình Cluster trên Linux

43

2.5.1. Khái niệm LVS

LVS (Linux Virtual Server) là một server ảo được xây dựng dựa trên

một Cluster của các server thật. Với người sử dụng thì họ chỉ nhìn thấy một

User

Internet

Load Balancing

LAN/WAN

Real Sever 1

Real Sever 2

Real Sever n

server ảo đầy quyền năng, không hề biết đến kiến trúc bên trong.

Hình 2.2. Linux Virtual Server

Như mô tả của hình trên, khi sử dụng Virtual Server, người sử dụng

bên ngoài Internet chỉ nhìn thấy một địa chỉ IP, đó là địa chỉ IP của Load

balancer. Load balancer là máy tính duy nhất liên lạc, nhận request từ các

máy ngoài Internet. Sau đó, load balancer sẽ có cơ chế tự động phân chia

request đến các real server bên trong. Load balancer và các real server có thể

liên lạc qua một đường truyền mạng LAN tốc độ cao, hoặc cũng có thể liên

lạc qua mạng WAN. Để đảm bảo hệ thống hoạt động trong suốt với người sử

dụng cần đảm bảo các vấn đề sau:

 Khi load balancer bị lỗi, phải có cơ chế back up tốt để hoạt động của hệ

thống vẫn tiếp diễn.

 LVS phải có cơ chế để tự động cập nhật khi có một real server tham gia

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

hoặc tách khỏi hệ thống.

44

 Khi một real server bị lỗi, hệ thống phải phát hiện được để đảm bảo

hoạt động không bị gián đoạn.

 Mặt khác để hệ thống có thể hoạt động hiệu quả cần giải quyết vấn đề

phân chia request hợp lí, tránh tình trạng một real server xử lí quá tải,

trong khi các real server khác lại ở tình trạng “idle”.

2.5.2. Các mô hình LVS

Để triển khai ý tưởng của LVS, người ta có 3 mô hình chính:

 Virtual server via NAT.

 Virtual server via IP Tunneling.

 Virtual server via Direct Routing.

Mỗi mô hình có một số ưu, khuyết điểm khác nhau. Tùy theo cách triển

khai, tùy theo thực trạng và yêu cầu của hệ thống mà ta có thể lựa chọn một

mô hình thích hợp.

2.5.3. Mô hình Virtual Server via NAT

Với mô hình NAT, dòng chuyển dữ liệu được thực hiện như sau:

 Client gởi request cho load balancer.

 Load balancer phân chia request đến cho những real server.

 Real server gởi reponse cho load balancer.

 Load balancer chuyển reponse cho client.

Load balancer có 2 địa chỉ: một để liên lạc với client, một để liên lạc với

các real server bên trong. Địa chỉ để liên lạc với real server cũng như địa chỉ

của các real server có thể là địa chỉ private. Địa chỉ mà load balancer sử dụng

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

để liên lạc với client là địa chỉ public (địa chỉ thật).

45

Hình 2.3. Mô hình Virtual Server via NAT

Điểm bất lợi lớn nhất của mô hình NAT là Load balancer có thể sẽ trở

thành một “bottle neck” bởi vì tất cả request và reponse đều sẽ phải đi qua

điểm này. Mô hình NAT chỉ có thể phục vụ khoảng 10-20 real server.Để khắc

phục nhược điểm của mô hình NAT, ta có thể sử dụng mô hình Tunnel hoặc

mô hình Direct Routing tùy theo yêu cầu triển khai cụ thể.

2.5.4. Mô hình Virtual Server via Tunneling

Với mô hình Tunneling, dòng dữ liệu lưu chuyển như sau:

 Client gởi request cho Load balancer.

 Load balancer phân chia request cho các real server.

 Các real server sau khi được phân chia sẽ tự động liên lạc với các client

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

bằng con đường riêng, không thông qua Load balancer.

46

Mô hình Tunneling sẽ giảm được tình trạng “bottle neck” cho load

balance. Load balancer chỉ đảm nhận nhiệm vụ lập lịch, phân chia request đến

các real server. Với mô hình này, một load balancer có thể phục vụ cho

khoảng 100 real server.

Hình 2.4. Mô hình Virtual Server via Tunneling

2.5.5. Mô hình Virtual Server via Direct Routing

Giống mô hình Tunneling, mô hình Direct Routing chỉ nhận request và

lập lịch xử lí. Các real server sẽ gởi reponse cho client theo một con đường

riêng, không thông qua load balancer. Mô hình Direct Routing đòi hỏi load

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

balancer và real server phải thuộc cùng một segment vật lý.

47

.

Hình 2.5. Mô hình Virtual Server via Direct Routing

2.5.6. Cách triển khai các mô hình

Trước hết để Linux hỗ trợ LVS, cần thực hiện những việc sau:

 Cài đặt gói các gói heartbeat.

 Thực hiện các thao tác chặn ARP

 Tùy theo mô hình chọn sử dụng (NAT, Tunneling, Direct Routing), ta

sẽ chọn các cấu hình thích hợp.

2.5.7. Các bước triển khai LVS via Direct Routing

a. Mô hình

Ở đây, giới thiệu một mô hình chuẩn gồm 4 server: Load balancer

Master (Master), Load balancer (Backup), Real1, Real2. Ta test thử với dịch

vụ HTTP. Khi client ở ngoài, gởi request http vào, request sẽ được tiếp nhận

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

bởi Master, sau đó, Master sẽ tiến hành phân chia request cho Real1, và

48

Real2. Master và Backup sẽ dùng tín hiệu heartbeat để trao đổi với nhau, nếu

Master có sự cố, thì Backup sẽ thay thế vai trò của Master, và Master trở

thành Backup. Khi Master khắc phục xong sự cố, Backup sẽ nhường lại vai

trò cho Master. Master sẽ dùng ldirectord để monitor Real1 và Real2. Nếu

Real1 có sự cố, Master sẽ chỉ chia request cho Real2 và ngược lại. Khi Real1

khắc phục xong sự cố, Master lại tiếp tục chia request cho Real1.

Giả sử hostname của các máy lần lượt là: Master, Backup, Real1, Real2.

 Master: eth0: 192.168.1.2, eth1: 172.16.1.2

 Backup: eth0: 192.168.1.3, eth1: 172.16.1.3

 Real1: 192.168.1.4

 Real2: 192.168.1.5

 VIP: 192.168.1.1 (IP ảo, Client gởi request đến IP này).

 Master & Backup bắt buộc phải có 2 card mạng: eth0 để lắng

(Cần dùng lệnh uname –n để xác định chính xác hostname của các máy).

nghe request từ bên ngoài, và eth1 để nhận tín hiệu heartbeat với nhau.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Hình 2.6. Mô hình chuẩn gồm 4 server

49

Đầu tiên, các bạn làm quen với mô hình chuẩn, gồm đủ các thành phần:

Master, Backup, Real1, Real2. Khi đã hiểu nguyên tắc hoạt động, với các bài

lab sau, mình sẽ hướng dẫn các bạn cách tinh chỉnh để giảm số server, mà vẫn

đảm bảo được ý nghĩ logic của mô hình.

b. Cài đặt

Cài đặt các gói heartbeat trên Master và Backup bằng lệnh:

# yum install heartbeat*

Hoặc cụ thể hơn, có thể cài đặt tất cả các gói rpm cho Master và Backup

theo trình tự sau:

# rpm –ivh heartbeat-pils-1.2.3.cvs.20050927-1.rh.el.um.1.i386.rpm

# rpm –ivh libnet-1.1.2.1-1.rh.el.um.1.i386.rpm

# rpm –ivh perl-Authen-SASL-2.08-1.rh.el.um.1.noarch.rpm

# rpm –ivh perl-Convert-ASN1-0.18-1.rh.el.um.1.noarch.rpm

# rpm –ivh perl-Net-SSLeay-1.25-1.rh.el.um.1.i386.rpm

# rpm –ivh perl-IO-Socket-SSL-0.96-1.rh.el.um.1.noarch.rpm

# rpm –ivh perl-Parse-RecDescent-1.94-1.rh.el.um.1.noarch.rpm

# rpm –ivh perl-Mail-IMAPClient-2.2.9-1.rh.el.um.1.noarch.rpm

# rpm -ivh heartbeat-stonith-1.2.3.cvs.20050927-1.rh.el.um.1.i386.rpm

# rpm –ivh perl-XML-NamespaceSupport-1.08-

1.rh.el.um.1.noarch.rpm

# rpm –ivh perl-XML-SAX-0.12-1.rh.el.um.1.noarch.rpm

# rpm –ivh perl-ldap-0.3202-1.rh.el.um.1.noarch.rpm

# rpm –ivh heartbeat-1.2.3.cvs.20050927-1.rh.el.um.1.i386.rpm

# rpm –ivh heartbeat-ldirectord-1.2.3.cvs.20050927-

1.rh.el.um.1.i386.rpm

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

# rpm –ivh ipvsadm-1.21-1.rh.el.1.um.1.i386.rpm

50

Cài đặt các gói sau trên Real1 và Real2:

# rpm –ivh arptables-noarp-addr-0.99.2-1.rh.el.um.1.noarch.rpm

# rpm –ivh arptables_jf-0.0.7-0.3E.i386.rpm

Ghi chú: tùy theo cách cài đặt perl kèm theo hệ điều hành ban đầu, các

gói perl trên đây có thể thiếu, hoặc có thể thừa. Có thể bổ sung cho đúng với

cách cài đặt hệ điều hành. RPM download tại: http://www.ultramonkey.org.

c. Các bước cấu hình

 Cấu hình hearbeat để Master và Backup lắng nghe nhau.

 Cấu hình ldirectord để Master monitor Real1 và Real2.

Như đã trình bày, phần cấu hình cho Master sẽ gồm các bước sau:

d. Cấu hình heartbeat

- Phần này cấu hình cho cả Master và Backup.

- Các file cần cấu hình cho dịch vụ heartbeat là: file ha.cf, haresources,

authkeys. - Chép các file này vào thư mục /etc/ha.d.

cp /usr/share/doc/heartbeat-1.2.3.cvs.20050927/ha.cf /etc/ha.d/

cp /usr/share/doc/heartbeat-1.2.3.cvs.20050927/authkeys /etc/ha.d/

cp /usr/share/doc/heartbeat-1.2.3.cvs.20050927/haresources /etc/ha.d

- Sửa các tham số sau trong file ha.cf:

udpport 694 # Port để gởi tín hiệu heartbeat

bcast eth1 # Card mạng để gởi tín hiệu heartbeat

keepalive 2

deadtime 30

initdead 120

node Real1 Real2 ( Sử dụng lệnh uname –n để xác định chính xác tên

server real).

- Sửa các tham số sau trong file authkeys:

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

auth 1

51

1 sha1 lvsvtdns11

- Chuẩn bị các script để đặt vào file haresources: ldirectord.cf.

- Thêm dòng sau vào file haresources.

Master 192.168.1.1 \

ldirectord::ldirectord.cf \

LVSSyncDaemonSwap::master \

e. Cấu hình ldirectord

Phần này cấu hình cho cả Master và Backup.

ldirectord cần có file ldirectord.cf. File này có nội dung như sau:

checktimeout=3

checkinterval=5

autoreload=yes

logfile=”/var/log/ldirectord.log”

virtual=192.168.1.1:80

real=192.168.1.4:53 gate 5

real=192.168.1.5:53 gate 5

request=”/.testpage”

receive=”test page”

scheduler=rr

service=http

checkcount=3

f. Cấu hình cho Real1, Real2

 Trên Real1 và Real2 cần cấu hình dịch vụ http.

 Tạo một trang web test cho dịch vụ http, đặt trong Document Root.

protocol=tcp

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

echo “test page” >. testpage

52

 Tạo IP ảo cho các Real1 và Real2:

 Chặn ARP trên IP ảo của các Real1 và Real2:

ifconfig eth0:0 192.168.1.1 netmask 255.255.255.0

/usr/sbin/arptables-noarp-addr 192.168.1.1 start

/etc/init.d/arptables_jf save

/etc/init.d/arptables_jf restart

 Sau khi thực hiện xong các bước cấu hình trên, thực hiện test như sau:

 Trên Master, thực hiện:

g. Test thử cấu hình

 Trên Backup, thực hiện:

# service heartbeat start

 Trên Master, xem kết quả:

# service heartbeat start

# ipvsadm

Nếu hiển thị kết quả bảng phân chia request có IP của Real1,

 Trên Backup, xem kết quả:

Real2 là đúng.

# ipvsadm

Vì backup, lúc này chỉ đang đứng lắng nghe, trên không có bảng

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

phân chia request.

53

 Từ Client kết nối dịch vụ http, hoạt động bình thường, dùng lại lệnh

ipvsadm trên Master, sẽ thấy request được phân chia cho Real1 hoặc

Real2.

2.6. Tính toán phân tán bằng Cluster

2.6.1. Lập trình trên môi trường MPI

MPI là một công nghệ lập trình song song rất phổ biến với việc sử dụng

bộ nhớ phân tán. MPI cho phép tạo ra nhiều tiến trình có thể thực hiện song

song. Phiên bản mới nhất là MPI 2.0, để lập trình MPI trên Win32 với ngôn

ngữ C++ chúng ta sử dụng thư viện các hàm của MPI trong MPICH2.

Ta sử dụng một mạng gồm các máy tính vào mục đích tính toán, mỗi

máy hoạt động theo nhịp đồng hồ riêng của mình và chỉ có thể đọc dữ liệu ở

trên máy của mình (distributed memory system & asynchronous operation

mode).

Đối với một mạng như vậy, thì về nguyên tắc, trên mỗi máy ta có thể cho

chạy một trình riêng và dữ liệu mỗi trình xử lý là riêng (MPMD). Các trình

này có thể khác nhau, tức là chúng giải quyết các bài toán khác nhau, hoạt

động độc lập và chỉ đến một lúc nào đó thì chúng mới trao đổi dữ liệu cho

nhau.

Sự việc xảy ra là: nếu thời điểm khởi động các trình trên các máy khác

nhau mà không xác định, thì thời điểm cho việc chúng trao đổi dữ liệu cho

nhau cũng không thể xác định được. Vậy chúng ta vẫn cần phải có một “trọng

tài” để xác định thời điểm bắt đầu hoạt động cho chúng. Với quan niệm này

người ta coi như tất cả chúng chỉ là một trình chung thôi, có nghĩa là:

- Trên mỗi máy tính vẫn chạy một trình, nhưng chúng hoàn toàn giống

nhau.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

- Tất cả các trình ấy được khởi động để chạy cùng một lúc.

54

Tuy chỉ sử dụng một chương trình, nhưng các máy tính khác nhau vẫn sẽ

làm những “phần việc” khác nhau, bởi trong trình chung ấy, mỗi “phần việc”

chỉ là những đoạn lệnh riêng và mỗi máy phải tự xác định và thực hiện đoạn

lệnh của mình (thường là thông qua tên máy và process).

Các chương trình, tức là các đoạn lệnh “riêng” ấy, chỉ có thể truy cập

trực tiếp vào bộ nhớ RAM trong máy của mình – SPMD. Nếu ở trong chương

trình chung có một biến được khai báo thì tức là nó sẽ có mặt ở tất cả các máy

tính.

Các máy tính muốn trao đổi dữ liệu với nhau thì phải thông qua các lệnh

gửi – nhận mà MPI cung cấp. Đó là một môi trường đảm nhận nhiệm vụ trao

đổi dữ liệu qua mạng. Mỗi máy tính muốn tham gia vào hệ thống MPI phải

được cài thêm một trình thường trú, gọi là Driver – MPI.

Mục đích của MPI là tạo ra một môi trường gửi – nhận dữ liệu thân

thiện, cho phép chúng ta soạn thảo và thử trình MPI chỉ trên một máy, để sau

đó chạy nó trên một mạng máy tính – có thể có cấu trúc rất phức tạp.

Để làm việc này MPI cho phép mô phỏng một mạng ảo chỉ trên một máy

tính. Mỗi một máy tính ảo như vậy được gợi là một tiến trình. MPI bảo đảm

để về mặt hình thức mỗi tiến trình hoàn toàn tương đương với máy tính tuần

tự, tức là gồm có một vi xử lý trung tâm và RAM. Điểm khác biệt chỉ là

chúng có chung ổ đĩa cứng. RAM của các máy ảo này chiếm giữ các vùng

nhớ khác nhau, chính vì vậy mà các tiến trình không thể trực tiếp trao đổi dữ

liệu cho nhau. Giống như các máy tính độc lập trong mạng, các tiến trình chỉ

có thể trao đổi dữ liệu với nhau thông qua môi trường MPI. Tuy nhiên, không

phải cứ mỗi tiến trình, tức là mỗi máy ảo, thì cần một trình thường trú Driver-

MPI riêng mà trên mỗi máy tính chỉ cần cài một trình thường chú Driver-

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

MPI. Nó sẽ phục vụ tất cả các tiến trình trên máy tính ấy.

55

Thông thường người ta viết và thử trình trên một máy tính, khi ấy sẽ có

sự phân biệt giữa rõ ràng giữa tiến trình và máy tính. Tuy nhiên khi sử dụng

chương trình ấy trên một mạng nhiều máy tính thì, thường là, trên mỗi máy

tính chỉ chạy có một tiến trình. Chính vì vậy mà sẽ có một sự “chồng chéo”

khi sử dụng từ “tiến trình” và người đọc sẽ phải tự phân biệt được khi nào thì

nó hàm ý là máy tính “ảo” và khi nào thì là máy tính “thật”, hoặc là ngược lại,

khi nào thì máy tính “thật” lại hàm ý là “tiến trình”. Tất cả những điều rắc rối

này xảy ra chỉ là vì chúng ta soạn trình thì trên một máy, mà chạy trình thì

trên một mạng gồm nhiều máy tính và trên mỗi máy tính thật ấy lại có thể có

nhiều tiến trình.

2.6.2. Cài đặt MPICH2

Cài đặt MPICH2 trên Linux

Chúng ta thực hiện cài đặt thư viện MPI trên hệ điều hành Linux như

sau:

- Download MPICH2 tại:

http://wwwunix.mcs.anl.gov/mpi/mpich2/

- Giải nén $ tar zxf mpich2-1.0.6.tar.gz

- Dịch và cài đặt

$ cd mpich2-1.0.6.tar.gz

$ mkdir /opt/mpich2

$. /configure --prefix=/opt/mpich2

$ make

$ make install

Chú ý, nếu không có quyền ghi vào thư mục /opt thì phải chuyển qua

dùng account root (hoặc dùng sudo) để cài đặt.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Sau khi cài đặt xong, thêm dòng sau vào file ~/.bashrc:

56

export PATH=/opt/mpich2/bin/:$PATH

Bây giờ, ta cần phải cấu hình mpd. Nếu muốn cấu hình cho account của

riêng bạn, cần thêm file. mpd.conf vào thư mục nhà. File này chứa một dòng

với nội dung MPD_SECRETWORD= với tùy

chọn của bạn. Ví dụ là "conloncon". ta tạo file như sau:

$ echo "MPD_SECRETWORD=conloncon" > ~/.mpd.conf

Sau đó thiết lập lại quyền truy cập vào file này:

$ chmod 600 ~/.mpd.conf

Muốn chạy các chương trình MPI, trước hết ta phải khởi động tiến trình

mpd:

$ mpd &

Ta chạy mpd như một tiến trình ngầm (background), do đó nếu cần có

thể kiểm tra lại:

$ mpdtrace -l

cheva_49376 (127.0.0.3)

Kết quả trên cho thấy mpd đang chạy trên host cheva (127.0.0.3) và cổng

49376.

Để khởi động tiến trình mpd trên nhiều máy, ta có thể tạo một file

mpd.hosts, lưu địa chỉ của các máy cần chạy mpd vào file này rồi dùng lệnh:

$ mpdboot -n -f mpd.hosts

Cài đặt MPICH2 trên windows

- Download và cài đặt MPICH2 32bit hoặc 64bit tùy theo hệ điều hành

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

trên máy tính.

57

- Thêm C:\Program Files\MPICH2\bin vào vị trí MyComputer/

Properties / Advanced System Settings/Advanced/Environment Variables

- Bổ xung các file đường dẫn file sau tới tường lửa của bạn:

C:\Program Files\MPICH2\bin\mpiexec.exe

C:\Program Files\MPICH2\bin\smpd.exe

- Đăng kí tài khoản bằng cách nhập tên và pass tuân theo đường dẫn:

C:\ProgramFiles\MPICH2\bin\wmpiregister

- Lựa chọn Port để mở cổng 8676 tuân theo đường dẫn:

C:\Program Files\MPICH2\bin\wmpiconfig

Cài đặt trên môi trường Visual Studio:

- Khởi động Visual Studio.

- Đi tới Tools/Options/Projects and Solutions/Visual C++ Directories

trong phần Combo Box lựa chọn win 32.

- Trong Combo Box Directories, lựa chọn "Include files" và bổ xung

đường dẫn sau:

C:\Program Files\MPICH2\include (hoặc Program Files (x86) với

windows 64 bit)

- Lựa chọn "Library files" và thêm đường dẫn sau C:\Program

Files\MPICH2\lib\ (hoặc Program Files (x86) với windows 64 bit).

2.6.3. Tính toán trên MPI

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Các hàm MPI thông dụng:

58

Tên hàm Ý nghĩa

MPI_Init() Khởi tạo bộ môi trường thực thi

MPI, hàm này phải được gọi trước tất cả

các hàm MPI khác, và chỉ được gọi một

lần. Hàm này có thể được dùng để

truyền tham số dòng lệnh tới tất cả các

tiến trình, cách dùng như sau: MPI_Init

(&argc, &argv).

MPI_Finalize() Dùng để kết thúc môi trường thực

thi MPI. Hàm này phải được gọi cuối

cùng trong tất cả các hàm MPI.

MPI_Comm_size(MPI_CO Xác định số lượng tiến trình tham

gia vào một bộ giao tiếp, thông thường, MM_WORLD, &size)

nó được dùng trong bộ giao tiếp

MPI_COMM_WORLD bộ giao tiếp

được xây dựng sẵn, bao gồm tất cả các

tiến trình tham gia vào chương trình.

MPI_Comm_rank(MPI_CO Xác định thứ tự của tiến trình này

MM_WORLD, &rank) trong bộ giao tiếp. Lúc ban đầu mỗi tiến

trình được gán cho một số thứ tự từ 0 tới

n-1 trong bộ giao tiếp

MPI_COMM_WORLD.

MPI_Finalized(&flag) Kiểm tra xem hàm MPI_Init() đã

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

được gọi hay chưa.

59

MPI_Barrier() Đồng bộ tất cả các tiến trình trong

hệ thống, khi hàm này được gọi, tất cả

các tiến trình sẽ cùng chờ cho tới khi

tiến trình cuối cùng thực hiện đến bước

này và tất cả cùng thực hiện câu lệnh

tiếp theo vào cùng một thời điểm.

MPI_Wtime() Xác định thời gian của hệ thống.

MPI_Wtick() Xác định độ chính xác của thời gian

hệ thống.

MPI_Reduce(void *local, Hàm tính gộp, dùng để gộp các kết

void *global, int count, quả của từng tiến trình vào kết quả

MPI_Datatype type, MPI_Op chung. Trong đó, local là kết quả cục bộ,

operator, int root, MPI_Comm global là kết quả nhận được sau khi tính

comm) gộp các kết quả cục bộ, type là kiểu dữ

liệu tính gộp, operator là thao tác tính

gộp, root là thứ tự của tiến trình sẽ nhận

được kết quả global, comm là bộ giao

tiếp.

int MPI_Send(void *buf, int + buf: địa chỉ bắt đầu của thông báo

count, MPI_Datatype datatype, + count: độ dài của thông báo

int dest,int msgtag, MPI_Comm + datatype: kiểu dữ liệu

+ dest: số hiệu của tiến trình nhận comm)

+ msgtag: số hiệu của thông báo

+ comm: số hiệu của kênh làm việc

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

int MPI_Recv(void *buf, + OUT buf: địa chỉ đầu của thông

60

int count, MPI_Datatype báo

datatype, int source,int msgtag, + count

MPI_Comm comm, MPI_Status + datatype

*status) + source: số hiệu của tiến trình gửi

+ msgtag: số hiệu của thông báo

+ comm: số hiệu kênh

+ OUT: status – trạng thái

Các kiểu dữ liệu được dùng với MPI:

MPI_CHAR

Tên Kiểu dữ liệu C tƣơng đƣơng

MPI_DOUBLE

signed char

MPI_FLOAT

double

MPI_INT

Float

MPI_LONG

Int

MPI_LONG_DOUBLE

Long

MPI_SHORT

long double

MPI_UNISIGNED_CHAR

Short

MPI_UNISIGNED

unsigned char

MPI_UNSIGNED_LONG

unsigned int

MPI_UNSIGNED_SHORT

unsigned long

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

unsigned shorrt

61

2.6.4. Các mô hình tương tác trong lập trình MPI

Việc quan niệm vật chất được tạo ra từ các “phần tử” nhỏ và rằng mọi sự

tác động đều phải được lan truyền đi với vận tốc không vượt quá vận tốc ánh

sáng dẫn chúng ta đến mô hình tương tác gần.

Theo quan niệm này nếu có một sự thay đổi nào đó ở một “phần tử” thì

sự thay đổi này chỉ làm ảnh hưởng tới các thành viên ở ngay cạnh nó mà thôi.

Nếu chúng ta giao cho mỗi máy tính phụ trách một “phần tử” – máy tính này

tính toán ra trạng thái của “phần tử” dựa vào các định luật vật lý – thì chúng

ta đã thực hiện việc mô hình hóa một bài toán thực tế.

Quá trình mô hình hóa này tạo ra các kết nối ảo – theo đó các máy tính

kết nối và gửi dữ liệu cho nhau. Các kết nối ảo này phải được “nhúng” vào

các kết nối thực (tức là phân việc cho từng máy tính trên mạng) để tiến hành

tính toán.

Như vậy quá trình tính toán trên hệ thống mạng máy tính là sự mô phỏng

lại thực tế. Trong thực tế các đối tượng tương tác với nhau thông qua trao đổi

chất. Các đối tượng này được khái quát hóa và được hình dung như các máy

tính; quá trình trao đổi chất giữa chúng với nhau được mô phỏng lại thông

qua việc trao đổi dữ liệu giữa các máy tính. Trong thực tế, quá trình trao đổi

chất diễn ra song song vì vậy quá trình mô phỏng cũng cần phải được thực

hiện song song. Việc làm này được thực hiện trên mạng máy tính và sự

“tương tác” được thực hiện thông qua việc truyền dữ liệu.

Một trong số các lợi điểm của phương pháp mô phỏng nằm ở chỗ: cho

dù trong thế giới thực có rất nhiều kiểu tương tác giữa các vật thể với các qui

luật vật lý khác nhau, nhưng chúng có cùng chung một mô hình gửi nhận dữ

liệu khi mô phỏng chúng trên mạng.

Một trong số các điểm bất lợi của phương pháp mô phỏng nằm ở chỗ:

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

trong thực tế, các quá trình trao đổi chất diễn ra song song và cho dù vật chất

62

vận động thế nào thì đấy cũng là “thực tế”. Ngược lại, khi mô phỏng, việc

trao đổi này được thực hiện thông qua các lệnh gửi - nhận dữ liệu và chúng có

thể tự gây ra tắc nghẽn khiến cho toàn bộ quá trình trao đổi chất “mô - phỏng”

bị ngừng trệ.

Để tận dụng các lợi điểm và hạn chế các điểm bất lợi, MPI cung cấp một

số khả năng gửi nhận dữ liệu “tập thể”. Ở đấy các quá trình tương tác có trong

thực tế được mô hình hóa thông qua các kết nối cụ thể, được gọi là “kết nối

ảo” (virtual topology).

Kết nối thực:

Các bài toán thực tế thường cần tới những máy tính có cấu trúc đặc biệt

– mà chế tạo đơn chiếc thì tốn kém. Một trong số các phương hướng để giải

quyết vấn đề là tạo ra các “modul” đơn giản rồi ghép lại với nhau theo các cấu

trúc cần thiết, tạo ra các máy tính lớn hơn. Mỗi modul như vậy bao gồm một

số vi-xử-lý dùng chung một bộ nhớ. Chúng có khả năng kết nối với nhau –

“kết nối thực” (real topology) – để tạo ra một máy tính có nhiều thành phần

mà mỗi phần có nhiều vi-xử-lý.

Cấu tạo và khả năng kết nối của mỗi modul được tính toán dựa trên khả

năng công nghệ và tính tối ưu. Mặt khác các kết nối này phải hỗ trợ cho các

kết nối ảo. Như vậy có hai vấn đề xuất hiện: (1) Chúng ta có thể và chỉ có thể

tạo ra các kết nối thực nào? (2) Làm thế nào để các kết nối thực này hỗ trợ

cho các kết nối ảo?

Một trong số các sản phẩm có trên thị trường là modul Origin2000. Mỗi

modul gồm 2 vi-xử-lý cùng sử dụng chung một bộ nhớ RAM và có cổng kết

nối. Các modul này có thể kết nối với nhau thông qua cổng để tạo thành các

máy tính với nhiều vi-xử-lý có cấu trúc mong muốn để giải từng loại bài toán

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

thực tế.

63

Không giống như việc gửi nhận dữ liệu trên mạng, quá trình gửi - nhận

dữ liệu giữa các modul là trực tiếp (không thông qua server) và có thể đi theo

nhiều đường kết nối khác nhau. Tất nhiên là có sự phân biệt giữa các máy liền

kề nhau và các máy ở xa. Trong sơ đồ trên, dữ liệu trao đổi giữa các máy nằm

ở cùng đỉnh liền kề nhau diễn ra rất nhanh – vì chỉ cần qua một “R” (Router),

giữa các máy trên cùng cạnh diễn ra chậm hơn – vì nó phải đi qua 2 “R”, giữa

các máy nằm ở các đỉnh đối diện với nhau sẽ là chậm nhất – vì chúng phải đi

qua 3 “R”.

Người ta cần phân cho nhiệm vụ cho từng vi-xử-lý một cách hợp lý – tốt

nhất là làm sao cho tất cả dữ liệu đều chỉ cần đi một khoảng cánh ngắn nhất

có thể. Điều này đòi hỏi không chỉ nghệ thuật phân việc cho các vi-xử-lý mà

còn ở cấu trúc mạng máy tính.

Người ta thấy rằng phần lớn các bài toán có thể được triển khai trên

mạng vi-xử-lý có dạng kết nối như sau:

Cấu trúc “hướng tâm”: Các vi-xử-lý trao đổi dữ liệu với nhau thông qua

một vi-xử-lý “trung tâm”.

Cấu trúc thẳng: Các vi-xử-lý kết nối với nhau thẳng hàng, các vi-xử-lý

đều có thể gửi nhận dữ liệu đến các vi-xử-lý ở cạnh mình.

Cấu trúc tròn: Các vi-xử-lý kết nối với nhau thành một vòng tròn, các

vi-xử-lý đều có thể gửi nhận dữ liệu đến hai vi-xử-lý ở cạnh mình.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Hình 2.7. 6 vi xử lý kết nối với nhau thành hình tròn

64

Cấu trúc lưới: Các vi-xử-lý kết nối với nhau thành lưới ô vuông, hai

chiều hoặc ba chiều. Các vi-xử-lý có thể gửi dữ liệu tới 4 vi-xử-lý cạnh nhau

(trong trường hợp lưới ô vuông 2 chiều, hoặc là 8 vi-xử-lý cạnh nhau (trong

trường hợp lưới ô vuông 3 chiều).

Hình 2.8. Các vi-xử-lý kết nối với nhau thành lưới

Ánh xạ nhúng:

Khả năng kết nối các modul lại với nhau để được một máy tính mạnh

hơn cho phép tạo ra nhiều máy tính với các cấu trúc khác nhau. Các vi xử lý

trong các máy trên là các máy tính riêng biệt có bộ nhớ riêng. Tuy có sự khác

nhau trong cấu tạo nhưng việc gửi nhận dữ liệu giữa chúng được thực hiện

thông qua các lệnh gửi - nhận cơ bản. Điều này hàm ý là người lập trình sẽ

không phải lưu tâm quá mức đến cấu trúc vật lý của máy tính. Họ sẽ chỉ cần

biết cách sử dụng các lệnh gửi - nhận cơ bản là đủ để sử dụng hệ thống máy

tính phục vụ cho việc tính toán của mình.

“Kết nối ảo” trong chương trình phải được nhúng vào “kết nối thực”

trong máy tính. Kết nối ảo là được tạo ra từ các tiến trình, kết nối thực là từ

các vi xử lý – chúng nối với nhau bằng các dây dẫn điện. Chính vì thế để làm

giảm thời gian gửi - nhận dữ liệu, những tiến trình hay gửi dữ liệu cho nhau

phải được thực hiện trên các vi xử lý ở cạnh nhau. Quá trình phân bổ công

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

việc cho các vi xử lý được gọi là “nhúng” cấu trúc ảo vào cấu trúc thực.

65

Do tính “tương đương” của các thành phần mà các tiến trình trong một

kết nối ảo của một bài toán thực tế thường là tương đương với nhau. Chính vì

vậy các kết nối ảo thông dụng không nhiều, chúng chủ yếu thuộc hai loại:

Loại thứ nhất (các bài toán vật lý) là các lưới: một chiều, hai chiều, ba

chiều…, loại thứ hai (các bài toán quản lý) là các đồ thị cây, kiểu như cây nhị

phân.

Topology – Kết nối ảo:

Kết nối ảo là kết nối của một số nào đó của tiến trình – máy ảo. Mỗi

tiến trình hay máy ảo cần phải biết được số hiệu của các máy tính liền kề với

nó. Dựa vào các thông tin này chúng gửi dữ liệu cho nhau.

Các kết nối mạng ảo thường gặp thuộc vào một trong số các dạng sau:

- Kết nối nhóm: với kiểu kết nối này dữ liệu có thể trao đổi trong nhóm

mà các thành viên khác không thuộc trong nhóm này sẽ không thể nhận được.

- Dạng kết nối đồ thị cây.

- Và dạng kết nối tuyến tính bao gồm các kết nối thẳng và kết nối vòng,

kết nối lưới ô vuông (2 hoặc 3 chiều).

Kết nối nhóm “Group”:

Kết nối nhóm thường được sử dụng để phân chia công việc cho từng

nhóm khác nhau. Mỗi máy tính ảo luôn có một số hiệu, số hiệu này có được

ngay từ khi bắt đầu chạy trình. Và nếu nó thuộc thêm vào một nhóm nào đó

thì nó có thêm số hiệu riêng theo nhóm ấy. Như vậy MPI_COM_WORLD là

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

nhóm ban đầu, bao gồm tất cả các máy tính.

66

Chƣơng 3

CÀI ĐẶT THỬ NGHIỆM

Trong chương này chúng ta sẽ xem xét cách giải một bài toán tính toán

trên Computer Cluster. Cụ thể, ta sẽ cách giải phương trình vi phân đạo hàm

riêng Laplace và đánh giá kết quả nhận được.

3.1. Phƣơng trình vi phân đạo hàm riêng

Phương trình đạo hàm riêng là một lĩnh vực quan trọng của toán học.

Có rất nhiều sự vật, hiện tượng, hoạt động trong tự nhiên được mô tả bởi một

phương trình hoặc một hệ phương trình vi phân nói chung và phương trình vi

phân đạo hàm riêng nói riêng. Một phương trình liên hệ giữa ẩn hàm

u(x1,…,xn), các biến độc lập xi và các đạo hàm riêng của nó được gọi là một

phương trình vi phân đạo hàm riêng (hay phương trình đạo hàm riêng cho

gọn). Nó có dạng:

Trong đó F là một hàm nào đó của các đối số của nó, với ký hiệu x = Rn, u(x) = u(x1,…,xn). Cấp cao nhất của đạo hàm riêng của u có (x1,…,xn)

mặt trong phương trình. Phương trình được gọi là tuyến tính nếu nó tuyến tính

đối với ẩn hàm và các đạo hàm riêng của ẩn hàm.

Lý thuyết phương trình đạo hàm riêng có hai nét đặc thù cơ bản. Thứ

nhất là mối liên hệ trực tiếp với các bài toán vật lý, vì quá trình nghiên cứu

các bài toán vật lý và cơ học dẫn đến các bài toán phương trình đạo hàm

riêng, vì vậy người ta còn gọi là phương trình đạo hàm riêng là phương trình

vật lý toán. Những nhà tiên phong trong lĩnh vực này là J.D’Alembert (1717-

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

1783), L.Euler (1707-1783), D.Bernoulli (1700-1782), J.Lagrange (1736-

67

1813), P.Laplace (1749-1827), S.Poisson (1781-1840), J.Fourier (1768-1830).

Thứ hai là mối liên hệ mật thiết của phương trình đạo hàm riêng với các

ngành toán học khác như giải tích hàm, lý thuyết hàm, tô pô, đại số....

3.2. Phƣơng trình Laplace

(1)

Phương trình Laplace 2 chiều có dạng như sau:

Cùng với:

u(x,y)=g(x,y) (x,y) ∂Ω (2)

Gồm có 2 phần: một là phương trình vi phân ứng với mọi giá trị x,y nằm

trong miền Ω và hai là giá trị U dọc theo đường biên ∂Ω được biểu diễn thông

qua hình sau:

Hình 3.1. Miền Ω và đường biên ∂Ω

Ở đây Ω ≡ [ax,bx]x[ay,by] và f(x,y), g(x,y) là các hàm được đưa ra, giả sử

nằm trong vùng C(Ω) hoặc C(∂Ω).

Cũng giống như các phương trình vi phân khác, để giải phương trình

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Laplace (1) bằng máy tính cần phải sử dụng phương pháp xấp xỉ rời rạc. Ta

68

chia nhỏ miền Ω thành lưới gồm Nx×Ny ô kích thước hx×hy như Hình 3.2. Giả

sử điểm (x,y) nằm tại vị trí (i,j) trên lưới ô, khi đó ta ký hiệu:

ui,j = u(x,y); ui-1,j = u(x-hx,y); ui+1,j = u(x+hx,y)

(3) ui,j+1 = u(x,y+hy); ui,j-1 = u(x,y-hy) ;

fi,j=f(x,y), gi,j=g(x,y).

Biến đổi phương trình (1) về dạng sai phân rời rạc bằng cách xấp xỉ đạo

hàm bậc hai:

(4) = fi,j

với i =2,3,…, Nx-1; j = 2,3,…, Ny-1.

Điều kiện (2) có thể được viết dưới dạng sau:

(5) ui,j = gi,j

với i=1 hoặc Nx, (j=2,…, Ny - 1); hoặc với j=1 hoặc Ny, (i=2,…,Nx-1).

Trong đó giá trị i, j là các giá trị được biểu diễn như hình sau:

Hình 3.2. Sai phân hữu hạn (Finite difference)

Để đơn giản, ta giả sử rằng khoảng cách giữa các lưới là đồng bộ trong

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

các hướng khác nhau. Việc thiết lập vấn đề này được miêu tả trong hình 3.2,

69

một sự thay đổi trong hình 3.3 cho trường hợp đặc biệt của Laplacian được

xét tại đây.

Chúng ta tính toán hx và hy:

,

Và có sự thiết lập đặc biệt ở đó hx = hy = h thì công thức (4) được biến

đổi thành:

ui-1,j+ui,j-1 - 4ui,j+ui,j+1+ui+1,j = h2 fi,j, với i =2,3,…,Nx-1; j = 2,3,…,Ny-1 (6)

Hình 3.3. Phương trình Laplace/Poisson biểu diễn trên một hình lưới

hình chữ nhật với Nx x Ny điểm.

3.3. Công thức lặp Jacobi

Nếu chúng ta phân tích (6) với Ui,j và đưa vào các biến đếm lặp, thì

chúng ta được công thức lặp Jacobi sau:

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

= [ + + + – h2fi,j], với n=1,2,… (7)

70

Công thức (7) được gọi là công thức lặp Jacobi, quá trình lặp sẽ dừng

khi:

(8)

Với mọi i, j trong tập chỉ số của phương trình (6), tập các phương trình

này được được rút gọn có thể được miêu tả như sau:

u(n+1)=Bu(n) + k, (9)

ở đó B là ma trận lặp Jacobi.

3.3.1. Giá trị riêng của ma trận lặp Jacobi

Để kiểm tra sự hội tụ của các vòng lặp lại (9) chúng ta cần tìm ρ(B), bán

kính quang phổ của ma trận lặp Jacobi B. Trong trường hợp hiện tại, chúng ta

sẽ làm phép phân tích này. Chúng ta bắt đầu thể hiện vấn đề giá trị riêng cho

ma trận này như: Bv=μv, (10)

ở đó v là vecto riêng tương ứng với giá trị riêng μ. Phương trình (7) và cấu

trúc dải trong hình 3.4 ngụ ý rằng chúng ta có thể viết một phương trình bất kì

từ hệ thống (10) như: = (11)

Chúng ta cũng viết trong phương trình sai phân được phân tích như sau:

[ (x-h,y) + (x,y-h) + (x,y+h) + (x+h,y)] = (x,y) (12)

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Hình 3.4. Cấu trúc dải của ma trận lặp Jacobi cho phương trình Laplace/ Poisson

71

Bây giờ từ tính đồng nhất của các vấn đề giá trị riêng, và từ nhân tố đó

mà vấn đề giá trị đường biên của phương trình sai phân là Dirichlet. Chúng ta

kết luận rằng:

(x,y) = sin (13)

Ở đó chúng ta phải nắm bắt miền Ω là (0,a) x (0,b). Đó là (a,y) = 0 trên

∂Ω. Thay thế (13) thành (12) tuân theo một số tiêu chuyển, nhưng các thao tác

kết quả của công thức lượng giác thể hiện như sau:

cos ) (14)

Với giá trị riêng của ma trận lặp Jacobi B. Trong (13) và (14) p và q có

thể là số nguyên, nhưng nhớ rằng B chỉ là một ma trận kiểu [(Nx -2)(Ny -

2)]x[(Nx -2)(Ny -2)], vậy p và q có thể là các giá trị nằm giữa 1 tới Nx - 2 và 1

được tính toán trong tới Ny – 2, trước đó sự lặp lại xuất hiện trong các giá trị

(14).

Nhiệm vụ của chúng ta bây giờ là tìm , để tìm giá trị lớn nhất của

cho p và q trong các mảng trên. Nó dễ dàng kiểm tra mà giá trị cực đại xuất

hiện với p=q=1, đưa ra được kết quả:

cos ) (15)

Đây chính xác là bán kính quang phổ của ma trận lặp Jacobi tới vấn đề

Dirichlet của phương trình Laplace trên một lưới Nx x Ny trong miền chữ nhật

Ω =(0,a)x(0,b), như vậy hx=hy=h từ đây ta có:

(16)

3.3.2. Tính toán Jacobi

Tính toán Jacobi là một tập dữ liệu (1D, 2D, 3D,...), là một mảng giá trị

ở đó được cập nhật trong một quy trình lặp tới một số điều kiện được thỏa

mãn. Chúng ta sẽ tính một giá trị mới cho mỗi phần tử trong ma trận 2 chiều.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Giá trị mới của phần tử này sẽ là giá trị trung bình của các phần tử hiện tại và

72

giá trị hiện tại nằm trong bốn điểm lân cận của nó. Chúng ta sẽ làm điều này

cho mỗi phần tử trong ma trận (một phương pháp lặp). Kết thúc mỗi vòng lặp

thay đổi giá trị cực đại được xác định. Đó là mỗi phần tử trong ma trận thì giá

trị thay đổi là khác nhau giữa giá trị cũ và giá trị mới, mà giá trị cực đại được

tính toán qua toàn bộ ma trận 2D.

Hình dưới minh họa trên một đối tượng thực hiện việc tính toán với các

vòng bao quanh. Và 5 sự kiện xuất hiện trong mỗi bước để thi hành việc tính

toán.

A: Đối tượng trung tâm hướng tới đông East(x+1, y) gửi cột dữ liệu

phía tây gần nhất với nó tới đối tượng (x, y). Dữ liệu được copy tới vị trí

hướng đông.

B: Đối tượng trung tâm hướng tới nam South(x, y+1) gửi dòng dữ liệu

phía bắc gần nhất với nó tới đối tượng (x, y). Dữ liệu được copy tới vị trí

hướng nam.

C: Đối tượng trung tâm hướng tới tây west(x-1, y) gửi cột dữ liệu phía

đông gần nhất với nó tới đối tượng (x, y). Dữ liệu được copy tới vị trí hướng

tây.

D: Đối tượng trung tâm hướng tới bắc north(x, y-1) gửi dòng dữ liệu

phía nam gần nhất với nó tới đối tượng (x, y). Dữ liệu được copy tới vị trí

hướng bắc.

E: Đối tượng (x, y) tương tự như vậy gửi dữ liệu tới 4 vị trí lân cận.

Điều này được thực hiện theo cách thức tương tự như cách từng truyền đạt dữ

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

liệu được gửi.

73

Hình 3.5. Thực hiện tính toán Jacobi trên một đối tượng

3.4. Song song hóa thuật toán

xx + Uyy = 0, đưa ra một vùng không gian và các giá

Với phương trình: U

trị cho các điểm trên đường biên của vùng, kết quả là để xấp xỉ cho các điểm

trong vòng lặp.

Thuật toán song song thực hiện các bước sau:

Ta sẽ song song hóa công thức (7) bằng cách phân mỗi bộ xử lý một

miền có kích thước giống nhau xử lý theo thuật toán sau:

Lựa chọn giá trị khởi tạo diff = 10

While diff > (hoặc lặp với số lần đủ lớn)

1. Tính toán lặp cho mỗi điểm thuộc vùng

2. Gửi giá trị lặp được tính toán trên đường biên của vùng tới bộ xử lý

vùng bên cạnh

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

3. Nhận giá trị lặp cho các điểm cần thay đổi

74

4. Tính toán giá trị diff = |u_new[ij]- u_old[ij]| với ij là chỉ số điểm

nằm trong vùng

End While

3.5. Kết quả thực hiện

3.5.1. Thông tin chung về hệ thống

Học viên đã sử dụng Cluster Server tại Trung tâm Khoa học tính toán

của trường Đại học Sư Phạm Hà Nội để thực hiện thuật toán trên. Hệ thống

Cluster này bao gồm:

+ 09 máy tính (node1,.., node9), mỗi máy có 4 processors. Các máy từ

node1 đến node7 có 4GB bộ nhớ trong, node8 có 16 GB bộ nhớ trong, node9

có 32 GB bộ nhớ trong.

+Tất cả 9 nodes của hệ thống được cài đặt hệ điều hành linux debian và

cấu hình thành một PC Cluster với thư viện xử lý song song MPITCH2 và Bộ

quản lý chương trình PBS Torque.

Người sử dụng có thể truy cập và khai thác các tài nguyên hệ thống

thông qua máy Master (node7) với tên internet toàn cầu là: ccs1.hnue.edu.vn

thông qua giao thức ssh. Hệ thống đã cài đặt các trình biên dịch cho các ngôn

ngữ lập trình thông dụng như C, C++, java, Fortran, matlab, v.v.

3.5.2. Giao diện và lệnh thực hiện

3.5.2.1. Giao diện thực hiện

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

- Sử dụng phần mềm putty.exe để đăng nhập vào hệ thống:

75

Hình 3.6a. Đăng nhập vào trung tâm với tên ccs1.hnue.edu.vn

Hình 3.6b. Nhập thông tin tài khoản

- Sử dụng phần mềm winscp để tải lên hoặc lấy về chương trình và dữ

liệu trên Hệ thống của Trung tâm:

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Hình 3.6c. Sử dụng phần mềm winscp để đăng nhập vào hệ thống

76

Hình 3.6d. Các file trên tài khoản đăng nhập vào hệ thống

3.5.2.2. Lệnh thực hiện

a) File sử dụng MPI

Học viên đã đẩy lên với file có tên Laplace.cpp chứa các lệnh chương

trình để thực hiện chạy song song trên hệ thống bao gồm các bước sau:

- Biên dịch bằng trình biên dịch: mpic++ Laplace.cpp –o Laplace

- Tạo file PBS script Laplace.script có nội dung đơn giản như sau:

#!/bin/sh

/usr/local/bin/mpiexec /home/tuanha/Laplace

- Sau đó đẩy file lên hệ thống

b)File thực hiện tuần tự

Đối với file Cpp thực hiện tuần tự để thực hiện ta thao tác như sau:

- Đẩy file lên hệ thống

- Biên dịch file bằng lệnh: c++ Laplace_TT.cpp –o Laplace_TT

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

- Chạy file bằng lệnh: . /Laplace_TT

77

3.5.3. Kết quả thực hiện tuần tự

Hình 3.7. Thời gian thực hiện trên tính toán tuần tự > 200s

3.5.4. Kết quả thực hiện thực hiện xử lý song song trên nhiều máy

Hình 3.8a. Lệnh qsub –q l1 –l nodes=2:ppn=4 Laplace.script trên 2

node, mỗi node gồm 4 vi xử lý. Cho ra kết quả nằm trong tệp 24035

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Hình 3.8b. Kết quả thời gian thực hiện

78

Hình 3.8c. Kết quả lưu trữ trên tệp. dat

Như vậy, kết quả nhận được về mặt thời gian như sau:

Chạy chương trình thực hiện thuật toán song song với 2 nodes, mỗi node

gồm 4 vi xử lý bằng lệnh qsub (Hình 3.8a) thời gian giải là 32 giây (Hình

3.8b). Chạy chương trình thực hiện thuật toán giải tuần tự trên 1 node, thời

gian giải là hơn 200 giây (Hình 3.7). Như vậy việc giải song song phương

trình Laplace trên Computer Cluster đem lại hiệu quả cao hơn rất nhiều so với

giải tuần tự.

3.6. Nhận xét và đánh giá

Từ kết quả trên với việc thực hiện tuần tự trên một máy ta thấy kết quả

khác nhiều so với việc thực hiện trên nhiều máy với nhiều vi xử lý. Với

phương trình Laplace 2D thì quá trình xử lý được thực hiện lặp trên mỗi phần

tử, nếu ta tăng số lượng phần ở mức lớn hơn thì thời gian thực hiện tính toán

trên một máy sẽ tốn nhiều thời gian khi thực hiện trên nhiều máy. Phương

trình Laplace là một phương trình đạo hàm riêng được áp dụng nhiều trong

trong ngành vật lý như tính giao động của dây, truyền nhiệt trong môi trường

đẳng hướng,…. Do vậy đối với các chương trình có độ phức tạp trong tính

toán hoặc những bài toán lớn thì xử lý song song trên nhiều máy sẽ được kết

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

quả như mong muốn và giảm thiểu được thời gian thực hiện.

79

KẾT LUẬN VÀ KIẾN NGHỊ

1. Kết luận

Trong cuốn luận văn này học viên đã nghiên cứu chi tiết lý thuyết xử lý

song song và xử lý phân tán; nghiên cứu mô hình, cách xây dựng, lập trình

trên Cluster cũng như việc cài đặt hệ thống Cluster server và ứng dụng để giải

phương trình vi phân đạo hàm riêng Laplace, một phương trình có ứng dụng

lớn trong khoa học kỹ thuật và có cách giải rất phức tạp. Các kết quả khả

quan thu được là minh chứng nói lên triển vọng của tính toán song song, của

Computer Cluster.

Trong bài toán trên học viên đã áp dụng việc xử lý song song đối với

2. Kiến nghị

phương trình Laplace trên 2 chiều, kết hợp với công thức lặp Jacobi để giải

quyết số lượng phần tử tương đối nhỏ. Nhưng đối với số lượng phần tử lớn và

do tính chất yêu cầu của bài toán thì thuật toán cần phải được cải tiến thêm và

song song hóa trên nhiều chiều khác nhau. Trong thời gian tiếp theo học viên

sẽ từng bước nghiên cứu xây dựng một phương pháp mới có thể giải bài toán

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

một cách nhanh gọn.

80

TÀI LIỆU THAM KHẢO

Tiếng Việt

[1] TS. Nguyễn Mạnh Hùng, Bài giảng xử lý song song, Trường Học viện kỹ

thuật Quân sự.

[2] GS. Tạ Văn Đĩnh, 2002, Phương pháp sai phân và Phương pháp phần tử

hữu hạn, NXB Khoa học Kỹ thuật.

[3] Nguyễn Văn Chương, 2002, Phương trình đạo hàm riêng, NXBGD.

Tiếng Anh

[4] C. A. R. Hoare, Communicating Sequencatial Processes, Prentice Hall,

1985 (new version 2003, Jim.Davies@comlab.ox.ac.uk).

[5] Joseph JáJá, An Introduction to Parallel Algrithms, Addison - Wesley,

1992.

[6] Bitola, Parallel Numerical Simulation, October 2-8, 2005.

[7] M. Sasikumar, Dinesh Shikhare, P. Ravi Prakash, Introduction to Parallel

Processing, Prentice - Hall, 2000.

[8] Seyed H. Roosta, Parallel Processing and Parallel Algorithms, Theory

and Computation, Springer 1999.

[9] Roy Culver, Numerical Solution of the Poisson Equation, MAE 237

Computational Fluid Dynamics, (January 24, 2005).

[10] Eric Dow, A Parallel Iterative Poisson Solver for a Distributed Memory

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Architecture, May 11, 2010.