Có bao nhiêu công tắc bối cảnh là một bộ phận bình thường (như một chức năng của lõi CPU (hoặc loại khác))?


34

Xin chào Linux / UNIX Overlords,

Có ai trong số các bạn có một quy tắc về việc có bao nhiêu chuyển đổi ngữ cảnh (trên mỗi lõi bộ xử lý) là Bình thường trên máy chủ Linux không?

Trường đại học của tôi ở đây đã mang nó lên, và anh ấy nhìn thấy 16K trên máy 8 lõi x86_64.

Dưới đây là một số thống kê từ sarface trong vài ngày qua ...

văn bản thay thế http://src.autonomy.net.au/imagebin/81895e338fae67d3d205c09db44a81e6-Picture_10.png

Và để xem các số liệu thống kê về quá trình tạo, đây là chế độ xem logarit của cùng một biểu đồ ...

văn bản thay thế http://src.autonomy.net.au/imagebin/7481f7e52bead4effc90248fc23c72fe-Picture_11.png

Và 8 nhân chán đến chết ...

văn bản thay thế http://src.autonomy.net.au/imagebin/0e94326652e977fd74edcd840f94200f-Picture_12.png

CS vs IOwait (tỷ lệ x10000)

văn bản thay thế http://src.autonomy.net.au/imagebin/a52a2a8a120394849c0da4045933e306-Picture_13.png

Thêm thông tin vô ích trong trường hợp bất cứ ai hỏi ..

  • Bộ nhớ mà máy chủ hoạt động trên là SAN 0,5TB thông qua FC
  • Có 8GB RAM, chủ yếu là bộ nhớ cache - không trao đổi.

1
Trong thời kỳ cụ thể nào?
dmckee

Bạn có thể cụ thể hơn về khối lượng công việc?
dmo

1
Làm thế nào bạn thực hiện biểu đồ đó? Trông thật tuyệt!
Antoine Benkemoun

Hi Antoine - Các biểu đồ được tạo từ sarface ( dự án.autonomy.net.au / sarface )
Xerxes

các liên kết đồ thị đã chết như bây giờ. @Xerxes bạn có thể đến đó từ đâu không?
törzsmókus

Câu trả lời:


25

Điều này phụ thuộc rất nhiều vào loại ứng dụng bạn chạy. Nếu bạn đã có các ứng dụng là các tòa nhà WRT rất kích hoạt, bạn có thể thấy sẽ có lượng chuyển đổi ngữ cảnh cao. Nếu hầu hết các ứng dụng của bạn không hoạt động và chỉ thức dậy khi có thứ gì đó xảy ra trên một ổ cắm, bạn có thể thấy tốc độ chuyển đổi ngữ cảnh thấp.

Các cuộc gọi hệ thống

Các cuộc gọi hệ thống gây ra chuyển đổi ngữ cảnh bởi bản chất rất riêng của chúng. Khi một tiến trình thực hiện một cuộc gọi hệ thống, về cơ bản, nó sẽ cho hạt nhân tiếp quản từ thời điểm hiện tại và bộ nhớ để thực hiện công việc mà quá trình không có đặc quyền thực hiện và quay lại vị trí tương tự khi hoàn thành.

Khi chúng ta xem xét định nghĩa của tòa nhà viết (2) từ Linux, điều này trở nên rất rõ ràng:

TÊN
       ghi - ghi vào một mô tả tập tin

TÓM TẮC
       #inc loại 

       viết ssize_t (int fd, const void * buf, size_t đếm);

SỰ MIÊU TẢ
       write () write up để đếm byte từ bộ đệm trỏ buf vào tệp
       được gọi bởi fd mô tả tập tin. [..]

GIÁ TRỊ TRẢ LẠI
       Khi thành công, số byte được ghi được trả về (không cho biết
       không có gì được viết). Khi có lỗi, -1 được trả về và errno được đặt
       thích hợp.
       [..]

Điều này về cơ bản cho hạt nhân tiếp quản hoạt động từ quy trình, chuyển lên countbyte, bắt đầu từ địa chỉ bộ nhớ được trỏ *bufđến để mô tả tệp fdcủa quy trình hiện tại và sau đó quay lại quy trình và cho anh ta biết nó đã đi như thế nào.

Một ví dụ điển hình cho thấy đây là máy chủ trò chơi dành riêng cho các trò chơi dựa trên Valve Source, hlds . http://nopaste.narf.at/f1b22dbc9 cho thấy một tòa nhà có giá trị thứ hai được thực hiện bởi một phiên bản duy nhất của một máy chủ trò chơi không có người chơi trên đó. Quá trình này mất khoảng 3% thời gian CPU trên Xeon X3220 (2.4Ghz), chỉ để mang lại cho bạn cảm giác về việc nó đắt như thế nào.

Đa tác vụ

Một nguồn chuyển đổi ngữ cảnh khác có thể là các quy trình không tạo ra các tòa nhà, nhưng cần phải loại bỏ một CPU nhất định để nhường chỗ cho các quy trình khác.

