b.ar.com
b.ar.com đóng vai trò làm server chứng thực, chúng ta cần cài đặt gói simpleCA đi kèm để quản lý các chứng chỉ điện tử.
Đặt đường dẫn đến các lệnh của globus
[globus@b~]$source $GLOBUS_LOCATION/etc/globus-user-env.sh Cài đặt simpleCA
[globus@b~]$GLOBUS_LOCATION/setup/globus/setup-simple-ca Quá trình cài đặt thành công sẽ sinh ra 1 thư mục /home/.globus/simpleCA
Tiếp theo, để b.ar.com tin tưởng tuyệt đối vào simpleCA vừa được tạo cần thực hiện lệnh sau với quyền người dùng root
[root@b~]#$GLOBUS_LOCATION/setup/globus_simple_ca_ebb88ce5_s etup/setup-gsi -default
Sau khi lệnh trên được thực hiện ,thư mục /etc/grid-sercurity được tạo ra Sau đó cần tạo chứng chỉ điện tử cho host b.ar.com và người dùng thinh
48
Máy b.ar.com gửi yêu cầu được CA ký
[root@b~]#grid-cert-request -host `hostname` 1 file hostcert_request.pem được tạo ra nằm tại /etc/grid-sercurity
Với quyền người dùng globus, thực hiện ký lên hostcert_request.pem để tạo ra chứng chỉ điện tử cho host b
[globus@b~]grid-ca-sign –in /etc/grid-
sercurity/hostcert_request.pem –out bcert.pem
Copy file bcert.pem đè lên file hostcert.pem trong thư mục /etc/grid-sercurity Chứng chỉ điện tử cho host b đã được tạo
Tạo chứng chỉ điện tử cho người dùng thinh Chuyển sang quyền người dùng thinh
Gửi yêu cầu cần được CA ký
[thinh@b~]$grid-cert-request
1 file usercert_request.pem được tạo ra tại thư mục /home/thinh/.globus/
Với quyền người dùng globus, tạo chứng chỉ điện tử cho người dùng thinh bằng việc ký lên usercert_request.pem
[globus@b~]$grid-ca-sign –in
/home/thinh/.globus/usercert.pem –out thinhcert.pem
Người dùng thinh copy file thinhcert.pem đè lên file usercert.pem trong thư mục /home/thinh/.globus/
Quá trình tạo chứng chỉ điện tử cho người dùng thinh kết thúc. Lấy thông tin về người dùng thinh và đưa vào file grid-mapfile [thinh@b~]$ grid-cert-info –subject
Ta được thông tin sau :
/O=Grid/OU=GlobusTest/OU=simpleCA-b.ar.com/OU=ar.com/CN=Nguyen Thinh Tạo file /etc/grid-sercurity/grid-mapfile như sau :
49
"/O=Grid/OU=GlobusTest/OU=simpleCA-b.ar.com/OU=ar.com/CN=Nguyen Thinh" thinh
b1.ar.com, b2.ar.com, b4.ar.com
Copy file globus_simple_ca_xxxx_setup-0.20.tar.gz (xxxx là một mã hash được sinh ra bất kỳ tùy theo từng máy ) từ máy b.ar.com bằng lệnh scp sang các máy b1, b2 ,b3, b4. [globus@b1~]$scp
b.ar.com://home/globus/.globus/simpleCA/globus_simple_ca_xxx x_setup-0.20.tar.gz ./
Cài đặt gói vừa copy
[globus@b1~]$$GLOBUS_LOCATION/sbin/gpt-built globus_simple_ca_384920d7_setup-0.20.tar.gz
[globus@b1~]$$GLOBUS_LOCATION/sbin/gpt-postinstall
Chuyển sang người dùng root, để máy tính b1, b2, b3, b4 tin tưởng CA, cần thực hiện lệnh
[root@b1~]#$GLOBUS_LOCATION/setup/globus_simple_ca_ebb88ce5_ setup/setup-gsi -default
Tạo chứng chỉ điện tử cho host b1, b2, b4 tương tự như với host b .Với quyền root , sử dụng lệnh
[root@b1~]#grid-cert-request –host `hostname`
File hostcert_request.pem được tạo ra trong thư mục /etc/grid-sercurity/, chuyển file này sang máy b, trên máy b, dùng tài khoản globus ký lên và tạo chứng chỉ điện tử.
[globus@b~]$grid-ca-sign –in hostcert.pem –out hostbb1.pem Chuyển file hostb1.pem về máy b1, với tài khoản root trên b1, copy đè file này vào /etc/grid-sercurity/hostcert.pem.
Tạo chứng chỉ điện tử cho người dùng thinh trên b1 tương tự như làm với host bằng cách sử dụng lệnh grid-cert-request với tài khoản thinh trên b1 và grid-ca-sign với tài khoản globus trên b.
50
Các bước làm với máy b2, b4 cũng tương tự như các bước làm với máy b1. 4.1.3.2. Cấu hình dich vụ GridFTP
Cho cả 4 máy b, b1, b2, b4
Với quyền người dùng root tạo file /etc/xinetd.d/gridftp có nội dung
--- service gsiftp { instances = 100 socket_type = stream wait = no user = root env += GLOBUS_LOCATION=/usr/local/globus-4.2.1 env += LD_LIBRARY_PATH=/usr/local/globus-4.2.1/lib server = /usr/local/globus- 4.2.1/sbin/globus-gridftp-server server_args = -i log_on_success += DURATION disable = no } --- Thêm dòng gsiftp 2811/tcpvào file /etc/services
[root@b~]#echo “gsiftp 2811/tcp” >> /etc/services
2 dòng lệnh trên cho phép dịch vụ /usr/local/globus-4.2.1/sbin/globus-gridftp-server luôn được chạy với cổng 2188 ,giao thức TCP
51
Khởi động lại dịch vụ xinetd
[root@b~]#/etc/init.d/xinetd start [root@b~]#/etc/init.d/xinetd reload Kiểm tra xem dịch vụ đã chạy chưa ?
[root@b~]#netstat –an | grep 2118 Kiểm tra gridFTP hoạt động hay chưa
Với quyền người dùng thinh
[thinh@b~]grid-proxy-init -verify –debug Nếu không gặp báo lỗi , thử kiểm tra bằng việc copy sau :
[thinh@b~]globus-url-copy gsiftp://b.ar.com/etc/group /home/thinh/
Copy thành công tức là dịch vụ gridFTP đã hoạt động 4.1.3.3. Cấu hình gatekeeper
Cho cả 4 máy b, b1, b2, b4
Tạo file /etc/xinetd.d/globus-gatekeeper với nội dung sau :
--- service gsigatekeeper { socket_type = stream protocol = tcp wait = no user = root env = LD_LIBRARY_PATH=/usr/local/4.2.1/lib server = /usr/local/globus-4.2.1/sbin/globus- gatekeeper
52
server_args = -conf /usr/local/globus- 4.2.1/etc/globus-gatekeeper.conf
disable = no
env = GLOBUS_TCP_PORT_RANGE=40000,50000 }
--- Thêm dòng gsigatekeeper 2119/tcp vào file /etc/service
Khởi động lại dịch vụ xinetd.
Kiểm tra xem dịch vụ hoạt động chưa bằng lệnh netstat 4.1.3.4. Cấu hình WS GRAM
Cho cả 4 máy b, b1, b2, b4
Với quyền root ,dùng lệnh visudo thay đổi thông tin như sau : Chọn comment tại dòng
# Defaults requiretty Thêm thông tin sau vào cuối file
globus ALL=(thinh) NOPASSWD: /usr/local/globus- 4.2.1/libexec/globus-gridmap-and-execute -g /etc/grid-
security/grid-mapfile /usr/local/globus-
4.2.1/libexec/globus-job-manager-script.pl *
globus ALL=(thinh) NOPASSWD: /usr/local/globus- 4.2.1/libexec/globus-gridmap-and-execute -g /etc/grid-
security/grid-mapfile /usr/local/globus-
4.2.1/libexec/globus-gram-local-proxy-tool *
Dòng lệnh trên thêm vào file /etc/sudoer cho phép người dùng globus có quyền thực thi các file nằm tại thư mục riêng của user thinh, đảm bảo cho người dùng thinh có thể thực thi các các ứng dụng
53
Như vậy chúng ta đã cấu hình các thành phần của Globus toolkit để dảm bảo cho người dùng thinh có quyền thực thi các file thông qua cơ chế hoạt động của globus
4.2. Triển khai MPICH-G2
Thực hiện với cả 4 máy.
Với quyền người dùng root, tạo thư mục /opt/mpich Cấp quyền sở hữu thư mục cho người dùng globus:
[root@b~]#chown globus:globus /opt/mpich
Download mã nguồn chương trình mpich từ trang chủ của mpich http://www.mcs.anl.gov/research/projects/mpich2/ , mã nguồn có dạng mpich.tar.gz. Giải nén mã nguồn bằng công cụ tar
[globus@b~]$tar xzvf mpich.tar.gz
Thực hiện 3 bước cấu hình và kiểm tra môi trường cài đặt, biên dịch và cài đặt Kiểm tra môi trường cài đặt :
[globus@b mpich-1.2.7-p1]$./configure –prefix=/opt/mpich – device=globus2:-flavor=gcc32dbg
Thư mục chỉ định cài đặt là thư mục /opt/mpich, có cài đặt kết nối tới bộ công cụ globus toolkit.
Tham số device=globus2 dùng để tại một công cụ kết nối mpich với globus toolkit
Bước này thành công, tạo ra 1 makefile cho phép công cụ make tự động biên dịch chương trình.
Biên dịch
[globus@b mpich-1.2.7-p1]$make Cài đặt
54
Chương 5 : Chạy và đánh giá hiệu năng của hệ thống Grid
Hệ thống Grid mini gồm 5 máy tính kết nối chúng ta vừa tạo được hoạt động như thế nào, có hiệu năng ra sao ? Trong chương này sẽ là phần thử nghiệm lần lượt 3 chương trình tính toán song song khác nhau với kích thước bài toán khác nhau để dánh giá hiệu năng của hệ thống Grid
Các chương trình được sử dụng bao gồm : - Chương trình tính toán số PI
- Chương trình giải hệ phương trình tuyến tính (HPTTT) - Chương trình giải bài toán quy hoạch tuyến tính (QHTT)
5.1. Giới thiệu về 3 bài toán sẽ đƣợc thử nghiệm 5.1.1. Tính toán số PI
Hằng số Pi, được ký hiệu trong toán học là π, nó được xác định bởi chu vi đường tròn chia cho đường kính của đường tròn đó. Mục tiêu của chương trình là dùng giải thuật để tính toán số Pi với độ chính xác của phần thập phân cho trước.
Mã nguồn của chương trình được đi kèm phần mềm MPICH
5.1.2. Hệ phƣơng trình tuyến tính
Trong toán học (cụ thể là trong đại số tuyến tính), một hệ phƣơng trình đại số tuyến tính hay đơn giản là hệ phương trình tuyến tính là một tập hợp n phương trình
tuyến tính với k biến số:
𝑎1,1𝑥1 + 𝑎1,2𝑥2 + ⋯ + 𝑎1,𝑘𝑥𝑘 = 𝑏1 𝑎2,1𝑥1 + 𝑎2,2𝑥2 + ⋯ + 𝑎2,𝑘𝑥𝑘 = 𝑏2 𝑎3,1𝑥1 + 𝑎3,2𝑥2 + ⋯ + 𝑎3,𝑘𝑥𝑘 = 𝑏3
…
𝑎𝑛,1𝑥1 + 𝑎𝑛,2𝑥2 + ⋯ + 𝑎𝑛,𝑘𝑥𝑘 = 𝑏𝑛
Hệ phương trình trên có thể được viết theo dạng phương trình ma trận: Ax=B
55 𝑎1,1 𝑎2,1 ⋮ 𝑎𝑛,1 𝑎1,2 𝑎2,2 ⋮ 𝑎𝑛,2 𝑎1,3 𝑎2,3 ⋮ 𝑎𝑛,3 … 𝑎1,𝑘−1 𝑎1,𝑘 … 𝑎2,𝑘−1 𝑎2,𝑘 ⋮ … 𝑎𝑛,𝑘−1 𝑎𝑛,𝑘 𝑥1 𝑥2 ⋮ 𝑥𝑘 = 𝑏1 𝑏2 ⋮ 𝑏𝑘
Mục tiêu của bài toán là tìm nghiệm x của hệ phương trình trên. Các trường hợp xảy ra đối với nghiệm của bài toán là:
- Hệ không có nghiệm (vô nghiệm). - Hệ có duy nhất một nghiệm. - Hệ có vô số nghiệm.
Kết quả chạy bài toán này sẽ được lấy ra tại thời điểm giải xong HPTTT đầu tiên có kích thước mlog x mlog khi giải bài toán QHTT. Lý do là trong giải thuật áp dụng với bài toán QHTT có 1 bước phải giải HPTTT. Giải thuật áp dụng trong bài toán QHTT sẽ được trình bày sau đây.
5.1.3. Bài toán quy hoạch tuyến tính
Có thể tạm định nghĩa quy hoạch tuyến tính là lĩnh vực toán học nghiên cứu các bài toán tối ưu mà hàm mục tiêu (vấn đề được quan tâm) và các ràng buộc (điều kiện của bài toán) đều là hàm và các phương trình hoặc bất phương trình tuyến tính.
Thuật toán được áp dụng ở đây là thuật toán Newton tổng quát dùng để giải bài toán quy hoạch tuyến tính dạng chuẩn sau đây :
* min T , n: , 0n x X f c x X x Ax b x (P)
Mục đích của bài toán: với các aij, bi là biết trước, cần tìm xj (j=0,1….,n) sao cho f là nhỏ nhất.
Bài toán quy hoạch tuyến tính có tính ứng dụng rất cao trong công việc của các nhà tổ chức, thiết kế kĩ thuâ ̣t , quản lí điều hành công việc , ... và ngày càng được ứng dụng rô ̣ng rãi trong nhiều lĩnh vực khác nhau của cuô ̣c sống . Các lớp bài toán quy hoạch tuyến tính thông dụng hiện nay bao gồm bài toán lập kế hoạch, bài toán vận tải, bài toán túi xách, bài toán đóng gói, bài toán lập lịch biểu... Ngoài ra, có rất nhiều bài toán thực tế được mô hình hóa dưới dạng bài toán quy hoạch tuyến tính, ví dụ như các bài toán tìm
56
cấu trúc tối ưu của chuỗi sinh học, các mô hình môi trường thật, các bài toán cơ học hệ thống lớn, v.v.. Với khối lượng thông tin ngày càng tăng, các kích thước của các bài toán ứng dụng thực tế cũng ngày càng tăng, thế nên việc xử dụng các thuật toán truyền thống không đem lại kết quả mong đợi. Chính vì lý do này một thuật toán mới được đề ra cho phép giải các bài toán quy hoạch tuyến tính kích thước lớn (~ 106 biến, ~103 ràng buộc). Thuật toán này đã được thực hiện trên nền tảng tính toán song song sử dụng MPI. Thuật toán ban đầu sử dụng thuật toán gradient liên hợp, sau đó lấy kết quả và sử dụng tiếp thuật toán Newton tổng quát. Có 6 bước làm như sau :
1. Xác định dự đoán ban đầu x0 và p p0, p0. 2. Tính gradient , ( , , ) ( T ) k k s s k S G p x b A x A p c p
ở vòng lặp thứ k của phương pháp Newton để giải bài toán tối đa hóa không ràng buộc . Ở đây s là số thứ tự vòng lặp ngoài.
3. Xác định ma trận Hessian tổng quát cho (18)
T
k k
H IAD A ở đây A là ma trận m n , ma trận chéo n n
k
D được xác định như sau
1 if ( ) 0 ( ) 0 if ( ) 0 T i ii s k k T i k k x A p c D x A p c Như vậy ma trận m m k H .
4. Hướng tối đa hóa xấpxỉ pđược tìm như là nghiệm của hệ phương trình tuyến tính
.
k k
H p G Vì Hk là ma trận dương, đối xứng và bán xác định nên chúng ta có thể dùng phương pháp gradient liên hợp có tiền điều kiện để giải phương trình tuyến tính (21). Phần chéo của ma trận Hk được dùng như tiền điều kiện (preconditioner) cho các bước gradient liên hợp.
57
5. Xác định pk1 pk k p, với klà kích thước bước được chọn theo quy tắc Armijo:
max ( , , )
k S pk p xs
Trên thực tế tham số k được đặt bằng 1 trong tất cả các thí nghiệm tính toán. 6. Sai khi các vòng lặp trong hội tụ thì gán p pk1, tính xs1(xs A pT c), đặt
0
p p và lặp lại các bước 2-6.
5.2. Cách thức chạy 1 bài toán trên hệ thống Grid đƣợc xây dựng bởi 2 công cụ Globus Toolkit và MPICH
Đăng nhập với người dùng của globus, cụ thể trong trường hợp này là người dùng thinh
Tạo một proxy chứng thực cho người dùng Grid-proxy-init
Biên dịch mã nguồn
MPICH cung cấp các công cụ mpicc để biên dịch các bài toán được viết bằng ngôn ngữ C Ví dụ biên dịch một chương trình viết bằng ngôn ngữ C : program1.c
mpicc –o program program.c
Tạo file Resource Specification Language (RSL) đặc tả công việc tính toán cho chương trình cần chạy
RSL là một file scripts lưu trữ các thông tin chi tiết về môi trường tính toán cụ thể cho một chương trình : máy tính nào chạy chương trình, số lượng CPU được dùng để tính toán, lượng RAM được sử dụng, thời than thực thi chương trình.
Cấu trúc cơ bản của 1 file RSL dùng để chạy 1 chương trình là như sau :
+ // Bắt đầu file là dấu +
58
( &(resourceManagerContact="b.ar.com") // Host được sử dụng để chạy chương trình
(count=2) // Số lần chạy
(label="subjob 0") // Nhãn của tiến trình phụ
(environment=(GLOBUS_DUROC_SUBJOB_INDEX 0) // Môi trường thực thi của subjob
(LD_LIBRARY_PATH /usr/local/globus-4.2.1/lib/)) // Đường dẫn đến thư viện GT (directory=/home/thinh/) // Thư mục chứa chương trình
(executable=/home/thinh/cpi) // Đường dẫn đến chương trình cần thực thi trên host ) ( &(resourceManagerContact="b1.ar.com") (count=2) (label="subjob 1") (environment=(GLOBUS_DUROC_SUBJOB_INDEX 1) (LD_LIBRARY_PATH /usr/local/globus-4.2.1/lib/)) (directory=/home/thinh/) (executable=/home/thinh/cpi) ) ……
Sử dụng globusrun để chạy chương trình Globusrun –w –f file.rsl
Globurun sẽ chịu trách nhiệm đọc nội dung file RSL và thực thi chương trình với những đặc tả đã nêu, kết quả chạy được hiển thị trên màn hình máy tính
59
5.3. Kết quả chạy các chƣơng trình và đánh giá kết quả 5.3.1. Kết quả chạy chƣơng trình tính số PI
Số lƣợng máy 1 2 4
Thời gian 0.000083 0.003505 0.009917
Đánh giá : Đây là một bài toán rất nhỏ nên khi chương trình được thực thi, thời gian trao đổi giữa các host với nhau làm cho việc chạy trên nhiều máy mất nhiều hơn rất nhiều so