Mỗi yêu cầu ghi dữ liệu xuống ổ đĩa “chắc chắn” mất từ 0,1 ms đến vài chục ms tùy ổ đĩa, và khi các yêu cầu dồn lại thì hàng đợi dài ra.
Vì sao Lưu định kỳ và đợt đăng xuất ồ ạt làm yêu cầu ghi chắc chắn dồn lại → Dẫn đến Hàng đợi ổ đĩa dài ra → Trên màn hình Cứ đến giờ lưu là lag, đăng xuất và chuyển kênh bị chậm
Phụ trách chính Phát triển server (Đội phát triển game) · Phối hợp Hạ tầng server (Đội hạ tầng), Hạ tầng DB (Đội hạ tầng)
Việc cần làm (Đội phát triển game)
Gom các lần lưu để ghi một lượt (nhiều lần lưu chung một lần fsync), rải thời điểm lưu.
Việc cần làm (Đội hạ tầng)
Thiết bị server·OS: SSD cho server có tính năng bảo vệ khi mất điện, giám sát độ dài hàng đợi ổ đĩa và độ trễ fsync. Thiết bị DB: nếu dữ liệu được lưu vào DB thì ổ đĩa chứa log của DB cũng dùng loại SSD đó, giám sát độ trễ commit.
Con số tham khảo
Thời gian mỗi lần tùy thiết bị, nhưng đại khái khoảng 0,1 ms với SSD cho server (có tính năng bảo vệ khi mất điện), từ 1 đến vài ms với SSD thông thường, 1–2 ms với ổ đĩa cloud, từ 10 ms trở lên với HDD. Nếu một thread chờ từng lần một thì HDD không làm nổi 100 lần trong 1 giây.
Trên đồ thị
Vọt lên theo chu kỳ · Độ dài hàng đợi ổ đĩa, độ trễ flush và ghi
Chỗ cần xem
Đặt f/s, f_await của iostat -x 1 (số lần flush ổ đĩa đã xử lý và thời gian mất), w/s, aqu-sz, w_await chồng lên thời điểm lưu định kỳ và đăng xuất. Bản sysstat cũ hiển thị aqu-sz là avgqu-sz. Với ổ đĩa cloud, xem VolumeQueueLength, VolumeAvgWriteLatency của EBS
Đúng nếu
cứ đến giờ lưu hoặc đợt đăng xuất ồ ạt thì số lần flush và độ dài hàng đợi cùng vọt lên, w_await và f_await tăng gấp mấy lần bình thường. Lúc đó việc lưu và chuyển kênh bị chậm
Loại trừ nếu
hàng đợi vọt lên vào lúc không liên quan tới lưu hay đăng xuất → sao lưu, nén (dk-backup) hoặc giới hạn IOPS (dk-iops). Số lần flush không đổi mà vẫn chậm đi → cạn burst credit (dk-burst)
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)
Nguồn
fsync(2) — Linux manual pageLinux man-pages fsync xả cả cache của ổ đĩa và chặn cho tới khi thiết bị báo hoàn tất
Reliability (PostgreSQL Documentation)PostgreSQL Ổ SATA thông thường và nhiều SSD có cache ghi bị mất khi mất điện, nên muốn lưu chắc chắn thì cần cache có pin hoặc có bảo vệ nguồn
Amazon EBS General Purpose SSD volumesAWS Độ trễ của ổ đĩa mặc định trên cloud (gp3) ở mức một chữ số ms, io2 Block Express trung bình dưới 500 µs với I/O 16 KiB
iostat(1) — Linux manual pagesysstat -x: f/s, f_await (số yêu cầu flush ổ đĩa đã xử lý và thời gian trung bình), w/s, w_await, aqu-sz (tên cũ là avgqu-sz)
Amazon CloudWatch metrics for Amazon EBSAWS VolumeQueueLength (số yêu cầu đang chờ hoàn tất), VolumeAvgWriteLatency (độ trễ ghi trung bình 1 phút, instance Nitro)