Một cách hay để hình dung điều này là cpuburn . cpuburn không tự làm bất kỳ tòa nhà nào, nó chỉ lặp đi lặp lại trên bộ nhớ của chính nó, vì vậy nó không gây ra bất kỳ chuyển đổi ngữ cảnh nào.

Lấy một máy nhàn rỗi, khởi động vmstat và sau đó chạy burnMMX (hoặc bất kỳ thử nghiệm khác từ gói cpuburn) cho mọi lõi CPU mà hệ thống có. Bạn nên sử dụng toàn bộ hệ thống trước đó nhưng hầu như không tăng chuyển đổi ngữ cảnh. Sau đó cố gắng bắt đầu một vài quá trình. Bạn sẽ thấy tốc độ chuyển đổi ngữ cảnh tăng lên khi các tiến trình bắt đầu cạnh tranh trên các lõi CPU. Lượng chuyển đổi phụ thuộc vào tỷ lệ quy trình / lõi và độ phân giải đa nhiệm của hạt nhân của bạn.

đọc thêm

linfo.org có một bài viết hay về các chuyển đổi ngữ cảnhcác cuộc gọi hệ thống . Wikipedia có thông tin chung và bộ sưu tập liên kết đẹp về các cuộc gọi hệ thống.


1
Điều này rất hữu ích - bạn đã cho tôi một ý tưởng tuyệt vời! =)
Xerxes

1
Tuyên bố của bạn System calls cause context switches by their very own naturecó vẻ sai. Cuộc
Nicolas Labrot

6

máy chủ web được tải vừa phải của tôi nằm ở khoảng 100-150 chuyển một phần lớn thời gian thứ hai với đỉnh điểm thành hàng ngàn.

Tỷ lệ chuyển đổi ngữ cảnh cao không phải là một vấn đề, nhưng chúng có thể chỉ ra một vấn đề quan trọng hơn.

chỉnh sửa: Chuyển mạch ngữ cảnh là một triệu chứng, không phải là một nguyên nhân. Bạn đang cố gắng chạy gì trên máy chủ? Nếu bạn có máy đa bộ xử lý, bạn có thể muốn thử thiết lập mối quan hệ cpu cho các quy trình máy chủ chính của mình.

Ngoài ra, nếu bạn đang chạy X, hãy thử thả xuống chế độ bảng điều khiển.

chỉnh sửa lại: ở mức 16k cs mỗi giây, mỗi cpu trung bình hai công tắc mỗi mili giây - tức là một nửa đến một phần sáu thời gian bình thường. Anh ta có thể đang chạy rất nhiều chủ đề ràng buộc IO?

chỉnh sửa lại bài viết đồ thị: Chắc chắn trông IO bị ràng buộc. hệ thống có dành phần lớn thời gian của nó trong SYS khi công tắc ngữ cảnh cao không?

chỉnh sửa một lần nữa: iowait cao và hệ thống trong biểu đồ cuối cùng đó - làm lu mờ hoàn toàn không gian người dùng. Bạn có vấn đề IO.
Bạn đang sử dụng thẻ FC nào?

chỉnh sửa: hmmm. bất kỳ cơ hội nào để có được một số điểm chuẩn tiếp cận với quyền truy cập SAN của bạn với bonnie ++ hoặc dbench trong thời gian chết? Tôi sẽ quan tâm xem họ có kết quả tương tự không.

chỉnh sửa: Đã suy nghĩ về điều này vào cuối tuần và tôi đã thấy những cú đánh sử dụng tương tự khi bonnie đang thực hiện "ghi một byte tại một thời điểm". Điều đó có thể giải thích số lượng lớn chuyển đổi đang diễn ra, vì mỗi lần viết sẽ yêu cầu một tòa nhà riêng biệt.


Tôi vẫn không tin rằng tỷ lệ chuyển đổi ngữ cảnh cao không phải là vấn đề, tôi đang nói về mức cao như trong 4K đến 16K, không phải 100-150.
Xerxes

Không có máy chủ nào của chúng tôi chạy bất kỳ X. Tôi đồng ý với bạn về vấn đề chờ đợi IO và mối quan hệ giữa đó và CS. Thẻ HBA không phải là một nghi phạm mặc dù chúng tôi sử dụng cùng một thẻ trên hàng trăm máy chủ khác ... Kết luận là tôi đổ lỗi cho các đội SAN điên rồ eva SAN mà họ cố gắng và bảo vệ mọi lúc. Lưu ý rằng chờ đợi IO cao không phải lúc nào cũng đáng báo động, nếu hầu hết các quy trình trên máy bị ràng buộc IO, thì máy chủ sẽ không có gì tốt hơn để thực hiện các thao tác quay vòng nhàn rỗi đó.
Xerxes

Mặc dù về thứ hai - biểu đồ thứ 4 kèm theo cho thấy nó không thực sự gần gũi như tôi lúc đầu. Không chính xác là nhật thực bằng bất kỳ phương tiện. Tôi vẫn đổ lỗi cho SAN mặc dù. =)
Xerxes

