Đ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 count
byte, bắt đầu từ địa chỉ bộ nhớ được trỏ *buf
đến để mô tả tệp fd
củ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ảnh và cá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.