Thu thập dữ liệu vô nghĩa và TRIM trong SSD

Thu thập dữ liệu vô nghĩa - GC Garbage Collection - là quá trình cơ bản trong tất cả những SSD nhưng có thể được thực hiện theo những cách khác nhau và ảnh hưởng tới hiệu suất và độ bền của SSD .

Trong bài này chúng tôi giải thích GC làm việc như thế nào , nó được thực hiện như thế nào , làm thế nào nó lại liên quan tới lệnh TRIM và những dung lượng dự trữ .

Không  như những ổ cứng , bộ nhớ Flash NAND không thể ghi đè lên những vùng đang có dữ liệu , đầu tiên phải Xóa dữ liệu cũ trước khi Ghi dữ liệu mới tới cùng vị trí . Với SSD , GC là tên của quá trình di chuyển dữ liệu hiện có đến vị trí mới và cho phép các dữ liệu không hợp lệ xung quanh được Xóa hoàn toàn .

Bộ nhớ Flash được chia thành những khối ( Block ) sau đó được chia thành những trang nhỏ hơn . Dữ liệu có thể được Ghi trực tiếp tới những khối trống , nhưng chỉ có những khối mà toàn bộ dữ liệu trong đó đã bị Xóa mới được Ghi . Vì vậy để lấy lại những khoảng trống mà trong đó có chứa những dữ liệu không hợp lệ thì tất cả dữ liệu hợp lệ từ một khối phải được copy đầu tiên và Ghi vào những trang trống của khối mới . Sau đó dữ liệu không hợp lệ trong khối ban đầu sẽ bị Xóa để sẵn sàng Ghi dữ liệu mới hợp lệ vào đó .

Quá trình này được minh họa trong Hình 1 .

Cột một cho thấy những trang A-D được Ghi trong khối X . Thời gian sau dữ liệu thay đổi , do đó A’-D’ được Ghi dữ liệu hợp lệ và trang A-D ban đầu được đánh dấu là không hợp lệ ( hình trong Cột 2 ) . Cùng lúc đó , dữ liệu thêm vào được Ghi tới trang E-H . Cột hai cho thấy sự thay đổi này và bây giờ Khối X đã đầy nhưng cần giải phóng khoảng trống mà dữ liệu không hợp lệ đang có ở trang A-D .

Để làm được việc này , dữ liệu hợp lệ trong Khối X được chuyển tới một Khối mới để Khối X ban đầu có thể Xóa để bắt đầu Ghi dữ liệu mới .

Cột 3 cho thấy dữ liệu từ trang A’-D’ và từ E-H đã được Ghi vào khối mới do đó không gian của Khối X có thể được lấy lại bằng cách Xóa nó . Việc Ghi từ bước này không phải thực hiện từ hệ thống  Host điều đó có nghĩa là bộ nhớ Flash trong SSD được Ghi nhiều hơn những gì mà hệ thống  Host ban đầu thực hiện . Trong khi đó bộ nhớ Flash hạn chế số lượng chu kì Ghi / Xóa vì thế mà việc này cần hạn chế càng nhiều càng tốt nhưng nó lại rất cần thiết trong hoạt động của SSD .

 

\"\"

Hình 1

 

Như vậy nếu như dữ liệu được Ghi vào một Khối nhiều lần sẽ khiến cho tuổi thọ của Khối này lại giảm đi so với khối khác . Nếu điều đó cứ tiếp diễn sẽ khiến cho Khối đó không thể dùng lại được nữa như vậy sẽ giảm dung lượng lưu trữ của SSD . Như vậy lí tưởng nhất là tất cả các Khối trong SSD có cùng mức Ghi/Xóa để bảo đảm tuổi thọ của chúng được đồng đều và bảo đảm dung lượng lưu trữ được đầy đủ .

Trong HDD , hệ điều hành có thể đơn giản yêu cầu dữ liệu mới Ghi , tới cùng vị trí mà ở đó có chứa dữ liệu cũ hoặc dữ liệu không hợp lệ , để lưu trữ . Và HDD sẽ trực tiếp Ghi đè lên vùng dữ liệu cũ .

Tuy nhiên trong SSD đầu tiên trang phải bị Xóa trước sau đó mới Ghi lên những vị trí mà chứa dữ liệu trước kia . SSD không thể Ghi đè trực tiếp lên vùng đã có chứa dữ liệu trước đó .

Hệ điều hành biết rõ những file và những vị trí logic của nó đang lưu trữ dữ liệu , nhưng nó lại không hiểu cấu trúc lưu trữ vật lí của thiết bị lưu trữ . Trong mọi hệ thống  lưu trữ , thiết bị lưu trữ không biết cấu trúc file , nó chỉ biết một cách đơn giản rằng có những Byte dữ liệu được Ghi trong những Sector . Hệ thống  lưu trữ ở đây là SSD và HDD , trả dữ liệu từ Vị trí vật lí khi hệ điều hành yêu cầu dữ liệu trong những vị trí Logic tương ứng .

