Phân tích tác động hiệu suất của nguồn thời gian được chọn trong hệ thống

Brendan Gregg, một trong những nhà phát triển DTrace, hiện đang phát triển các công cụ phân tích hiệu suất dựa trên BPF trong nhân Linux, đã tóm tắt kinh nghiệm thu được từ việc phân tích các vấn đề về hiệu suất mà Netflix gặp phải khi di chuyển Cassandra DBMS từ CentOS sang Ubuntu. đám mây Amazon EC2 dựa trên Xen. Sau khi di chuyển, tải CPU tăng 30% và độ trễ trong quá trình ghi cũng tăng lên tương đương. Hóa ra, hiệu suất của các ứng dụng yêu cầu nhiều thông tin về thời gian phụ thuộc rất nhiều vào nguồn thời gian chính xác được chọn trong hệ thống.

Lúc đầu, lý do giảm hiệu suất là không rõ ràng và chẩn đoán bắt đầu bằng việc theo dõi tác động có thể có của việc chạy liên tục hoặc khởi chạy định kỳ các quy trình hệ thống sử dụng nhiều tài nguyên bằng cách sử dụng các tiện ích hàng đầu và thực thi. Nhưng mọi thứ đều chỉ ra rằng mức tiêu thụ tài nguyên đã tăng lên đặc biệt trong Cassandra DBMS, được viết bằng Java. So sánh số liệu lược tả của hai quy trình Cassandra chạy song song trên CentOS và Ubuntu, xử lý cùng một truy vấn, cho thấy rằng khoảng 32% tổng thời gian được dùng để gọi os::javaTimeMillis(), được sử dụng để lấy thông tin về thời gian hiện tại .

Sau đó, một thử nghiệm đã được tiến hành trong đó một ứng dụng Java đơn giản được viết có tên là phương thức System.currentTimeMillis() một trăm triệu lần trong một vòng lặp. Chạy ứng dụng cho thấy phải mất 13 giây để hoàn thành trên CentOS và khoảng 68 giây trên Ubuntu, tức là. chậm hơn 5 lần. Một chương trình tương tự được viết bằng C gọi hàm gettimeofday() hàng trăm triệu lần, nhưng khi thực thi, cũng thu được kết quả tương tự.

Vì rõ ràng nguồn gốc của vấn đề là chức năng trả về thời gian hiện tại, nên sự chú ý chuyển sang những thay đổi về chỉ báo khi chọn các nguồn thời gian chính xác khác nhau trong hệ thống. Đánh giá theo nội dung của “/sys/devices/system/clocksource/clocksource0/current_clocksource”, bộ hẹn giờ “xen” được sử dụng theo mặc định khi chạy Linux trong hệ thống khách. Sau khi thay đổi nguồn thời gian thành "tsc", thời gian thực thi của ứng dụng thử nghiệm trong Ubuntu đã giảm từ 68 xuống 3.3 giây, tức là. nó trở nên nhanh hơn 20 lần. Ngoài ra, một thử nghiệm hiệu suất của nguồn thời gian đồng hồ kvm đã được thực hiện, cho thấy độ trễ tăng 20% ​​so với TSC. $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $ time java TimeBench real 1m8.300s người dùng 0m38.337s sys 0m29.875s $ echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench real 0m3.370s người dùng 0m3.353s sys 0m0.026s

Để có được thời gian khi chọn nguồn TSC, lệnh bộ xử lý RDTSC được sử dụng, việc thực thi lệnh này không yêu cầu lệnh gọi hệ thống (lệnh không yêu cầu đặc quyền nâng cao và tạo ra giá trị từ bộ đếm thời gian được tích hợp trong CPU). Theo mặc định, TSC không được kích hoạt vì ngày xưa nguồn này không loại trừ sự trôi dần theo thời gian, điều này trong các bộ xử lý khác được điều chỉnh bằng phần mềm để đạt được số đọc chính xác hơn. Theo một kỹ sư chuyên phát triển bộ xử lý, lo ngại về sự thay đổi thời gian khi sử dụng TSC từ lâu đã là sai sự thật và trong các bộ xử lý hiện đại, nguồn này có thể tạo ra số đọc ổn định trong nhiều năm.

Việc chuyển đổi máy chủ sản xuất tại Netflix sang nguồn TSC giúp giảm 43% độ trễ ghi và đạt được kết quả khi sử dụng Ubuntu nhanh hơn 4 lần so với cấu hình chạy CentOS với nguồn thời gian “xen”. Kết quả của nghiên cứu đã được chuyển sang Amazon. Amazon đã chính thức khuyến nghị sử dụng nguồn thời gian TSC mặc định trong môi trường AWS EC2 dựa trên trình ảo hóa Xen (kvm-clock vẫn được khuyến nghị trong các môi trường dựa trên trình ảo hóa Nitro).

Nguồn: opennet.ru

Thêm một lời nhận xét