Vấn Đề Liên Quan Đến Phần Mềm Diệt Virus Làm Chậm Quá Trình Cài Đặt Tệp Tải Về Qua Trình Tải Torrent - nói dối e blog

Vấn Đề Liên Quan Đến Phần Mềm Diệt Virus Làm Chậm Quá Trình Cài Đặt Tệp Tải Về Qua Trình Tải Torrent

Phiên bản cài đặt game Cuồng Kiếm do chúng tôi phân phối được đóng gói bằng công cụ NSIS thành một tệp tin thi hành đơn (exe) khoảng 1GB. Ban đầu, chúng tôi sử dụng dịch vụ đám mây của Upai và Qiniu để phân phối client, tốc độ tải về ổn định nhưng chi phí vận hành khá cao. Xuất phát từ nhu cầu tối ưu hóa chi phí, chúng tôi quyết định phát triển riêng một trình tải torrent - phương thức phổ biến trong việc phân phối client game MMORPG.

Cách đây hơn một tháng, bạn Rainfield đã chủ động nhận nhiệm vụ nghiên cứu giải pháp này. Sau khi khảo sát nhiều thư viện mã nguồn mở hỗ trợ giao thức BitTorrent, nhóm đã chọn libtorrent làm nền tảng phát triển trình tải.

Trong quá trình thử nghiệm gần đây, chúng tôi gặp phải một hiện tượng bất thường: dù quá trình tải về hoàn tất thành công, khi người dùng lần đầu tiên chạy tệp tin exe (thông qua ShellExecute), các phần mềm diệt virus như Kaspersky hay 360 Total Security lại làm chậm đáng kể quá trình này (có thể kéo dài vài phút). Quan sát qua Task Manager, chúng tôi nhận thấy nguyên nhân trực tiếp đến từ việc phần mềm diệt virus đang quét toàn bộ tệp tin vừa tải về.

Ban đầu, nhóm nghi ngờ tệp tin bị khóa do lỗi nào đó. Thử nghiệm thoát hoàn toàn trình tải và khởi động lại tiến trình gọi tệp tin exe vẫn không mang lại hiệu quả. Tuy nhiên, khi sao chép tệp tin tải về rồi chạy bản sao này, hiện tượng treo không tái diễn.

Lúc này, một số ý kiến từ cộng đồng kỹ thuật gợi ý khả năng liên quan đến tính năng Alternative Data Streams (ADS) của Windows. Chúng tôi tra cứu và tìm thấy bài viết hướng dẫn gỡ bỏ ADS bằng cách sao chép tệp tin. Tuy nhiên, khi kiểm tra bằng công cụ chuyên dụng, ADS không để lại bất kỳ dấu vết nào trong tệp tin bị lỗi.

Sau cùng, khi rà soát kỹ các thông số cấu hình của libtorrent, chúng tôi mới phát hiện nguyên nhân gốc rễ: Thư viện này mặc định tạo tệp tin tải về dưới dạng tệp tin thưa (sparse file). Theo giải thích từ Wikipedia, việc nạp các tệp tin thi hành Windows (exe/dll) dưới định dạng sparse sẽ tốn thời gian đáng kể vì hệ thống không thể thực hiện bộ nhớ đệm (memory mapped caching) như thông thường.

Tuy nhiên, việc quét virus kéo dài đến vài phút cho một tệp tin ~1GB là điều bất thường. Chúng tôi phỏng đoán nguyên nhân sâu xa nằm ở cách NSIS đóng gói: Công cụ này chỉ nén nhiều tệp tin thành một kho chứa chứ không nén toàn bộ như các định dạng nén khác. Điều này khiến phần mềm diệt virus cố gắng giải nén và quét từng tệp tin bên trong. Nếu cơ chế giải nén của phần mềm diệt virus không tối ưu với tệp tin thưa (gặp phải các thao tác đọc ngẫu nhiên kém hiệu quả), thời gian quét sẽ vượt xa thời gian sao chép tệp tin (quá trình này tự động chuyển đổi tệp tin thưa sang định dạng thông thường).

Giải pháp khắc phục

Hiện chúng tôi đã cập nhật cấu hình của libtorrent để vô hiệu hóa chế độ tạo sparse file, đồng thời bổ sung tùy chọn tùy biến cho phép người dùng lựa chọn định dạng tệp tin tải về. Ngoài ra, nhóm cũng đang cân nhắc tích hợp thuật toán kiểm tra định dạng tệp tin tương thích với các phần mềm diệt virus phổ biến, nhằm mang lại trải nghiệm mượt mà hơn cho người chơi.

0%