Code game không đổi, nhưng server chậm đi kể từ khi cập nhật OS, kernel, driver hoặc firmware. Bản cập nhật có thể làm thay đổi giá trị mặc định, bộ lập lịch, các biện pháp giảm thiểu lỗ hổng CPU (mitigations) và cách driver hoạt động.
Vì sao Bản vá bảo mật định kỳ hoặc image server mới làm thay đổi kernel, driver hoặc firmware → Dẫn đến Giá trị mặc định hoặc bộ lập lịch thay đổi, hoặc biện pháp giảm thiểu lỗ hổng mới được bật, khiến cùng một việc tốn nhiều thời gian CPU hơn và thứ tự thread được cấp CPU thay đổi → Trên màn hình Server đang chạy tốt bỗng luôn chậm hơn một chút kể từ ngày cập nhật, gây trễ thao tác; lúc đông người thì giật khựng và quay chậm
Áp dụng bản cập nhật cho một số server trước, so sánh thời gian tick, độ trễ và mức sử dụng CPU với phiên bản cũ rồi mới mở rộng; triển khai khác ngày với bản cập nhật game; ghi lại phiên bản kernel, driver, firmware và các giá trị sysctl chính trước và sau khi cập nhật; khi có vấn đề, boot bằng kernel cũ để xác nhận; chỉ quyết định tắt giảm thiểu (mitigations=off) sau khi cân nhắc rủi ro bảo mật.
Con số tham khảo
Đổi phiên bản kernel là đổi cả hành vi mặc định. Ví dụ, Linux bắt đầu chuyển bộ lập lịch từ CFS sang EEVDF từ bản 6.6, và giá trị mặc định của giới hạn hàng đợi kết nối (somaxconn) đổi từ 128 lên 4.096 từ bản 5.4. Biện pháp giảm thiểu lỗ hổng CPU thêm việc cho CPU, như xóa bộ đệm nội bộ của CPU khi quay từ kernel về chương trình (mỗi lần kết thúc system call), khi context switch và khi chuyển sang máy ảo, nên server mạng nào gọi system call cho từng gói tin thì càng bị ảnh hưởng nhiều. Một số lỗ hổng muốn chặn hoàn toàn phải tắt SMT (tính năng cho một core chạy như hai thread), và tắt SMT có thể làm hiệu năng giảm mạnh tùy khối lượng công việc. Tham số kernel mitigations=off tắt hết các biện pháp này để lấy lại hiệu năng, nhưng khiến hệ thống bị lộ trước các lỗ hổng.
Trên đồ thị
Tăng như bậc thang từ một thời điểm · Thời gian tick của server, mức sử dụng CPU, độ trễ ở cùng mức tải
Chỗ cần xem
Lịch sử cập nhật trong trình quản lý gói và thời điểm reboot, phiên bản kernel xem bằng uname -r, thông tin driver NIC xem bằng ethtool -i, đối chiếu với thời điểm độ trễ tăng. So sánh server đã cập nhật và chưa cập nhật ở cùng mức tải bằng mpstat, pidstat, và so sánh cả trạng thái giảm thiểu trong /sys/devices/system/cpu/vulnerabilities/
Đúng nếu
độ trễ và mức sử dụng CPU tăng một bậc từ lúc reboot sau cập nhật rồi giữ nguyên, và ở cùng mức tải chỉ server đã cập nhật là cao. Boot bằng kernel hoặc driver cũ thì trở lại như trước
Loại trừ nếu
server đã cập nhật và chưa cập nhật chậm như nhau ở cùng mức tải. Nếu cùng ngày có triển khai bản cập nhật game và số lượng hoặc kích thước gói tin mỗi người chơi thay đổi → “Bản cập nhật làm thay đổi mô hình lưu lượng”
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)
Tìm hiểu thêm
Trạng thái giảm thiểu được xem trong các file dưới /sys/devices/system/cpu/vulnerabilities/. Giá trị mặc định (mitigations=auto) giảm thiểu mà vẫn bật SMT, còn nếu đặt auto,nosmt thì SMT bị tắt trên CPU có lỗ hổng, nên sau khi nâng kernel, số core logic có thể giảm một nửa. Cập nhật OS cùng ngày với bản cập nhật game sẽ khó xác định nguyên nhân, nên hãy triển khai riêng.
Nguồn
The kernel’s command-line parametersLinux kernel mitigations=: off tắt mọi biện pháp giảm thiểu lỗ hổng CPU để tăng hiệu năng nhưng khiến hệ thống bị lộ trước lỗ hổng; mặc định auto giảm thiểu mà vẫn bật SMT; auto,nosmt tắt SMT khi cần
MDS - Microarchitectural Data SamplingLinux kernel Biện pháp giảm thiểu xóa bộ đệm CPU khi quay từ kernel về user space và khi vào máy ảo; xem trạng thái lỗ hổng và giảm thiểu qua các file dưới /sys/devices/system/cpu/vulnerabilities/; nhiều CPU phải tắt SMT mới chặn hoàn toàn được, và tắt SMT có thể ảnh hưởng lớn đến hiệu năng tùy khối lượng công việc
Spectre Side ChannelsLinux kernel Để giảm thiểu, bộ đệm dự đoán rẽ nhánh bị xóa khi context switch và khi chuyển sang máy ảo; biện pháp giảm thiểu mạnh hơn thêm overhead cho mọi chương trình
EEVDF SchedulerLinux kernel Linux bắt đầu chuyển từ bộ lập lịch CFS sang EEVDF từ bản 6.6