SSD : Mọi điều bạn muốn biết – Phần 5 ( phần cuối )

Những chức năng điều khiển – Garbage Collection

 

Tiếp theo sau Wear Leveling để bảo đảm không một khối dữ liệu NAND bị Ghi/Xóa liên tục quá nhiều là tới Garbage Collection.

Garbage Collection là một quá trình lấy lại những Khối đã được ghi trước kia để có thể Ghi lại dữ liệu mới . Nguyên nhân của việc cần Garbage Collection là yêu cầu của bộ nhớ NAND phải Xóa trước khi Ghi . Một Khối và đơn vị Xóa nhỏ nhất của bộ nhớ NAND Flash và thông thường khoảng 32 tới 64 Page .

Một Page của dữ liệu có thể được Ghi khi nó đã được Xóa hoàn toàn , những sẽ là không hiệu quả nếu như Xóa 32 hoặc 64 Page trong một Khối trong khi chỉ cần lấy lại một Page . Có nhiều vấn đề liên quan tới những thuật toán Garbage Collection và những vấn đề về hiệu quả , độ tin cậy và hiệu suất lại phụ thuộc vào thiết kế .

SSD mới với tất cả những Khối NAND đã được Xóa

\"\"

Sơ đồ trên cho biết hai Khối của SSD mới có chứa 32 Page , mỗi Page có 4KB . Đây là cấu hình thường thấy của NAND và chúng ta sẽ dùng nó trong bài này .

Bạn có thể thấy tất cả những Page đã được Xóa từ khi sản xuất và sẵn sàng để Ghi . Chúng ta cũng sẽ đề cập tới những trạng thái khác như Valid Data ( Dữ liệu hợp lệ ) và Dirty/Stale Data (Dữ liệu cũ cần phải dùng lại) .

Page đầu tiên Ghi tới SSD mới

\"\"

Ghi đầu tiên tới Khối NAND mới , mọi điều thật ễ dàng . Tất cả những Page đã được Xóa và chỉ cần Ghi tuần tự tới những Page đã được Xóa này .

Hình trên cho thấy thuật toán Garbage Collection thông thường thực hiện nhiệm vụ đầu tiên Ghi 10 Page mới vào những Khối đã được Xóa .

Cập nhật dữ liệu Page

\"\"

Bước tiếp theo trong hình trên đó là cập nhật 10 Page dữ liệu chúng ta đã Ghi ban đầu vào bộ nhớ NAND . Thay vì Ghi lại 10 Page vị trí đầu tiên , nó tiếp tục Ghi vào 10 Page vị trí tiếp theo đã được Xóa sẵn sàng để Ghi và đánh dấu 10 Page đầu tiên ở trạng thái Dirty/Stale Data .

Tại thời điểm này chúng ta có 10 Page được lưu trữ bằng dữ liệu hợp lệ (Valid Data) và có 10 Page được đánh dấu là Dirty/Stale nhưng không  được Ghi vào đó để chờ cho tới khi toàn bộ Khối NAND bị Xóa .

Lấp đầy Khối NAND

\"\"

Hình trên cho thấy có thêm 12 Page dữ liệu được Ghi vào khối NAND . Những Page mới này có số từ 11-22 trong vị trí 12 Page đã được Xóa cuối cùng ở dưới Khối 1 NAND .

Tại lúc này toàn bộ Khối NAND thứ 1 đã được dùng hết . Không còn Page nào đã được Xóa để lưu trữ dữ liệu và chỉ còn dữ liệu đã lưu trữ hoặc dữ liệu “bẩn” (Dirty/Stale) cần bị Xóa để lấy lại những Page này dùng lại .

Garbage Collection làm gì tiếp theo ?

\"\"

Bây giờ là lúc chúng ta phải chờ đợi . Điều gì diễn ra khi tất cả những Page của Khối NAND đang chứa dữ liệu tốt hoặc dữ liệu đã được Ghi trước đó không còn hợp lệ ?

Đó là lúc vai trò của Garbage Collection bắt đầu phát huy . Để lấy lại những Page NAND để chuyển sang trạng thái đã được Xóa . Đầu tiên mọi dữ liệu hợp lệ trong Khối được sao chép và Ghi tới những Page đã được Xóa trong Khối NAND mới . Bạn có thể thấy 22 Page dữ liệu hợp lệ từ Khối 1 và Ghi vào Khối 2 đã được Xóa toàn bộ .

Ngay sau khi 22 Page dữ liệu được Ghi sang Khối mới hoàn tất thì toàn bộ Khối 1 bị Xóa . Bây giờ Khối 1 có thể được Ghi .

Thực tế thiết kế của thuật toán Garbage Collection phải làm nhiều việc cùng với những yếu tố khác như Write Amplification … do vậy nó là phần quan trọng trong thiết kế tổng thể SSD .

Những chức năng điều khiển – Lệnh TRIM

Lệnh TRIM hỗ trợ bởi một số điều khiển SSD SATA và SCSI . Lệnh TRIM liên quan tới quá trình Garbage Collection mô tả lúc trước .

