Thầy đã tạo điều kiện cho tôi có cơ hội được tham gia và thực hiện đề tài với chủ đề “Mô hình hóa quan hệ sự kiện nhằm phát hiện các lỗi nhất quán bộ nhớ trong giao tiếp truyền thông
TỔNG QUAN
GIỚI THIỆU ĐỀ TÀI
Ngày nay với sự phát triển nhanh chóng của các lĩnh vực khoa học, kỹ thuật và kinh tế thì nhu cầu tính toán cũng ngày càng trở nên đa dạng và phong phú, đòi hỏi tốc độ tính toán nhanh với lượng dữ liệu xử lý lớn Các máy tính cá nhân không còn có thể đáp ứng nổi nhu cầu tính toán cho các bài toán dữ liệu lớn nữa, do đó để đáp ứng được nhu cầu tính toán ngày càng cao này thì hàng loạt các siêu máy tính ra đời và đưa đến việc hình thành của một lĩnh vực khoa học, đó chính là lĩnh vực tính toán hiệu năng cao Qua hơn 50 năm phát triển, lĩnh vực tính toán hiệu năng cao đã có được những bước tiến vượt bậc, tốc độ của các siêu máy tính ngày càng được nâng cao Tính đến thời điểm tháng 11/2017, siêu máy tính có tốc độ tính toán nhanh nhất thế giới là siêu máy tính Sunway TaihuLight với tốc độ xấp xỉ 93 petaFLOPS [1]
Với tốc độ phát triển không ngừng của lĩnh vực tính toán hiệu năng cao thì trong tương lai gần sẽ xuất hiện các siêu máy tính có thể đạt đến tốc độ exaFLOPS Khi các siêu máy tính đạt đến tốc độ này xuất hiện thì đồng nghĩa với việc các phần mềm, các ứng dụng tính toán khoa học… trước đây (trên các hệ thống petaFLOPS) thường không thể đạt được hiệu suất tốt nhất như khi chạy trên các hệ thống máy tính exaFLOPS nữa Do đó, để đón đầu xu thế tính toán exascale (exascale computing) [2, 3], các nhóm nghiên cứu trên thế giới đã bắt đầu tiến hành nhiều nghiên cứu về các giải thuật, phần mềm, mô hình lập trình, mới để có thể hoạt động hiệu quả trên các siêu máy tính exaFLOPS
Hiện nay, MPI (mô hình giao tiếp truyền thông điệp) [4] là một đặc tả giao diện thư viện truyền thông điệp được dùng phổ biến trong các ứng dụng tính toán khoa học chạy trên các siêu máy tính hoặc các hệ thống máy tính hiệu năng cao Các chương trình hoạt động dựa trên mô hình truyền thông điệp trước đây chủ yếu sử dụng hai cơ chế lập trình giao tiếp truyền thông điệp là giao tiếp điểm với điểm (point-to-point) và giao tiếp nhóm (collective) Cả hai cơ chế lập trình này đều có đặc điểm chung là cả bên gửi và bên nhận đều phải tham gia vào quá trình giao tiếp trực tiếp và yêu cầu cần phải có sự đồng bộ từ hai bên cho nên chúng được gọi là giao tiếp song phương
2 (two-sided communication) Trong hai cơ chế trên, bộ nhớ là dành riêng cho mỗi quá trình (process) Mỗi khi bên gửi gọi hàm 𝑀𝑃𝐼_𝑆𝑒𝑛𝑑 và bên nhận gọi hàm 𝑀𝑃𝐼_𝑅𝑒𝑐𝑣 thì dữ liệu trong bộ nhớ (memory) của bên gửi sẽ được sao chép đến bộ đệm (buffer) rồi sau đó gửi ra mạng rồi đến bộ nhớ của bên nhận Hạn chế của chúng là bên gửi phải chờ bên nhận sẵn sàng nhận dữ liệu trước khi nó có thể gửi dữ liệu đi Điều này dẫn đến việc dữ liệu được truyền có thể phải bị trì hoãn gây ra việc giảm hiệu suất chương trình Hình 1 minh họa cho tình huống này Để giải quyết hạn chế này, mô hình giao tiếp truyền thông điệp đã cung cấp một cơ chế giao tiếp khác là RMA [5, 6], hay còn được gọi là giao tiếp đơn phương hay một phía (one-sided communication) bởi vì yêu cầu chỉ một quá trình duy nhất truyền dữ liệu Bên cạnh đó, cơ chế giao tiếp này ngày càng được sử dụng phổ biến trong nhiều ứng dụng hơn [7-10] bởi vì nó cho phép người lập trình tận dụng được khả năng của hạ tầng RDMA Không giống như cơ chế giao tiếp truyền thông điệp song phương, cơ chế giao tiếp đơn phương phân tách giữa việc truyền dữ liệu với đồng bộ nhằm tăng khả năng truyền dữ liệu đồng thời cũng như khả năng mở rộng (scalability) cho ứng dụng Hơn thế nữa, giao tiếp đơn phương còn làm cho hiệu suất chương trình cao hơn bằng cách xóa bỏ việc so trùng thông điệp và điều phối bộ nhớ đệm ở bên nhận mà những cái này chỉ xảy ra trong cơ chế giao tiếp song phương Do đó, giao tiếp đơn phương được kì vọng là cơ chế giao tiếp truyền thông điệp hiệu quả phù hợp với các hệ thống siêu máy tính exaFLOPs xuất hiện trong tương lai gần
Hình 1: Bên gửi gọi 𝑀𝑃𝐼_𝑆𝑒𝑛𝑑 nhưng phải đợi bên nhận gọi 𝑀𝑃𝐼_𝑅𝑒𝑐𝑣 trước khi dữ liệu có thể được gửi đi Khả năng phân tách giữa truyền và đồng bộ dữ liệu là một điểm mạnh của cơ chế giao tiếp truyền thông điệp đơn phương song nó cũng đem lại nhiều thách thức cho
3 người lập trình Người lập trình vừa phải điều phối một mô hình bộ nhớ phức tạp vừa phải sắp xếp các tác vụ đồng bộ (synchronization call) thích hợp để duy trì tính nhất quán dữ liệu của chương trình trong khi các tác vụ truy xuất dữ liệu (communication call) có tính bất đồng bộ và non-blocking Chính sự phức tạp này đã gây ra nhiều lỗi đồng bộ trong các ứng dụng tính toán khoa học Lỗi nhất quán bộ nhớ (memory consistency error) [11] hay còn gọi là lỗi tương tranh (race condition) [12] hoặc còn gọi là lỗi đồng bộ (synchronization error) [13, 14] là một trong các lỗi phổ biến được gây ra trong cơ chế giao tiếp đơn phương Để thuận tiện cho người đọc, trong tài liệu này sẽ thống nhất gọi là lỗi nhất quán bộ nhớ Lỗi này đã được tìm thấy trong một số ứng dụng thật: (1) emulate [11] – một chương trình mô phỏng bộ nhớ chia sẻ phân bố, (2) BT-broadcast [15] – một giải thuật phát tán cây nhị phân sử dụng cơ chế giao tiếp một phía, (3) lockopts [16] – một trường hợp kiểm thử RMA trong gói thư viện MPICH
Hình 2 đưa ra một số ví dụ phổ biến về lỗi nhất quán bộ nhớ Hình 2a cho thấy lỗi nhất quán bộ nhớ xảy ra trên cùng một giai đoạn (epoch) 𝑀𝑃𝐼_𝑃𝑢𝑡 truyền dữ liệu trong 𝑏𝑢𝑓 từ quá trình 𝑃 0 đến 𝑃 1 Sau khi thực thi hàm 𝑀𝑃𝐼_𝑃𝑢𝑡, dữ liệu trong 𝑏𝑢𝑓 có thể đã được gửi đi hoàn toàn hoặc cũng có thể là chưa do hàm 𝑀𝑃𝐼_𝑃𝑢𝑡 có tính chất non-blocking Do đó, rất có thể dữ liệu trong 𝑏𝑢𝑓 sẽ bị xung đột bởi tác vụ cục bộ store (lệnh gán) ngay sau đó Các lỗi như thế này là rất phổ biến trong các ứng dụng sử dụng cơ chế giao tiếp đơn phương Chẳng hạn như trong một phiên bản thư viện ADLB [17] được sử dụng trong ứng dụng vật lý nguyên tử GFMC [18], người lập trình đã dùng tác vụ 𝑀𝑃𝐼_𝑃𝑢𝑡 để truyền dữ liệu từ một biến cục bộ trong một hàm và hàm này trả kết quả về là giá trị của biến cục bộ đó mà không đợi 𝑀𝑃𝐼_𝑃𝑢𝑡 hoàn thành Điều này cũng gây ra lỗi nhất quán bộ nhớ tương tự như trong hình 2a
Hình 2b chỉ ra một ví dụ khác về lỗi nhất quán bộ nhớ giữa các quá trình khi dùng các hàm đồng bộ chủ động Các hàm 𝑀𝑃𝐼_𝑃𝑢𝑡 trong các quá trình 𝑃 0 và 𝑃 2 xung đột với nhau bởi vì chúng rất có thể truy xuất đồng thời vùng nhớ chia sẻ 𝑋 trong 𝑃 1 và điều này có thể sẽ gây ra kết quả không mong đợi cho chương trình Hình 2c chỉ ra một ví dụ về lỗi nhất quán bộ nhớ tương tự như trong hình 2b khi dùng các hàm đồng bộ thụ động Hình 2d phác họa một ví dụ khác về lỗi nhất quán bộ nhớ trong tình huống mà hàm 𝑀𝑃𝐼_𝑃𝑢𝑡 xảy ra ở bên gửi xung đột với tác vụ store ở bên nhận bởi vì chúng sẽ ghi dữ liệu lên cùng một vùng nhớ
4 Hình 2: Lỗi nhất quán bộ nhớ [11] Để chạy một ứng dụng tính toán khoa học, các nhà khoa học có thể chạy xong ứng dụng mất vài ngày, thậm chí lên đến hàng tháng Tuy nhiên, thời gian chạy ứng dụng còn có thể kéo dài hơn gấp nhiều lần nếu nó có chứa các lỗi nhất quán bộ nhớ do phải chạy đi chạy lại chương trình nhiều lần để tìm lỗi Hơn thế nữa, lỗi nhất quán bộ nhớ
5 là một lỗi ngữ nghĩa rất khó có thể phát hiện ra bằng kiến thức thông thường nên khi gặp lỗi này trong chương trình, người lập trình rất khó có khả năng mường tượng điều gì đang diễn ra Do đó, việc phát hiện các lỗi nhất quán bộ nhớ là một nhu cầu thiết yếu xuất phát từ thực tiễn nhằm cải thiện độ tin cậy cũng như nâng cao hiệu suất của chương trình Đồng thời, còn giúp người lập trình có thể tiết kiệm được thời gian chạy chương trình
Tóm lại, vấn đề được nêu ra có ý nghĩa về mặt khoa học và thực tiễn như sau:
• Ý nghĩa thực tiễn: Việc phát hiện các lỗi nhất quán bộ nhớ có thể được triển khai trên các chương trình song song sử dụng cơ chế truyền thông điệp đơn phương thực thi trên hệ thống máy tính cụm hiện có tại trường Đại Học Bách Khoa Thành Phố Hồ Chí Minh nhằm cải thiện độ tin cậy cũng như nâng cao hiệu suất của chương trình
• Ý nghĩa khoa học: vấn đề nghiên cứu của đề tài có một số ý nghĩa quan trọng sau đây: o Giải quyết lỗi nhất quán bộ nhớ – một lỗi trong cơ chế giao tiếp đơn phương mà hầu như chưa có một giải thuật nào thực sự giải quyết vấn đề này một cách triệt để o Cải thiện độ tin cậy cũng như nâng cao hiệu suất chương trình o Giúp người lập trình phát hiện lỗi dễ dàng hơn
1.1.3 CÁC CÔNG TRÌNH NGHIÊN CỨU LIÊN QUAN
Hiện nay trên thế giới có một số công bố khoa học liên quan trực tiếp đến việc giải quyết các lỗi nhất quán bộ nhớ, tiêu biểu trong số đó là:
1 Giải thuật “bộ nhớ phụ” (mirror window)
Trong công trình này [12], Mi-Young Park và Sang-Hwa Chung đã xem xét các lỗi nhất quán bộ nhớ giữa các tác vụ truyền dữ liệu trong cơ chế giao tiếp đơn phương bên trong một nhóm hàm đồng bộ và cả giữa các nhóm hàm đồng bộ với nhau Tuy nhiên, nhóm tác giả vẫn chưa xem xét mối quan hệ sự kiện giữa các tác vụ cục bộ
(load/store) với các tác vụ truyền dữ liệu Giải thuật của nhóm tác giả chủ yếu sử dụng bộ nhớ phụ để kiểm tra xem bộ nhớ chính (window memory) có thể truy xuất an toàn hay không Bộ nhớ phụ này được tạo ra mỗi khi chương trình tạo ra bộ nhớ chính Sau đó, chương trình sẽ khởi tạo giá trị cho tất cả các ô nhớ của bộ nhớ phụ với một hằng là “no_op” “no_op” có nghĩa là không có bất cứ tác vụ nào xảy ra ở bộ nhớ chính Kích thước của bộ nhớ phụ tỉ lệ thuận với kích thước của bộ nhớ chính và mỗi ô nhớ của bộ nhớ phụ sẽ tương ứng với mỗi ô nhớ trên bộ nhớ chính, chỉ khác ở
MỤC TIÊU, GIỚI HẠN VÀ ĐỐI TƯỢNG NGHIÊN CỨU
1.2.1 MỤC TIÊU NGHIÊN CỨU Để giải quyết vấn đề đã được nêu ra, đề tài đặt ra một số mục tiêu nghiên cứu như sau:
• Chỉ ra các tính chất đặc trưng của các sự kiện được dùng trong cơ chế giao tiếp truyền thông điệp đơn phương
• Mô hình hóa quan hệ giữa các sự kiện này dưới dạng các định nghĩa, quy luật, biểu thức toán học, …
• Đề xuất một kỹ thuật dựa trên clock nhằm phát hiện các lỗi nhất quán bộ nhớ trong cơ chế truyền thông điệp đơn phương Đo đạc kết quả nghiên cứu bằng việc thực nghiệm trên một số ứng dụng nổi tiếng để kiểm chứng tính hiệu quả của kỹ thuật đề xuất dựa trên ba tiêu chí: độ chính xác, độ tiêu tốn bộ nhớ, độ làm chậm và khả năng mở rộng của kỹ thuật
Trong cơ chế giao tiếp truyền thông điệp đơn phương, đề tài chỉ xem xét các sự kiện sau:
• Các hàm giao tiếp đặc trưng: 𝑀𝑃𝐼_𝑃𝑢𝑡, 𝑀𝑃𝐼_𝐺𝑒𝑡, 𝑀𝑃𝐼_𝐴𝑐𝑐𝑢𝑚𝑢𝑙𝑎𝑡𝑒
• Các nhóm hàm đồng bộ đặc trưng: 𝑀𝑃𝐼_𝑊𝑖𝑛_𝑓𝑒𝑛𝑐𝑒, 𝑀𝑃𝐼_𝑊𝑖𝑛_𝑠𝑡𝑎𝑟𝑡/
• 𝑀𝑃𝐼_𝑊𝑖𝑛_𝑠𝑡𝑎𝑟𝑡/𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑒/𝑝𝑜𝑠𝑡/𝑤𝑎𝑖𝑡 được sử dụng trong ngữ cảnh đồng bộ mạnh (strong synchronization)
• Các tác vụ cục bộ: load/store
• Các hàm đồng bộ trong giao tiếp truyền thông điệp song phương có ảnh hưởng tới đơn phương: 𝑀𝑃𝐼_𝑆𝑒𝑛𝑑/𝑅𝑒𝑐𝑣, 𝑀𝑃𝐼_𝐵𝑎𝑟𝑟𝑖𝑒𝑟
Các hàm khác trong cơ chế giao tiếp truyền thông điệp không được xem xét trong phạm vi đề tài này
Sự ra đời của các hệ thống tính toán hiệu năng cao đã trở nên phổ biến trên thế giới trong hơn thập kỉ qua Tại trường Đại học Bách Khoa thành phố Hồ Chí Minh, hệ thống máy tính cụm (tạm gọi là hệ thống HPC) cũng đã được triển khai và đi vào hoạt động Với việc đặt mục tiêu ban đầu là các ứng dụng tính toán khoa học, trên nền tảng hệ thống máy tính sẵn có tại trường, đối tượng nghiên cứu mà đề tài quan tâm trong phạm vi nghiên cứu là các ứng dụng song song chạy trên hệ thống HPC này
Cụ thể hơn, các chương trình được đề cập đến trong đề tài này là các chương trình truyền thông điệp (message) Trong đó, mỗi chương trình thực thi tạo ra nhiều quá trình Mỗi quá trình chỉ gồm các sự kiện giao tiếp với nhau bằng cách sử dụng cơ chế giao tiếp đơn phương Các sự kiện chính là các hàm hoặc tác vụ được thực thi đã được đề cập đến trong Mục 1.2.2
PHƯƠNG PHÁP NGHIÊN CỨU
Nội dung chính của phương pháp nghiên cứu sẽ bao gồm những điểm chính sau:
1.3.1 XÂY DỰNG GIẢI THUẬT CLOCK ĐỂ THỂ HIỆN MỐI QUAN HỆ GIỮA CÁC SỰ KIỆN VỀ MẶT THỜI GIAN
Logical clock là một kỹ thuật phổ biến được dùng không chỉ để thể hiện khái niệm thời gian trong một hệ phân bố mà còn cho thấy được sự hiểu biết của một quá trình về các quá trình khác khi đứng ở một sự kiện cụ thể được trình bày trong một số công bố khoa học [20-22] Tuy nhiên, các công bố khoa học này chỉ tập trung vào các sự kiện trong cơ chế giao tiếp song phương và cho đến thời điểm hiện tại, vẫn chưa có công bố khoa học nào xây dựng một hệ thống clock cho các sự kiện trong cơ chế giao tiếp đơn phương Dựa trên quan hệ sự kiện đã được đề xuất trước đây [5], đề tài sẽ tiến hành xây dựng một hệ thống clock để gán nhãn thời gian (timestamp) cho chúng
Dựa vào nhãn thời gian mà mỗi sự kiện có thể thấy được bức tranh toàn cục trong một hệ thống phân bố và nó cũng thể hiện được quan hệ giữa các sự kiện trong một chương trình
1.3.2 ĐỀ XUẤT PHƯƠNG PHÁP PHÁT HIỆN CÁC LỖI NHẤT QUÁN BỘ NHỚ DỰA TRÊN CLOCK
Các lỗi nhất quán bộ nhớ xuất hiện khi có hai tác vụ cùng truy xuất đồng thời vào một vùng nhớ Nhờ vào hệ thống clock được đề xuất mà ta có thể kiểm tra được xem hai tác vụ truy xuất vùng nhớ có là đồng thời hay không Từ đó, đề ra phương pháp phát hiện các lỗi nhất quán bộ nhớ xảy ra cả trong một hàm đồng bộ và giữa các hàm đồng bộ với nhau
1.3.3 HIỆN THỰC VÀ ĐÁNH GIÁ PHƯƠNG PHÁP ĐỀ XUẤT Để hiện thực phương pháp đã đề xuất, đề tài sẽ dùng một số thư viện hữu ích như GMP [23] Trước khi tiến hành làm thực nghiệm cần phải tìm kiếm một số ứng dụng nổi tiếng có xuất hiện các lỗi nhất quán bộ nhớ hoặc một số ứng dụng khác có thể dễ dàng tiêm lỗi để đo đạc Đề tài sẽ đánh giá kỹ thuật đã đề xuất dựa trên các tiêu chí, đó là độ chính xác, độ làm chậm, độ tiêu tốn bộ nhớ và khả năng mở rộng của chương trình.
CẤU TRÚC LUẬN VĂN
Luận văn được chia thành 5 chương, nội dung chính của mỗi chương như sau:
Chương mở đầu giới thiệu ngắn gọn về tình hình nghiên cứu thuộc lĩnh vực đề tài
Lý do, mục tiêu, đối tượng và phạm vi nghiên cứu đề tại cũng được nêu trong chương
14 này Bên cạnh đó, học viên còn giới thiệu rõ phương pháp nghiên cứu cũng như hướng tiếp cận của mình.
KIẾN THỨC NỀN TẢNG
LỖI NHẤT QUÁN BỘ NHỚ
Các lỗi nhất quán bộ nhớ đã được định nghĩa một cách rõ ràng trong nghiên cứu của Chen và các cộng sự [11] Nếu có hai sự kiện xảy ra đồng thời và truy xuất vào cùng một vùng nhớ và có ít nhất một trong hai sự kiện này là một sự kiện ghi vào vùng nhớ (có thể cục bộ hoặc từ xa) thì có một lỗi nhất quán bộ nhớ xuất hiện trong chương trình truyền thông điệp đơn phương Một ngoại lệ cho định nghĩa này là khi các tác vụ 𝑀𝑃𝐼_𝐴𝑐𝑐𝑢𝑚𝑚𝑢𝑙𝑎𝑡𝑒 mà sử dụng cùng một phép toán (có thể là cộng, trừ, nhân…) và cùng kiểu dữ liệu căn bản Hai sự kiện 𝑎 và 𝑏 xảy ra đồng thời (|| 𝑐𝑜ℎ𝑏 ) khi chúng không được định nghĩa bởi quan hệ consistency happens-before ( 𝑐𝑜ℎ𝑏 → ) [5]
𝑎 || 𝑐𝑜ℎ𝑏 𝑏 ≡ (ơ 𝑎 𝑐𝑜ℎ𝑏 → 𝑏) (ơ 𝑏 𝑐𝑜ℎ𝑏 → 𝑎) (1) Quan hệ 𝑐𝑜ℎ𝑏 → giữa 𝑎 và 𝑏 là bao đóng chuyển tiếp (transitive closure) của tập giao của các quan hệ happenes-before ( ℎ𝑏 → ) [19] và quan hệ consistency ( 𝑐𝑜 →) [5]
𝑎 𝑐𝑜ℎ𝑏 → 𝑏 ≡ 𝑎 ℎ𝑏 → 𝑏 𝑏→ 𝑎 𝑐𝑜 (2) Quan hệ ℎ𝑏 → giữa 𝑎 và 𝑏 là bao đóng chuyển tiếp của tập hợp của các quan hệ program order 𝑝𝑜 → [19] và quan hệ synchronization ( 𝑠𝑜 →) [19]
𝑎 ℎ𝑏 → 𝑏 ≡ 𝑎 𝑝𝑜 → 𝑏 𝑏 𝑠𝑜 → 𝑎 (3) Quan hệ 𝑝𝑜 → chỉ ra thứ tự thực thi của các sự kiện trong chương trình xảy ra trên cùng một quá trình trong khi → là một thứ tự toàn phần của các quan hệ đồng bộ giữa các 𝑠𝑜 sự kiện động bộ bao gồm các đồng bộ ngoại như các cặp gửi nhận (𝑀𝑃𝐼_𝑆𝑒𝑛𝑑/𝑅𝑒𝑐𝑣…) và các tác vụ collective (𝑀𝑃𝐼_𝐵𝑎𝑟𝑟𝑖𝑒𝑟 ) 𝑐𝑜 → định nghĩa quan hệ bán phần của các tác vụ liện quan đến bộ nhớ 𝑎→ 𝑏 đảm bảo rằng các tác động 𝑐𝑜 đến bộ nhớ của 𝑎 có thể thấy được ở 𝑏
16 Tổng quát, có hai loại lỗi nhất quán bộ nhớ Một loại xảy ra bên trong một giai đoạn trong cùng một quá trình (Hình 9) và loại còn lại xảy ra giữa các quá trình với nhau (Hình 10)
Hình 9: Lỗi nhất quán bộ nhớ trong một giai đoạn [11]
Hình 10: Lỗi nhất quán bộ nhớ giữa các quá trình [11]
HIỆN THỰC
ĐÁNH GIÁ
MÔI TRƯỜNG THỰC NGHIỆM
Các thực nghiệm được thực hiện trên hai hệ thống tính toán hiệu năng cao Một hệ thống là SuperNode-XP [30] ở đại học Bách Khoa Thành Phố Hồ Chí Minh gồm 24 nút tính toán, mỗi nút bao gồm 2 bộ xử lý Intel Xeon E5-2680v3 với tổng cộng 24 lõi vật lý và ít nhất 128 GB RAM mỗi nút Hệ thống còn lại là Pha II của SuperMUC [31] đặt tại trung tâm siêu máy tính Leibniz bao gồm 3072 nút tính toán, mỗi nút bao gồm 2 bộ xử lý Intel Xeon E5-2697v3 với tổng cộng 28 lõi vật lý và 64 GB RAM mỗi nút MC-CChecker được đánh giá dựa trên 5 tiêu chí: độ chính xác, kích thước tập tin lưu vết, độ tiêu tốn bộ nhớ (RAM) và khả năng mở rộng Thư viện số học độ chính xác bội GNU (GMP) phiên bản 6.1.2 [23] được sử dụng để hiện thực giải thực Encoded Vector Clock Bản hiện thực MPI được sử dụng trên SuperNode-XP là Intel MPI Library for Linux * OS, Version 2017 Update 3 Build 20170405 (build id: 17193) trong khi bản hiện thực MPI trên Pha II của SuperMUC là Intel MPI Library for Linux * OS, Version 5.1.3 Build 20160120 (build id: 14053).
PHƯƠNG PHÁP ĐÁNH GIÁ
Ba ứng dụng truyền thông điệp đơn phương được sử dụng để đánh giá độ chính xác:
(1) fatalBug là một ứng dụng giúp thể hiện được ưu điểm của MC-CChecker so với MC-Checker trong việc duy trì quan hệ bắc cầu, giúp loại bỏ tiềm năng xảy ra false positives
(2) BT-broadcast [15] là một giải thực phát tán cây nhị phân sử dụng giao tiếp truyền thông điệp đơn phương
(3) lockopts [16] là một trường hợp kiểm thử giao tiếp truyền thông điệp đơn phương trong gói thư viện MPICH với mã số kiểm duyệt svn 10308
Hai ứng dụng cuối đều là những ứng dụng thật chứa các lỗi nhất quán bộ nhớ bên trong một giai đoạn và giữa các quá trình trong thứ tự tương ứng
26 Để đánh giá hao phí của thời gian thực thi và độ tiêu tốn bộ nhớ, BT-broadcast và lockopts lúc đầu sẽ được chạy cùng với MC-CChecker trên SuperNode-XP để tạo ra các tập tin lưu vết tương ứng Các thực nghiệm này được chạy với số lượng quá trình dao động từ 8 đến 128 Sau đó, một máy tính cá nhân với cấu hình bao gồm một bộ xử lý Intel Core i5-2430M tần số xung 2.4 GHz và 4 GB RAM được sử dụng để phân tích các tập tin lưu vết Bên cạnh đó, một vài thực nghiệm khác cũng được thực hiện để đánh giá khả năng mở rộng của MC-CChecker Các tập tin lưu vết được tạo ra từ các thực nghiệm đánh giá khả năng mở rộng của MC-CChecker bằng cách chạy chỉ ứng dụng lockopts trên Pha II của SuperMUC Lý do chỉ chạy ứng dụng lockopts để đánh giá khả năng mở rộng của MC-CChecker là do ứng dụng BT-broadcast bị treo khi chạy ít nhất 2 quá trình trên Pha II của SuperMUC Điều này cũng xảy ra tương tự trên hệ thống máy tính cụm Glenn và được giải thích là do cơ chế sử dụng các biến tạm trên các hệ thống là khác nhau [32] SuperNode-XP không bị treo khi chạy ứng dụng lockopts với ít nhất 2 quá trình Sau đó, các tập tin lưu vết được sinh ra này cũng được phân tích trên máy tính cá nhân với cấu hình đã được đề cập ở trên Các thực nghiệm đánh giá khả năng mở rộng được chạy với số lượng quá trình biên thiên từ 512 đến 8192 Tất cả các thực nghiệm trên đều được thực hiện 5 lần để tính giá trị trung bình.
KẾT QUẢ THỰC NGHIỆM
Sau khi chạy và phân tích ba ứng dụng truyền thông điệp đơn phương gồm fatalBug, BT-broadcast và lockopts với MC-CChecker, ta thu được một số kết quả được thể hiện trong Bảng 2 Các kết quả thực nghiệm thể hiện rằng MC-CChecker không những có thể phát hiện chính xác tất cả các lỗi nhất quán bộ nhớ và mô tả thông tin lỗi bao gồm: vị trí lỗi, nguồn gốc lỗi, triệu chứng lỗi, chế độ đồng bộ, các tác vụ xung đột và số lượng quá trình tối thiểu kích lỗi chi tiết trong các ứng dụng BT-broadcast và lockopts như trong MC-Checker mà còn không gây ra các false positive khi phân tích fatalBug (mà đây là một hạn chế của MC-Checker) [11] Do đó, MC-CChecker tốt hơn MC-Checker khi xét về độ chính xác
Bảng 2: Độ chính xác của MC-CChecker Ứng dụng truyền thông điệp đơn phương
Chỉ ra nguồn gốc lỗi?
Các tác vụ xung đột
Số quá trình tối thiểu
27 kích lỗi fatalBug không BT- broadcast có có bên trong một gia đoạn chủ động get và load treo chương trình
2 lockopts có có giữa các quá trình thụ động put/get và load/store kết quả sai
4.3.2 DUNG LƯỢNG TẬP TIN LƯU VẾT
Bởi vì MC-CChecker tái sử dụng ST-Analyzer và Profiler của MC-Checker nên các tập tin lưu vết được tạo ra từ MC-Checker và MC-CChecker có cùng dung lượng
Tuy nhiên, trước khi xem xét các tiêu chí đánh giá khác, việc đầu tiên cần làm là phải đánh giá lại dung lượng của các tập tin lưu vết được sinh ra từ MC-Checker Các hình 14 và 15 thể hiện dung lượng của tập tin lưu vết được tạo ra sau khi chạy BT-broadcast và lockopts với Profiler của MC-CChecker với số lượng quá trình dao động từ 8 đến 128 Các tập tin lưu vết này có dung lượng biến thiên từ 1.24 đến 21.8 kB đối với BT-broadcast và từ 15.6 đến 235 kB đối với lockopts Các kết quả thực nghiệm này thể hiện rằng cả ST-Analyzer và Profiler của MC-Checker được hiện thực khá tối ưu bởi vì chỉ cần rất ít dung lượng ổ cứng để lưu trữ thông tin cần thiết cho mục đích phân tích và đặc biệt xu hướng tăng dung lượng của tập tin lưu vết xấp xỉ đường thẳng tuyến tính khi thay đổi số lượng quá trình Chi phí lưu trữ tập tin lưu vết nhỏ là do MC-Checker chỉ lưu trữ các sự kiện MPI và các load/store cần thiết [11]
28 Hình 14: Dung lượng tập tin lưu vết sinh ra từ BT-broadcast
Hình 15: Dung lượng tập tin lưu vết sinh ra từ lockopts
Các hình 16 và 17 thể hiện thời gian thực thi của BT-broadcast và lockopts khi chạy chúng với sô lượng quá trình biến thiên từ 8 đến 128 Thời gian thực thi của BT- broadcast thay đổi từ 1.49 đến 16.342 ms trong khi nó là từ 3.0708 đến 32.4544 ms đối với lockopts Dễ dàng nhận thấy rằng thời gian thực thi của cả hai ứng dụng tăng theo chiều hướng tuyến tính Các kết quả này chứng minh rằng MC-CChecker tốn rất ít thời gian để kiểm tra xem liệu rằng các ứng dụng truyền thông điệp có chứa các lỗi nhất quán bộ nhớ hay không
Dung lượng tập tin lưu vết (kB)
Dung lượng tập tin lưu vết (kB)
29 Hình 16: Thời gian thực thi của BT-broadcast với MC-CChecker
Hình 17: Thời gian thực thi của lockopts với MC-CChecker
4.3.4 ĐỘ TIÊU HAO BỘ NHỚ
Các hình 18 và 19 thể hiện độ tiêu hao bộ nhớ của DN-Analyzer trong MC-CChecker để kiểm tra xem có sự xuất hiện của các lỗi nhất nhất quán bộ nhớ trong BT-broadcast và lockopts khi chạy chúng từ 8 đến 128 quá trình Độ tiêu hao bộ nhớ biến thiên từ 608 đến 2644 kB đối với BT-broadcast và từ 603.2 đếm 3233.6 kB đối với lockopts
Tuy nhiên, có một sự tăng đột biến khi chạy các ứng dụng truyền thông điệp này với 16 và 32 quá trình Độ tiêu hao bộ nhớ khi chạy với 32 quá trình gấp 3 lần so với chạy với 16 quá trình Lý do cho việc tăng đột biến độ tiêu hao bộ nhớ này là do hao phí từ việc xử lý các số lớn trong giải thực Encoded Vector Clock bắt đầu cao hơn hao phí từ việc phát hiện các lỗi nhất quán bộ nhớ Các kết quả này chứng minh rằng DN-
Thời gian thực thi (ms)
Thơi gian thực thi (ms)
30 Analyzer của MC-CChecker tốn khá ít bộ nhớ để kiểm tra xem các lỗi nhất quán bộ nhớ có xuất hiện hay không
Hình 18: Độ tiêu hao bộ nhớ khi chạy BT-broadcast với MC-CChecker
Hình 19: Độ tiêu hao bộ nhớ khi chạy lockopts với MC-CChecker
4.3.5 KHẢ NĂNG MỞ RỘNG Để chứng minh rằng DN-Analyzer của MC-CChecker có khả năng mở rộng tốt, một lượng lớn của các tập tin lưu vết cần được tạo ra nhờ vào việc chạy các ứng dụng truyền thông điệp với số lượng quá trình lớn Cụ thể, lockopts được chạy với số lượng quá trình dao động từ 512 đến 8192 để tạo ra lượng lớn tập tin lưu vết tương ứng Các hình 20 và 21 thể hiện các kết quả thực nghiệm Trong các hình này, hai bản hiện thực DN-Analyzer đã được sử dụng Một bản hiện thực sử dụng giải thuật Vector Clock (VC) trong khi cái còn lại sử dụng giải thuật Encoded Vector Clock (EVC)
8 16 32 64 128 Độ tiêu hao bộ nhớ (kB)
8 16 32 64 128 Độ tiêu hao bộ nhớ (kB)
31 Dễ dàng nhận thấy rằng bản hiện thực DN-Analyzer sử dụng EVC gần như trùng lấp với đường thẳng tuyến tính trong khi bản thiện thực DN-Analyzer sử dụng VC truyền thống biến thiên theo hàm mũ Đường thẳng tuyến tính thể hiện rằng khi số lượng tập tin lưu vết tăng lên 𝑛 lần thì cả thời gian thực thi và độ tiêu hao bộ nhớ chương trình cũng tăng lên 𝑛 lần bởi vì DN-Analyzer là một chương trình tuần tự Do đó, DN- Analyzer của MC-CChechker có khả năng mở rộng tốt khi xử lý lượng lớn tập tin lưu vết
Hình 20: Khả năng mở rộng của MC-CChecker về thời gian thực thi khi chạy lockopts
Hình 21: Khả năng mở rộng của MC-CChecker về độ tiêu hao bộ nhớ khi chạy lockopts 0
512 1024 2048 4096 8192 Độ tiêu hao bộ nhớ (kB)
TỔNG KẾT VÀ HƯỚNG PHÁT TRIỂN
TỔNG KẾT
Trong đề tài luận văn này, một hệ thống gãn nhãn thời gian cho cơ chế giao tiếp truyền thông điệp đơn phương đã đề xuất nhằm mô hình hóa quan hệ các sự kiện trong cơ chế này Hệ thống này được áp dụng vào MC-CChecker mà là một kỹ thuật dựa trên clock nhằm giải quyết các lỗi nhất quán bộ nhớ MC-CChecker tái sử dụng lại ST-Analyzer và Profiler của MC-Checker và tập trung chính vào việc tối ưu hóa DN-Analyzer nhờ vào việc sử dụng kỹ thuật encoded vector clock thay vì quan hệ happens-before không đầy đủ được sử dụng trong MC-Checker Các kết quả thực nghiệm chứng tỏ rằng MC-CChecker có độ chính xác cao hơn MC-Checker trong việc phát hiện các lỗi nhất quán bộ nhớ xảy ra trong các ứng dụng truyền thông điệp đơn phương do triệt tiêu được các false positives trong khi vẫn duy trì được hao phí hợp lý về mặt thời gian và bộ nhớ, đặc biệt là về khả năng mở rộng Do đó, MC- CChecker là một hướng tiếp cận hiệu quả trong việc giải quyết các lỗi nhất quán bộ nhớ xảy ra trong các ứng dụng truyền thông điệp đơn phương.
HƯỚNG PHÁT TRIỂN
Bởi vì MC-CChecker tải sử dụng lại ST-Analyzer của MC-Checker nên MC-
CChecker vẫn có thể gây ra các false positives do các vấn đề liên quan đến pointer aliasing chưa được giải quyết [11] Việc giải quyết bài toán pointer aliasing khá thách thức Hướng phát triển tương lai của đề tài này sẽ tập trung giải quyết bài toán này nhằm cải thiện độ chính xác cho MC-CChecker