Khi hệ điều hành xóa file , nó đơn giản đánh dấu khoảng trống dùng dữ liệu này là “tự do - free ” trong bảng dữ liệu Logic của nó . Với HDD , hệ điều hành không  cần nói thiết bị lưu trữ điều gì về việc Xóa này bởi vì nó chỉ cần Ghi dữ liệu mới tới vị trí được đánh dấu là “Free” trong tương lai .

Trong trường hợp SSD nó không chỉ nhận thức rằng dữ liệu bị Xóa ( hoặc không  hợp lệ ) khi hệ điều hành cố Ghi lên vị trí này một lần nữa . Khi đó SSD đánh dấu dữ liệu cũ là không hợp lệ và nó Ghi dữ liệu mới tới vị trí vật lí khác mà không  thể Ghi đè như của HDD . Nó có thể thực hiện công việc GC cùng thời gian đó nhưng có sự khác nhau giữa cấu trúc SSD  và những điều kiện khác khi đó .

 

Lệnh TRIM

 

Trong những hệ điều hành mới như Windows 7 , Windows Server 2008 R2 , Linux 2.6.33 , FreeBSD 8.2, Open Solaris, Mac OS X Lion,  lệnh TRIM đã có sẵn , cho phép hệ điều hành này báo cho SSD rằng dữ liệu cũ không còn giá trị khoảng về thời gian nó Xóa địa chỉ khối Logic từ bảng Logic  .

Ưu điểm của lệnh TRIM là nó cho phép GC của SSD bỏ qua dữ liệu không hợp lệ hơn là di chuyển nó thì như thế sẽ tiết kiệm thời gian không Ghi lại dữ liệu không hợp lệ . Kết quả là giảm số chu kì Xóa trong bộ nhớ Flash và cho phép hiệu suất làm việc cao hơn trong khi Ghi . SSD không cần Xóa ngay lập tức hoặc GC những vị trí này mà nó chỉ cần đánh dấu chúng là chưa hợp lệ .

Sự khác nhau được minh họa trong Hình 2 và Hình 3

 

\"\"

 

Hình 2

 

Hình 2 cho thấy quá trình xử lí không dùng lệnh TRIM . Trong Cột 1 hình 2 , người dùng Ghi 4 file tới ổ SSD . Hệ điều hành đã thấy những file này trong bảng Logic của mình , và SSD cũng đã thấy thấy cả vị trí logic và vị trí vật lí đều sẵn sàng .

Trong cột 2 , người dùng  Xóa file C , nhưng SSD không biết file đã được Xóa bởi vì lệnh TRIM không dùng . Nếu thực hiện GC tại thời điểm này , nó sẽ chuyển dữ liệu không hợp lệ  trong file C bởi vì nó không biết đó là dữ liệu không hợp lệ .

Trong cột 3 , người dùng Ghi file E mới , hệ điều hành nói với SSD dùng cùng khoảng trống đã được dùng  của file C cũ , và SSD Ghi file mới tới vùng trống và đánh dấu khoảng trống cũ đã sẵn sàng để GC .

 

\"\"

 

Hình 3

 

Hình 3 cho thấy sự khác nhau khi có lệnh TRIM .

Trong trường hợp này , quá trình vẫn tương tự như Hình 2 khi người dùng Ghi 4 file lúc đầu . Khi Xóa file C trong cột 2 , tuy nhiên , khoảng trống cũ chứa file C ngay lập tức được đánh dấu là không hợp lệ để chuẩn bị cho GC vì hệ điều hành dùng lệnh TRIM .

Khoảng trống mà giữ file C bây giờ được hiểu là “Free” cho phép SSD có nhiều khoảng trống hơn khi GC điều đó tăng tốc hiệu suất làm việc hơn là thực hiện GC trong phạm vi hẹp .

Trong cột 3 khi người dùng Ghi cuối cùng file E , tổng khoảng trống “Free” trên SSD bây giờ cùng mức như SSD không có TRIM . Sự khác nhau ở những SSD được hỗ trợ TRIM sẽ biết dữ liệu nào là không hợp lệ và nó có thể xem xét khoảng “Free” trong khi GC và ngăn chặn việc di chuyển những dữ liệu không hợp lệ tới khối khác .

Như vậy TRIM có 3 lợi ích chính

 

  • Ít dữ liệu cần Ghi lại hơn và nhiều khoảng trống hơn được sắn sàng để sử dụng khi GC .
  • Hiệu suất làm việc cao hơn .
  • Tăng tuổi thọ SSD do Ghi ít hơn vì không ghi lại dữ liệu không hợp lệ .

 

Xin lưu ý : Hiện tại TRIM lại chưa làm việc với hầu hết cấu hình RAID bởi vì driver RAID chưa hỗ trợ nó .