Tại sao máy chủ không luôn chạy tối đa?


12

Đây là một câu hỏi đã làm phiền tôi trong một thời gian và dường như tôi không thể tìm thấy bất cứ điều gì trực tuyến nói về nó. Tôi có một máy chủ chạy VMware Hypervisor ESXi. Khi tôi khởi động máy ảo trên đó, chúng thường mất 2-3 phút để khởi động; không phải là một thời gian dài khủng khiếp, nhưng không tức thời. Tuy nhiên, khi tôi nhìn vào nhật ký hiệu suất trên máy chủ, cả bộ xử lý, RAM hoặc mức sử dụng đĩa đều ở mức 100%; thông thường họ trung bình khoảng 60% -80% Vì vậy, nếu máy chủ có việc phải làm, tại sao nó không làm điều đó ở mức 100%?

Dường như với tôi rằng tại bất kỳ thời điểm nào, thành phần giới hạn hiệu suất sẽ chạy ở mức 100%. Ví dụ, nếu tôi có một ổ cứng thực sự chậm, thì nó hầu như luôn luôn chạy ở mức 100%. Do đó, ít nhất một trong các khu vực (bộ xử lý, RAM, đĩa và mạng) phải luôn ở mức 100%, trừ khi máy chủ ở trạng thái nghỉ hoàn toàn.

Tại sao không phải như vậy?


Các bản phân phối Linux cũ hơn, không dựa trên systemd, không thể song song hóa hiệu quả khởi động. Các * BSD vẫn phải chịu đựng điều này. Khởi động một bản phân phối Linux hiện đại và xem nó khác nhau như thế nào.
Michael Hampton

Câu trả lời:


18

Độ trễ sẽ là một lý do. Độ trễ giữa "đĩa cung cấp cho tôi dữ liệu này tôi cần trước khi tôi có thể làm bất cứ điều gì khác" và thời gian dữ liệu quay trở lại sẽ khiến CPU không hoạt động trong thời gian đó.

Tài nguyên có thể chạy ở mức 100%, nhưng trong khoảng thời gian rất ngắn. Khởi động hệ điều hành sẽ tuân theo mô hình chung là "xử lý hoặc quyết định một cái gì đó, lấy thứ gì đó từ đĩa, làm gì đó trong bộ nhớ, làm gì đó với thiết bị", lặp lại nhiều lần trong một giây. Vì vậy, khi bạn thấy một đĩa ở mức 25% trong khoảng thời gian 2 giây, điều đó có nghĩa là nó đã chạy ở mức 100% trong 0,5 giây rồi nhàn rỗi trong thời gian còn lại.

Như EEAA đã chỉ ra các hệ thống đa lõi làm cho điều này phức tạp hơn một chút. Một phần mềm luồng đơn trên CPU có thể thực thi bốn luồng chỉ có thể đạt 25% chạy ở tốc độ tối đa. Ngay cả phần mềm đa luồng cũng hiếm khi có thể đạt 100%, vì dữ liệu phải chảy (thường) từ ổ cứng, RAM, bộ nhớ cache, đến CPU. Giữ cho đường ống đầy đủ là khó khăn và có xu hướng xảy ra chủ yếu với khối lượng công việc có thể dự đoán được như mã hóa video. Trong trường hợp này, hệ điều hành có thể quan sát các mẫu đọc và truy xuất dữ liệu trước khi cần, đưa nó vào bộ đệm thích hợp, chẳng hạn như bộ đệm đĩa trong RAM.


16

Bạn đang nghĩ về điều này theo một cách rất đơn giản, điều này khiến bạn đưa ra một số giả định không chính xác, điều mà tôi sẽ thử và làm rõ.

Đầu tiên, và có khả năng đơn giản nhất, trên một hệ thống đa lõi, để hiểu được mức độ sử dụng CPU, bạn phải tính đến việc liệu quá trình tải có được đa luồng hay không, và được thiết kế để tận dụng nhiều lõi. Nếu đây không phải là trường hợp, tùy thuộc vào hỗn hợp các quy trình đang chạy, bạn có thể không bao giờ thấy việc sử dụng 100%. Không bao giờ.

Thứ hai, bạn cần xem xét hiệu suất thiết bị IO. Làm thế nào để hệ thống của bạn biết, ví dụ, có bao nhiêu IOps mà thiết bị của bạn có khả năng? Nó không. Một số liệu có ý nghĩa hơn để bạn xem là iowaitgiá trị của bạn trong khi khởi động (có thể khó lấy được trong quá trình khởi động) hoặc hàng đợi / độ trễ của đĩa trong quá trình khởi động (nên dễ dàng lấy được từ trình ảo hóa của bạn). Nếu bạn thấy hàng đợi hoặc độ trễ tăng đột biến, có khả năng các thiết bị IO của bạn là một yếu tố góp phần vào các vấn đề hiệu suất của bạn.


11

Tôi đã làm việc với máy chủ khoảng 20 năm nay, thường thì không phải là một điều tốt khi một thành phần luôn hoạt động 100%.

Chẳng hạn, giả sử bạn có một cơ sở dữ liệu SQL mà bạn không muốn trao đổi vào đĩa mà thay vào đó muốn hết bộ nhớ.

Nếu cơ sở dữ liệu của bạn là 24 GB và HĐH cần 8GB, bạn sẽ không chỉ muốn phân bổ 32 GB RAM cho máy, có rất nhiều "điều" có thể sai, mã xấu, DDOS, sử dụng ứng dụng nặng, ai biết, không có phòng đầu làm sao bạn biết máy chủ đang gặp sự cố?

Chúng tôi có khoảng 2000 máy chủ trong trung tâm dữ liệu của mình, chúng tôi muốn thấy tất cả chúng chạy với khoảng 75% CPU và RAM, không gian hhd nằm trên SAN của chúng tôi vì vậy đó là một quả bóng sáp hoàn toàn khác. Chúng tôi cũng có các cảnh báo để cho chúng tôi biết khi nào họ đạt 85% CPU hoặc RAM và báo động để cho chúng tôi biết khi nào họ đạt 90%.


Tôi nghĩ rằng bạn đã có một chút theo dõi ở đây. Tôi đã nói rằng tôi đang chạy các máy ảo, vì vậy có một tải phù hợp rất khác so với máy chủ cơ sở dữ liệu, nó chạy khi nhận được yêu cầu và phân bổ tài nguyên. Tôi đã quan tâm nhiều hơn về bất cứ yếu tố hiệu suất giới hạn nào, không phải là cách các tài nguyên đó được phân bổ. Nhưng cảm ơn vì câu trả lời!
Kernel Stearns
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.