Người dùng phàn nàn về hiệu suất mạng rất chậm khi mở hoặc lưu file vào thư mục chia sẻ mạng trong Windows. Khi mở thư mục chia sẻ qua đường dẫn UNC hoặc qua ký tự ổ đĩa (nếu thư mục được ánh xạ làm ổ đĩa mạng), nội dung chỉ hiển thị sau 10-60 giây. Khi tạo file mới trong thư mục mạng, chúng cũng không xuất hiện ngay mà bị trễ 3-4 phút (ngay cả khi làm mới bằng phím F5). Tuy nhiên, nếu chỉ định thủ công tên file đầy đủ qua đường dẫn UNC (ví dụ: \\lon-file-srv1\public\new_file.docx), file sẽ mở được, dù không hiển thị trong File Explorer.
Nguyên nhân: Cơ chế bộ nhớ đệm SMB
Windows sử dụng thành phần Network Redirector khi truy cập file chia sẻ và tài nguyên mạng trên máy tính từ xa. Kể từ SMB v2.x (xem bảng các phiên bản giao thức Server Message Block), Network Redirector sử dụng cơ chế bộ nhớ đệm khi truy cập thư mục và file chia sẻ qua mạng. Điều này giảm lưu lượng và số lượng yêu cầu SMB giữa client và server (đặc biệt hiệu quả trên mạng chậm và không ổn định). Mặc định, bộ nhớ đệm này được xóa mỗi 10 giây.
Nếu bạn gặp truy cập chậm đến chia sẻ mạng trên thiết bị client Windows, có thể thử tắt bộ nhớ đệm siêu dữ liệu SMB ở phía client hoặc trong cài đặt thư mục chia sẻ.
Cách 1: Tắt bộ nhớ đệm SMB trong cài đặt thư mục chia sẻ
- Mở thuộc tính thư mục chia sẻ.
- Chuyển đến tab Sharing → Advanced Sharing → Caching.
- Chọn tùy chọn thứ hai: "No files or programs from the shared folder are available offline" (Không có file hoặc chương trình nào từ thư mục chia sẻ có sẵn để truy cập ngoại tuyến).
Hoặc sử dụng lệnh PowerShell:
Set-SMBShare -Name MySharedDocs -CachingMode None
Lệnh này sẽ tắt cả bộ nhớ đệm và truy cập ngoại tuyến cho thư mục chia sẻ này (xem bài viết về sử dụng file ngoại tuyến trong Windows).
Cách 2: Cấu hình registry trên client SMB
Có ba tham số registry quản lý cài đặt bộ nhớ đệm thư mục chia sẻ mạng phía client SMB. Microsoft khẳng định giá trị mặc định cung cấp hiệu suất tốt nhất cho hầu hết môi trường. Cài đặt bộ nhớ đệm SMB nằm tại khóa registry HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters:
- DirectoryCacheLifetime – thời gian sống bộ nhớ đệm siêu dữ liệu thư mục chia sẻ (mặc định 10 giây);
- FileNotFoundCacheLifetime – bộ nhớ đệm phản hồi "File not found" (5 giây);
- FileInfoCacheLifetime – thời gian giữ bộ nhớ đệm thông tin file (10 giây).
Tham khảo chi tiết tại: Tối ưu hóa cài đặt File Server Windows.
Mặc định, thời gian sống bộ nhớ đệm cho thư mục chia sẻ SMB chỉ 10 giây. Khi client làm mới nội dung thư mục chia sẻ, kết quả cập nhật cuối được lưu trong 10 giây. Khi truy cập chia sẻ mạng này, tất cả ứng dụng trước tiên thử sử dụng bộ nhớ đệm này.
Trong một số trường hợp, cơ chế bộ nhớ đệm dữ liệu trong thư mục SMB không hoạt động đúng (thường xảy ra với thư mục/ổ đĩa mạng chứa hàng nghìn file và thư mục). Lúc này người dùng gặp độ trễ đáng kể khi mở, xem và tạo file trong thư mục chia sẻ.
Tắt bộ nhớ đệm cho thư mục SMB qua Registry
Tạo tham số DWORD mới dưới khóa HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters:
- DirectoryCacheLifetime = 0
- FileInfoCacheLifetime = 0
- FileNotFoundCacheLifetime = 0
Có thể tạo bằng regedit.exe hoặc PowerShell:
$regpath = "HKLM:\System\CurrentControlSet\Services\LanmanWorkstation\Parameters"
$Name1 = "DirectoryCacheLifetime"
$Name2 = "FileInfoCacheLifetime"
$Name3 = "FileNotFoundCacheLifetime"
New-ItemProperty -Path $regpath -Name DirectoryCacheLifetime -Value 0 -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path $regpath -Name FileInfoCacheLifetime -Value 0 -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path $regpath -Name FileNotFoundCacheLifetime -Value 0 -PropertyType DWORD -Force | Out-Null
Lưu ý: Phải khởi động lại máy tính để thiết lập có hiệu lực. Nếu cần áp dụng cho nhiều máy trong domain, hãy dùng GPO triển khai cài đặt registry.
Cách 3: Sử dụng cmdlet Set-SmbClientConfiguration
Set-SmbClientConfiguration -DirectoryCacheLifetime 0
Set-SmbClientConfiguration -FileInfoCacheLifetime 0
Set-SmbClientConfiguration -FileNotFoundCacheLifetime 0
Kiểm tra cài đặt bộ nhớ đệm hiện tại
Liệt kê cài đặt bộ nhớ đệm hiện tại của client SMB Windows:
Get-SmbClientConfiguration | select *cache*
Kết quả mẫu:
DirectoryCacheEntriesMax : 16 DirectoryCacheEntrySizeMax : 65536 DirectoryCacheLifetime : 0 FileInfoCacheEntriesMax : 64 FileInfoCacheLifetime : 0 FileNotFoundCacheEntriesMax : 128 FileNotFoundCacheLifetime : 0
Sau khi áp dụng, tất cả thay đổi trong thư mục chia sẻ sẽ hiển thị ngay lập tức trên client (nội dung thư mục được làm mới mỗi lần truy cập và không sử dụng bộ nhớ đệm cục bộ).
Các nguyên nhân khác gây chậm hiệu suất thư mục chia sẻ
- Bật tùy chọn "Access-based Enumeration (ABE)" trong cài đặt thư mục chia sẻ có thể làm chậm cập nhật danh sách file trong thư mục có nhiều đối tượng;
- Có thể gặp tốc độ mạng chậm trên máy ảo Hyper-V chạy Windows Server 2019 (so với Windows Server 2016/2012R2);
- Thử tắt giao thức NetBIOS cũ trong thuộc tính kết nối TCP/IPv4 trên thiết bị tham gia domain (
ncpa.cpl→ mở cài đặt TCP/IPv4 của card mạng → chọn Disable NetBIOS over TCPIP trên tab WINS); - Thử đặt lại cài đặt mạng và TCP/IP stack trên thiết bị client Windows. Trên Windows 10+, dùng tùy chọn Network Reset trong Settings hoặc lệnh:
netsh int ip reset.