1

Tôi thiên về mối quan tâm về tỷ lệ chiếm dụng CPU của trạng thái hệ thống. Nếu nó gần 10% hoặc cao hơn, điều đó có nghĩa là hệ điều hành của bạn đang dành quá nhiều thời gian để thực hiện các chuyển đổi ngữ cảnh. Mặc dù việc di chuyển một số quy trình sang một máy khác chậm hơn rất nhiều , nhưng nó xứng đáng để làm điều đó.


1

Những thứ như thế này là lý do tại sao bạn nên thử và giữ đường cơ sở hiệu suất cho máy chủ của mình. Bằng cách đó, bạn có thể so sánh những điều bạn nhận thấy bất ngờ với những điều bạn đã ghi lại trong quá khứ.

Điều đó nói rằng, tôi có các máy chủ đang chạy (chủ yếu là các máy chủ Oracle không bận rộn), ổn định khoảng 2k với một số đỉnh 4k. Đối với máy chủ của tôi, điều đó là bình thường, đối với các máy chủ của người khác có thể quá thấp hoặc quá cao.

Bạn có thể quay lại dữ liệu bao xa?

Những loại thông tin CPU bạn có thể cung cấp cho chúng tôi?


Tôi chắc chắn đồng ý với việc giữ đường cơ sở và chúng tôi có dữ liệu nagios quay trở lại trong thời gian dài - vấn đề với máy chủ này là đó là dòng máu mới - chỉ xuất hiện trong một thời gian ngắn. Ngoài ra, đó là phần mềm doanh nghiệp (đọc: crap) đang chạy - Teamsite - chỉ để thêm vào danh sách biến không xác định. Tôi vẫn thích sar (sở thích cá nhân) vì vậy tôi sẽ định cấu hình nó để giữ nhiều hơn mặc định (2 tuần) và xem nó hoạt động như thế nào.
Xerxes

Sử dụng sar kết hợp với rrdtool (có vẻ như biểu đồ của bạn đến từ) có thể là một phương tiện dễ dàng để giữ dữ liệu của bạn (hoặc ít nhất là tóm tắt về nó) trong một thời gian dài.
wzzrd

0

Không có quy tắc của ngón tay cái. Một chuyển đổi ngữ cảnh chỉ là CPU chuyển từ xử lý một luồng sang một luồng khác. Nếu bạn chạy nhiều quy trình (hoặc một vài quy trình có luồng cao), bạn sẽ thấy nhiều công tắc hơn. May mắn thay, bạn không cần phải lo lắng về việc có bao nhiêu chuyển đổi ngữ cảnh - chi phí là nhỏ và ít nhiều không thể tránh khỏi.


6
Trên thực tế, chi phí của một chuyển đổi bối cảnh là đắt tiền . Điều này thậm chí còn tồi tệ nhất trên các máy ảo - chúng tôi đã thực hiện một số thử nghiệm vài tháng trước cho thấy rằng một trong những nguyên nhân lớn nhất của hiệu suất VM là do chuyển đổi ngữ cảnh.
Xerxes

Trong thực tế, trong bất kỳ hệ điều hành hiện đại (đa tác vụ) nào, việc giảm thiểu chuyển đổi ngữ cảnh là một nhiệm vụ tối ưu hóa rất đáng kể. Bạn có nguồn nào để sao lưu yêu cầu của mình rằng chi phí là nhỏ không?
Xerxes

Xin lỗi, bạn đang nói về việc giảm thiểu chuyển đổi ngữ cảnh từ quan điểm phát triển hệ điều hành? Không liên quan gì đến sự phát triển như vậy Tôi không có ý kiến ​​gì về lợi ích của việc thiết kế một hệ thống để giảm thiểu CS :) Nếu bạn đang nói về việc giảm thiểu chuyển đổi ngữ cảnh trên máy chủ, thì vấn đề là giảm thiểu chuyển đổi ngữ cảnh ở những nơi khác. EG giảm số lượng quy trình trên một máy có nghĩa là bạn phải di chuyển các quy trình này sang máy khác, điều đó có nghĩa là giao tiếp xảy ra qua mạng, chậm hơn nhiều !
Alex J

Tôi tin rằng định nghĩa của bạn về chuyển đổi bối cảnh là thiếu sót; chúng cũng xảy ra khi một cuộc gọi hệ thống được thực hiện, ngay cả khi nó trở về cùng một luồng. Các ứng dụng tối ưu hóa chống lại điều này bằng cách thực hiện các thủ thuật khác nhau. Ví dụ, Apache cần có thời gian hệ thống rất thường xuyên; với mục đích đó, một luồng gọi liên tục giờ địa phương và lưu kết quả vào bộ nhớ dùng chung. Các luồng khác chỉ phải đọc từ RAM và không phát sinh chuyển đổi quy trình khi làm như vậy.
niXar
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.