Với Garbage Collection , khi hệ điều hành thay thế Địa chỉ khối Logic LBA (Logical Block Address) đã chứa dữ liệu , nhưng trong khi một file cập nhật hoặc ghi đè , SSD lưu trữ dữ liệu cập nhật tới những Page mới và đánh dấu những Page hiện tại có chứa dữ liệu cũ là Dirty ( hoặc Stale ) .

Về sau Garbage Collection lấy lại những Page bị đánh dấu Dirty ( Stale ) ki nó Xóa toàn bộ Khối , là khu vực nhỏ nhất trong cấu trúc SSD NAND . Những Khối được Xóa này sẽ sẵn sàng để Ghi dữ liệu mới .

Tại sao lại có lệnh TRIM ?

Khi hệ điều hành ghi đè cùng những địa chỉ khối logic LBA , và điều khiển SSD đánh dấu chúng thành Dirty ( hoặc Stale ) để Xóa nó trong tương lai , rõ ràng nó không có dữ liệu hợp lệ (Valid) trong những Page này .

Nhưng khi một file bị Xóa trong hệ điều hành . Trong những trường hợp này không có lệnh Xóa gửi tới SSD để những LBA không còn hợp lệ trong hệ điều hành .

Trong lệnh TRIM chỉ thực hiện khi file bị Xóa vĩnh viễn . Nó cho SSD biết rằng những LBA liên quan không có dữ liệu hợp lệ có thể đánh dấu thành Dirty để cho vòng thu thập dữ liệu .

Ví dụ Hệ điều hành và SSD không có lệnh TRIM

\"\"

TRIM là một lệnh phải được hỗ trợ cả trong hệ điều hành và SSD . Những phiên bản mới của Windows , Mac và Linux .. đều hỗ trợ lệnh TRIM .

Hình trên là một ví dụ cho thấy hệ thống  không hỗ trợ lệnh TRIM . Trong ví dụ này hệ thống  chủ có 1 file 128GB chiếm chỗ 32 Page đã bị xóa . Hệ điều hành biết rằng nó đã Xóa và là khu vực trống có thể được dùng để Ghi vào đó .

Nhưng hệ điều hành chỉ đơn giản là đánh dấu những vị trí đó sẵn sàng để làm việc nhưng không có cơ chế thông báo cho điều khiển SSD biết rằng những Page này đã bị Xóa . Trong những Khối vật lí của SSD là hình ảnh bên phải , bạn có thể thấy điều khiển SSD vẫn tin rằng có dữ liệu hợp lệ trong những Khối này . Nó không đánh dấu chúng thành Dirty (Stale) và sẽ không có việc Garbage Collection để hệ điều hành có thể Ghi lại vào lần sau .

Ví dụ Hệ điều hành và SSD hỗ trợ lệnh TRIM

\"\"

Hệ thống hỗ trợ lệnh TRIM cho cả hệ điều hành và SSD thì hệ điều hành và SSD được đồng bộ với nhau . Sau khi Xóa một file , hệ điều hành sẽ cung cấp một lệnh TRIM để SSD đánh dấu những Page thành Dirty để có thể lấy lại khoảng trống ở khu vực đó trong quá trình Garbage Collection .

Hình trên là minh họa đơn giản của lệnh TRIM . Khi hệ thống  Xóa file 128GB ( 32 Page ) , hệ điều hành sẽ đánh dấu khu vực đó sẵn sàng làm việc và gửi lệnh TRIM với những LBA tới SSD . Điều khiển SSD sau đó đánh dấu những Page này thành Dirty để thực hiện quá trình Garbage Collection .

 

Những chức năng điều khiển – Over-Provisioning

Trong phần này chúng ta đề cập tới Over-Provisioning ( dự phòng ) hỗ trợ trong nhiều SSD . Nó là khoảng trống lưu trữ không dùng cho hệ điều hành mà được SSD sử dụng để thực hiện những nhiệm vụ nội bộ như tạo bản đồ những Khối bị hỏng , hỗ trợ Wear Leveling và Garbage Collection .

Tổng dung lượng Over-Provisioning được thiết lập tại nhà sản xuất trong giai đoạn định dạng lần cuối cùng của SSD . Mức phần trăm Over-Provisioning  là 0% , 7% và 28% .

Ví dụ SSD 128GB có thể có dung lượng thực tế là 128GB nếu như Over-Provisioning  mức 0% , là 120GB nếu là 7% và là 100GB nếu Over-Provisioning mức 28% .

Hầu hết những SSD dung lượng thấp có Over-Provisioning mức 0% và sử dụng những bộ phận cao cấp như bộ nhớ Flash NAND SLC có độ bền cực cao .

Nhiều SSD cho người dùng thông thường sử dụng chip nhớ Flash NAND MLC hoặc TLC dùng Over-Provisioning mức 7% và SSD dùng cho doanh nghiệp thông thường là mức 28% .

Ưu và nhược điểm của Over-Provisioning

Ưu điểm của Over-Provisioning là để giảm Write Amplification , tăng độ bền và duy trì hiệu suất làm việc .

Nhược điểm lớn nhất của Over-Provisioning là mất dung lượng lưu trữ có thể dùng được .