2015-12-31 15 views
10

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ố).

quả enter image description here

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ể?

+0

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. –

+0

Nhìn vào mã nó xuất hiện bạn đang sử dụng 'omp_get_wtime()'. Tốt lắm. –

+0

@ 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 –

Trả lời

3

Nhờ nhận xét của @miraculixx và @Zboson, điều này đã giúp tôi hiểu rằng vùng chứa không thực sự hoạt động tốt hơn máy chủ. Kết quả lạ (lô trong câu hỏi) đã được gây ra bởi vì các phiên bản trình biên dịch khác nhau đang được sử dụng trên máy chủ và container trong khi thực hiện thử nghiệm.Khi Trường hợp A & B đang chạy lại sau khi cập nhật lên phiên bản tương tự của trình biên dịch trong cả hai container và máy chủ, đây là kết quả:

Nếu không tối ưu hóa cờ

enter image description here

Với tối ưu hóa cờ -O3

enter image description here

Quan sát

Có thể quan sát thấy thùng chứa có hiệu suất tương tự hoặc kém hơn một chút so với máy chủ; có ý nghĩa trực quan. (Nếu không tối ưu hóa có một vài khác biệt)

P.S Xin lỗi vì tiêu đề câu hỏi gây hiểu lầm. Tôi đã không biết rằng sự khác biệt hiệu suất có thể là do các phiên bản trình biên dịch khác nhau cho đến khi các bình luận được đăng tải.

+1

Tôi nghĩ bài học quan trọng ở đây là chỉ thảo luận về hiệu suất với tối ưu hóa được bật. Lưu ý rằng mã được tối ưu hóa luồng đơn lẻ gần như nhanh như mã chưa được tối ưu hóa với bốn luồng! Và bốn chủ đề được tối ưu hóa nhanh hơn gần ba lần rồi bốn chuỗi chưa được tối ưu hóa! Tôi nghi ngờ rằng nếu bạn đã sử dụng tối ưu hóa cho cốt truyện ban đầu của bạn mà bạn đã không nhìn thấy một sự khác biệt bất ngờ kể từ khi máy chủ lưu trữ sử dụng một phiên bản mới hơn của GCC hơn container. Cuối cùng, tôi sẽ làm cho âm mưu của bạn bằng cách sử dụng ký hiệu khoa học vì nó gây phiền nhiễu để đếm tất cả những số không. –

Các vấn đề liên quan