Tôi đã chạy thử nghiệm để so sánh hiệu suất CPU của vùng chứa docker với hiệu suất CPU của máy chủ lưu trữ đang chạy.Container docker đơn hơi vượt trội so với máy chủ của nó trong hiệu suất CPU: Tại sao?
Các trường hợp
Một: Chương trình Benchmark chạy trên máy chủ (Intel i5, 2,6 GHz, 2 bộ vi xử lý, 2 lõi)
B: Benchmark chương trình chạy trên Docker chứa chạy trên cùng máy chủ. (Không tài nguyên hạn chế được thực hiện cho container tại B. tức là chứa có tất cả 1.024 cổ phiếu cpu cho chính nó Không container khác đang chạy.)
chương trình Benchmark: bằng số Integration
bằng số tích hợp: là một ví dụ tiêu chuẩn của một chương trình ồ ạt song song. Một số tích hợp tiêu chuẩn example program được viết bằng C++ sử dụng OpenMP lib được lấy (đã được kiểm tra tính chính xác). Chương trình được chạy 11 lần bằng cách thay đổi số lượng các chủ đề có sẵn trong chương trình từ 1-11. 11 chạy này được thực hiện cho mỗi trường hợp A và B. Vì vậy, tổng cộng 22 lần chạy được thực hiện 11 cho máy chủ và 11 cho container.
trục X: Số bài có sẵn trong chương trình
Trục Y: chỉ thực hiện đó là nghịch đảo của thời gian (tính bằng cách nhân nghịch đảo của thời gian để chạy chương trình, với một hằng số).
Observation
Các Docker chứa chạy trên máy chủ là hơi đạt vượt máy chủ. Thí nghiệm này được lặp lại 4-5 lần trên 2 máy chủ khác nhau và cứ mỗi thời gian đường cong hiệu suất của thùng chứa hơi cao hơn đường cong hiệu suất máy chủ.
Câu hỏi
Làm thế nào là hiệu suất chứa cao hơn so với máy chủ khi container Docker đang chạy trên máy chủ riêng của mình?
Lý do có thể: Ưu tiên cao hơn của các quy trình nhóm docker?
Tôi giả thuyết rằng các quy trình trong nhóm của thùng chứa, có thể nhận được ưu tiên quá trình cao hơn dẫn đến hiệu suất cao hơn của chương trình chạy trong vùng chứa so với khi chương trình chạy trực tiếp trên máy chủ. Điều này nghe có vẻ giống như một lời giải thích có thể?
Bạn xác định thời gian như thế nào? Hệ điều hành là gì. Trình biên dịch gì. Tùy chọn trình biên dịch nào. Tôi hơi ngạc nhiên khi bạn thấy rất nhiều cải tiến sau 2 chủ đề vì bạn chỉ có hai lõi vật lý và HT thường không hiệu quả như vậy. –
Nhìn vào mã nó xuất hiện bạn đang sử dụng 'omp_get_wtime()'. Tốt lắm. –
@ Zboson: Tệ của tôi, tôi đã gõ 2 lõi và HT-2 trong sự nhầm lẫn. Nó là 2 bộ vi xử lý và 2 lõi. Đã cập nhật câu hỏi đó ngay bây giờ. Hệ điều hành cũng là: Ubuntu 14.04. Trình biên dịch là g ++ với tùy chọn -fopenmp –