SSD ngày càng phổ biến không chỉ do ưu thế vượt trội về tốc độ truy xuất dữ liệu, khả năng chống sốc tốt mà giá bán cũng giảm đáng kể trong thời gian gần đây. Tuy nhiên bên cạnh những ưu điểm, SSD vẫn có một số hạn chế do một số đặc tính của flash NAND. Vì vậy, việc hiểu rõ hơn về chúng sẽ giúp bạn tối ưu tốc độ và độ bền trong quá trình sử dụng.
Cấu trúc flash NAND
Như mình từng chia sẻ thì hiện có ba công nghệ flash NAND đang sử dụng phổ biến trong SSD là SLC (single-level cell), MLC (multi-level cell) và TLC (triple-level cell). Sự khác nhau giữa các công nghệ này là mật độ bit dữ liệu chứa trong chip nhớ, độ trễ và độ bền dựa theo chu kỳ ghi xóa (P/E cycle). Và điều này ảnh hưởng trực tiếp đến hiệu năng tổng thể của SSD.
Cấu trúc flash NAND được chia theo mô hình lưới, cơ bản là cell (ô nhớ), page (trang) và block (khối). Nhiều cell hợp thành một page, kích thước thường từ 2 - 16KB. Tương tự nhiều page sẽ tạo thành một block, gồm 128 đến 256 page với kích thước từ 256KB - 4MB. Trong xu hướng hiện nay, nhiều nhà sản xuất thường chọn cách mở rộng kích thước page và block để tăng tốc độ ghi của SSD.
Cấu trúc flash NAND
Như mình từng chia sẻ thì hiện có ba công nghệ flash NAND đang sử dụng phổ biến trong SSD là SLC (single-level cell), MLC (multi-level cell) và TLC (triple-level cell). Sự khác nhau giữa các công nghệ này là mật độ bit dữ liệu chứa trong chip nhớ, độ trễ và độ bền dựa theo chu kỳ ghi xóa (P/E cycle). Và điều này ảnh hưởng trực tiếp đến hiệu năng tổng thể của SSD.
Cấu trúc flash NAND được chia theo mô hình lưới, cơ bản là cell (ô nhớ), page (trang) và block (khối). Nhiều cell hợp thành một page, kích thước thường từ 2 - 16KB. Tương tự nhiều page sẽ tạo thành một block, gồm 128 đến 256 page với kích thước từ 256KB - 4MB. Trong xu hướng hiện nay, nhiều nhà sản xuất thường chọn cách mở rộng kích thước page và block để tăng tốc độ ghi của SSD.
Một trong những hạn chế của SSD là tốc độ đọc và ghi trên cell trống rất nhanh nhưng lại giảm đáng kể trong các lần ghi dữ liệu tiếp theo. Nguyên nhân nằm ở cơ chế hoạt động của SSD và cấu trúc flash NAND. Khác với ổ cứng truyền thống, SSD chỉ có thể đọc, ghi dữ liệu theo page nhưng khi xóa dữ liệu phải theo từng block. Thêm một vấn đề nữa của flash NAND là không cho phép ghi đè dữ liệu trực tiếp lên cell cũ mà phải qua bước xóa dữ liệu trước tiên.
Tham khảo thêm cấu trúc và cơ chế hoạt động của flash NAND trong bài Tìm hiểu SSD - Flash NAND và Controller quyết định hiệu năng.
Garbage collection
Khi nhận được lệnh xóa dữ liệu, controller đơn giản chỉ đánh dấu các page đó chứ không thực sự xóa chúng cho đến khi cần sử dụng lại. Vì vậy trong một block có thể tồn tại các page đang chứa dữ liệu lẫn một số page ở trạng thái chờ xóa.
Trường hợp các cell trống đã dùng gần hết thì SSD sẽ quét toàn bộ block để tìm các cell được đánh dấu xóa. Controller sẽ chép dữ liệu sang một block mới và xóa toàn bộ block cũ, sẵn sàng cho một chu kỳ sử dụng mới. Quá trình này được gọi là garbage collection (tạm dịch thu gom rác) và nó sẽ tự động chạy ngầm bên dưới vào những lúc rảnh rỗi để tránh ảnh hưởng đến hiệu năng SSD.
Hình minh họa trên giúp bạn hiểu rõ hơn về garbage collection. Cụ thể hình 1 cho thấy dữ liệu được ghi vào 4 page đầu tiên của block X là a, b, c và d. Sau đó thêm 4 page mới được ghi vào là e, f, g và h đồng thời dữ liệu 4 page đầu tiên có thay đổi nên được ghi mới ở các page tiếp theo a’, b’, c’ và d’. Tất nhiên các page cũ sẽ không dùng nữa nên được đánh dấu “invalid” và không thể sử dụng cho đến khi toàn bộ block X được tẩy xóa.
Trong hình 3, dữ liệu hiện hành sẽ được chép sang block Y và xóa toàn bộ dữ liệu trên block cũ. Bước cuối cùng được gọi là garbage collection và giúp SSD có thể thực thi lập tức tác vụ ghi trong lần dùng tới mà không phải chờ đợi bước xóa dữ liệu trước đó.
Quảng cáo
TRIM
Trước khi tìm hiểu lệnh TRIM có tác dụng như thế nào, chúng ta hãy cùng xem lại cách thức HDD truyền thống xóa dữ liệu. Khi nhận lệnh xóa, hệ điều hành chỉ đơn giản là thay đổi thông tin chỉ mục của tập tin hoặc thư mục chứ không thực sự xóa chúng cho đến khi bạn ghi đè dữ liệu mới. Chính nhờ đặc điểm này mà các công cụ phục hồi tập tin có thể đọc lại được dữ liệu trong trường hợp bạn xóa nhầm.
Với SSD, khi bạn xóa một tập tin hoặc thư mục thông qua TRIM thì dữ liệu trong các page tương ứng cũng được đánh dấu “invalid”. Controller sẽ sao chép toàn bộ nội dung các page trong cùng một block vào bộ nhớ đệm (cache) và loại bỏ các dữ liệu cần xóa dựa theo thông tin TRIM cung cấp. Phần nội dung còn lại sẽ được chép trả loại block sau khi đã loại bỏ các page cần thiết. Điều này sẽ làm giảm số lần ghi dữ liệu lên các ô nhớ, tốc độ ghi nhanh hơn và tăng tuổi thọ SSD.
Lưu ý kể từ Windows 7 trở về sau, hệ điều hành sẽ tự động kích hoạt tính năng TRIM. Bạn có thể kiểm tra điều này bằng cách gõ lệnh cmd trong Start Menu và khởi chạy Command Prompt với quyền Admin. Trong cửa sổ mới xuất hiện, nhập lệnh fsutil behavior query DisableDeleteNotify và nếu kết quả trả về là DisableDeleteNotify – 0, nghĩa là TRIM đang hoạt động. Nếu không, bạn có thể kích hoạt bằng lệnh fsutil behavior set disabledeletenotify 0.
Write Amplification
Quảng cáo
Khái niệm Write Amplification để chỉ sự chênh lệch giữa lượng dữ liệu ghi trên các page bộ nhớ vật lý so với dữ liệu cần ghi thực sự. Và trong một số trường hợp, SSD có thể dùng đến 4MB dung lượng NAND flash để lưu trữ một tập tin văn bản 4KB. Điều này xảy ra do cơ chế hoạt động đặc biệt, SSD chỉ có thể ghi dữ liệu theo page nhưng xóa dữ liệu phải theo từng block.
Để dễ hình dung, hãy nhìn vào ví dụ sau. Khi bạn thay đổi một tập tin văn bản nhiều lần thì vị trí các block chứa dữ liệu sẽ được cập nhật và ghi nội dung mới. Tùy thuộc kích thước và số page còn trống trong mỗi block mà dung lượng cuối cùng của một file gốc 4KB sau khi cập nhật có thể tăng đến 4MB.
May mắn là quá trình gagbage collection và lệnh TRIM sẽ giúp giảm thiểu ảnh hưởng của hiện tượng write amplification, giữ các block không bị phân mảnh, tăng tốc độ truy xuất dữ liệu và giảm thiểu lãng phí dung lượng lưu trữ của SSD.
Wear leveling
Wear leveling là một thuật toán đặc biệt giúp tăng tuổi thọ và độ ổn định của SSD bằng cách phân bổ việc ghi dữ liệu lên toàn bộ transistor của NAND flash một cách đồng đều. Điều này đảm bảo mức độ hao mòn của tất cả là như nhau, sẽ tránh một số page bị ghi quá nhiều lần
Như vậy về mặt lý thuyết, SSD có dung lượng càng lớn thì có tuổi thọ càng cao vì tất cả transistor đều bị ghi qua một lượt trước khi bắt đầu một chu kỳ ghi xóa mới.
Mặc dầu wear leveling mang đến lợi ích trong quá trình sử dụng nhưng đồng thời làm tăng hiện tượng write amplification. Để phân bổ việc ghi ra đều khắp các page của SSD, thỉnh thoảng wear leveling cần phải ghi và xóa một số block nào đó mặc dầu nội dung lưu trữ không thay đổi.