2012-08-15 36 views
8

Tôi có máy chủ 4 lõi và tôi muốn chạy lại máy chủ. Để sử dụng đầy đủ các khả năng của 4 lõi, nó dự kiến ​​sẽ khởi động 4 trường hợp redis, vì redis được thiết kế để được đơn luồng.Làm cách nào để đảm bảo nhiều phiên bản redis chạy trên các lõi khác nhau?

Tuy nhiên, tôi tò mò làm thế nào để đảm bảo rằng 4 trường hợp đang chạy chính xác trên 4 lõi khác nhau? Làm thế nào một cá thể có thể quyết định lõi mà nó đang chạy khi nó được khởi chạy?

Trả lời

14

Bản thân Redis không cung cấp sự bảo đảm như vậy.

Nếu bạn khởi chạy 4 phiên bản, sẽ có 4 quy trình khác nhau mà hệ điều hành sẽ phải được lên lịch trên 4 lõi. Điều này phụ thuộc vào hệ điều hành để thực hiện cân bằng tải này, tối ưu hóa hiệu suất của hệ thống.

Bây giờ, nếu bạn thực sự muốn liên kết từng cá thể với một lõi cụ thể, hệ điều hành hiện đại thường cung cấp các công cụ để thực thi quá trình trên một lõi CPU cụ thể.

Ví dụ: trên Linux, bạn có thể xem các lệnh tasksetnumactl. Trong thực tế, bạn cần phải cẩn thận với điều này, bởi vì một khi bạn khởi chạy Redis trên một lõi cụ thể (thiết lập mặt nạ CPU), tất cả các luồng và các tiến trình con sẽ kế thừa từ mặt nạ CPU này. Vì vậy, khi Redis sẽ cố gắng kích hoạt một nền hoạt động lưu, hoặc một nền AOF viết lại, nó sẽ ảnh hưởng nghiêm trọng đến hiệu suất của trường hợp Redis. Điều này là do thực tế, chuỗi Redis chính sẽ chia sẻ lõi CPU với thao tác nền (thường là tiêu thụ CPU).

Nếu bạn thực sự muốn chơi với CPU ràng buộc (nhưng nó thực sự là một ý tưởng tốt?), Bạn cần phải ràng buộc N Redis trường hợp để lõi N + 1 CPU, giữ một lõi miễn phí cho các hoạt động nền, và chắc chắn nhiều nhất một thao tác nền có thể chạy cùng lúc với các trường hợp này.

+0

Một câu trả lời khác cho biết điều ngược lại: http://stackoverflow.com/a/36813957/1469954. Lời khuyên nào cần thực hiện? :) – SexyBeast

+0

Câu trả lời khác này thậm chí không liên quan đến việc ràng buộc CPU. Làm thế nào họ có thể thể hiện quan điểm ngược lại? –

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