Tất tần tật về ổ SSD

Ổ SSD (Solid-State Drive) hiện đang rất phổ biến do giá thành giảm trong khi dung lượng tăng lên đáng kể. Ngoài việc dung lượng tăng và giá giảm, thì SSD thu hút người dùng chính là tốc độ và độ bền của nó. Do không sử dụng bất kỳ lá đĩa hay đầu quay như ổ HDD, nên SSD có thêm lợi thế nữa là kích thước rất nhỏ gọn và khả năng hỏng hóc do va chạm trong lúc hoạt động hầu như không có.

Để giúp hiểu rõ hơn cơ cấu hoạt động của SSD, xin mời các bạn hãy cùng tham khảo cách thức hoạt động cũng như cấu tạo của nó so với ổ HDD truyền thống.

Đầu tiên chúng ta hãy cùng xem lại cấu tạo và nguyên lý hoạt động của HDD.

Ổ cứng HDD bao gồm nhiều lá đĩa từ gọi là platter xếp chồng nhau và xoay quanh một trục. Dữ liệu sẽ được lưu trữ trên cách rãnh (track) của lá đĩa. Để đọc và ghi dữ liệu trên lá đĩa, người ta sử dụng một đầu đọc có khả năng di chuyển xung quanh lá đĩa. Mỗi khi cần trích xuất hay ghi dữ liệu mới, đầu đọc sẽ di chuyển đến đúng vị trí đó. Quá trình di chuyển này được gọi là “seeking” (tìm kiếm) và tốc độ di chuyển qua lại được gọi là “seek time” (thời gian tìm kiếm).

Đầu đọc nằm trên khu vực lá đĩa để đọc hay ghi dữ liệu, do đó luôn có độ trễ nhất định trước khi dữ liệu được truy cập. Ổ đĩa thường xuyên phải đọc dữ liệu ở nhiều vị trí khác nhau để truy suất chương trình, điều đó có nghĩa là nó phải chờ các lá đĩa quay đến nhiều vị trí khác nhau nhiều lần trước khi hoàn tất lệnh. Nếu ổ đĩa đang ở trang thái chờ (idle) hay ngừng quay tạm thời thì độ trễ sẽ rất lớn.

Mặc dù hiện nay tốc độ vòng quay và bộ nhớ đệm của ổ cứng được cải thiện rất nhiều, nhưng vẫn không thể làm giảm độ trễ xuống thấp hơn. Thêm nữa, khi ổ cứng đang đọc ở tốc độ cao chỉ cần một tác động nhỏ lên nó là có thể gây thiệt hại cho ổ đĩa..

SSD hoạt động như thế nào?

Hoàn toàn khác biệt với HDD, ổ SSD không lưu dữ liệu trên các lá đĩa và hoàn toàn không sử dụng đầu đọc. Thay vào đó, dữ liệu sẽ được lưu trên các chip nhớ NAND flash. Cấu tạo của NAND flash bao gồm nhiều transitor đặc biệt có tên gọi floating gate transistor, không giống với transisitor dùng trong bộ nhớ DRAM vốn phải reresh (làm tươi) nhiều lần mỗi giây, NAND flash được thiết kế để giữ nguyên trạng thái của nó kể cả khi không được cấp nguồn.

Flash_cell_structure.svg_1-640x518

Các electron được lưu trữ trong transistor floating gate, chỉ có 2 trạng thái “0” và “1” tương ứng với “nạp” và “không nạp” hay dễ hiểu hơn “0” chính là dữ liệu được lưu trữ trong mỗi ô nhớ (cell). Cơ cấu tổ chức của NAND flash theo hình lưới, gồm page (trang) và block (khối). Một page gồm nhiều cell hợp thành, và nhiều page sẽ tạo thành một block. Kích thước của một page thường là 2K, 4K, 8K, hoặc 16K. Một block bao gồm 128 đến 256 page, hay có kích thước trong khoảng 256KB và 4MB.

Bởi vì SSD không có đầu đọc, cho nên tốc độ đọc, ghi dữ liệu nhanh hơn HDD rất nhiều. Biểu đồ so sánh dưới đây cho ta thấy rõ điều đó:

SSD-Latency

*Ghi chú của người viết: Chu kỳ P/E trong bảng trên đã lỗi thời, hiện nay tiến trình công nghệ rất phát triển nên công nghệ  sản xuất NAND flash càng ngày càng thu nhỏ lại chỉ 16mm, 19mm, vì vậy mức P/E do các hãng công bố hiện tại chỉ nằm trong mức MLC là 3k, TLC là 1K ..v.v.

Tốc độ của NAND flash nhanh xấp xỉ với bộ nhớ ram, và cao hơn rất nhiều lần so với ổ cứng HDD. Độ trễ ghi của NAND flash thấp hơn độ trễ đọc, nhưng vẫn cao hơn ổ đĩa truyền thống.

Nhìn vào biểu đồ trên, có 2 điều bạn cần lưu ý. Đầu tiên là số lượng bit dữ liệu lưu trữ trong mỗi ô NAND flash sẽ có ảnh hưởng nhất định đến hiệu năng của bộ nhớ. Cuối cùng là loại chip NAND sử cũng ảnh hưởng đến hiệu năng – cụ thể hơn khi so sánh độ trễ giữa các loại chip NAND khác nhau bạn sẽ thấy chip TLC (Triple level cell) sẽ có độ trễ đọc cao hơn SLC (Single level cell) đến 4 lần, và gấp 6 lần nếu ghi. Do đó về cơ bản ổ SSD sử dụng chip TLC NAND sẽ có tốc độ truy suất thấp hơn ổ dùng chip MLC hay SLC, mặc dù mỗi cell của chip TLC sẽ chứa dữ liệu cao hơn MLC 50% (3 bit trên 1 cell thay vì 2). Nhưng ngược lại SSD dùng SLC hay MLC NAND sẽ có hiệu năng và tuổi thọ cao hơn.

Điện áp của TLC NAND

Như đã đề cập ở trên, tốc độ của SSD phụ thuộc vào loại chip nhớ sử dụng. Sở dĩ, TLC NAND có tốc độ truy suất chậm hơn MLC hay SLC là do nó lưu trữ nhiều bit hơn. Đối với SLC NAND, thì bộ điều khiển chỉ quan tâm đến 2 mức là “0” hoặc “1”. MLC NAND thì mỗi cell chứa nhiều hơn, có 4 giá trị là 00, 01, 10 hoặc 11. Trong khi đó TLC NAND lại chứa đến 8 giá trị. Việc đọc dữ liệu trong ô nhớ sẽ do bộ điều khiển quản lý bằng cách cấp điện thế cho nó.

TLCNAND

Đọc, ghi và xóa (Program, write, erase)

Một trong những giới hạn của SSD đó là nếu đọc, ghi dữ liệu trên ổ trống sẽ rất nhanh, nhưng một khi dữ liệu đã lắp đầy thì tốc độ sẽ suy giảm. Nguyên nhân chính là do ở cơ chế họa động, SSD có đặc tính là có thể đọc hay ghi dữ liệu từng page, nhưng khi xóa thì buộc phải xóa nguyên block. Vì xóa nguyên block, nên NAND flash cần phải có mức điện áp cao hơn nhiều để thực hiện tác vụ đó, vô tình các ô nhớ nằm trong page thuộc block được xóa cũng bị ảnh hưởng theo. Lâu dần, việc xóa dữ liệu sẽ ảnh hưởng đến hiệu năng chung của SSD.

Phương thức ổ SSD cập nhật dữ liệu trên page có sẵn là nó sẽ sao chép toàn bộ nội dung của block vào bộ nhớ, xóa block, và sau đó chép nội dung của block cũ cùng với page đã được cập nhật. Nếu ổ đĩa đầy và không còn page trống, SSD sẽ quét toàn bộ block để tìm ra các ô được đánh dấu xóa nhưng chưa xóa để xóa hẳn và chép dữ liệu mới vào. Đó chính là nguyên nhân tại sao SSD sử dụng càng lâu, hiệu năng càng giảm – ổ đĩa có nhiều block trống thì có thể ghi dữ liệu ngay lập tức, nhưng ổ đĩa còn ít chỗ trống thì buộc nó phải thực hiện đúng theo qui trình đọc/xóa.

Garbage collection

Nếu sử dụng SSD, chắc hẳn bạn đã từng nghe đến cụm tự “garbage collection” (tạm dịch: thu gom rác). Gargabe collection là tác vụ chạy nền giúp giảm nhẹ ảnh hưởng của chu kỳ đọc/ghi lên hiệu năng của ổ đĩa. Hình minh họa dưới đây sẽ giúp bạn hiểu rõ hơn về garbage collection.

Trim

Trong minh họa ở trên, khi ổ đĩa còn trống dữ liệu được ghi vào 4 page (A-D), sau đó có thêm 4 page mới là (E-H) và 4 page mới được cập nhật lại (A’-D’) được ghi liên tiếp vào block X. Sau thời gian sử dụng, dữ liệu lưu trong page( A-D) không còn dùng tới nữa nên được đánh dấu “invalid”, nhưng vẫn chưa thể chép đè lên cho đến khi toàn bộ block X bị xóa. Để thực hiện việc “tẩy rửa” page (A-D), tất cả các page (E-H và A’-D’) sẽ được đọc và chép vào block Y mới, sau đó block X sẽ bị xóa toàn bộ và đánh dấu “trống”. Bước cuối cùng được gọi là garbage collection, có nghĩa trước khi SSD muốn xóa hết cả khối nhớ đó, đầu tiên chip điều khiển sẽ chuyển các page chứa dữ liệu sang một block khác. Điều này sẽ giúp cho SSD có thể thực thi ngay lập tức tác vụ ghi trong lần sau, mà không cần phải thực hiện lại đúng qui trình đọc/xóa.

TRIM

Trước khi tìm hiểu lệnh TRIM, bạn đọc hãy cùng xem lại cách thức ổ cứng xóa dữ liệu như thế nào. Khi bạn xóa một file khỏi Windows từ một ổ đĩa cứng nào đó, lúc này các file sẽ không bị xóa hoàn tòan mà đơn thuần sẽ được hệ điều hành đánh dấu “deleted”. Nó chỉ thực sự bị xóa khi lần tới hệ điều hành chép đè các file mới vào chỗ bị đánh dấu. Đó cũng là lý do tại sao bạn có thể phục hồi lại các file đã bị xóa (nếu để ý kỹ bạn sẽ thấy mặc dù đã xóa file trong ổ cứng nhưng khoảng trống vẫn không tăng, chỉ đến khi bạn “empty” toàn bộ mọi thứ nằm trong thùng rác). Đối với ổ cứng HDD thông thường, hệ điều hành sẽ không quan tâm xem dữ liệu sẽ được ghi ở đâu, vào block hay page.

Lệnh TRIM chỉ áp dụng cho ổ SSD nhằm giúp tăng hiệu năng.

Cách thức hoạt động của lệnh TRIM rất đơn giản, nó cho phép quá trình Garbage Collection thay vì di chuyển những page đã được đánh dấu “invalid”, thì hãy bỏ qua những page đó, do đó tiết kiệm được thời gian và không phải ghi lại dữ liệu. Vì vậy, nó giúp giảm thiểu chu kỳ xóa và tăng hiệu năng của ổ đĩa.

Write Amplification (Khuếch đại dung lượng trong quá trình ghi)

Như đã đề cập, SSD ghi dữ liệu vào page nhưng xóa toàn bộ block, kích thước dữ liệu sau khi ghi vào ổ đĩa LUÔN LUÔN lớn hơn kích thước thực sự của dữ liệu gốc. Để dễ hình dung, hãy nhìn vào ví dụ sau đây: Nếu bạn thực hiện thay đổi trên một file excel có dung lượng 4K, thì toàn bộ block chứa file đó buộc phải được cập nhật và ghi lại. Phụ thuộc vào số lượng page trong mỗi block và kích thước của từng page, thì dung lượng cuối cùng của file gốc 4KB sau khi được cập nhật có thể tăng lên đến 4MB. Đó chính là hiện tượng Write Amplification.

May mắn là quá trình Gagbage Collection và lệnh Trim giúp giảm thiểu ảnh hưởng của hiện tượng Write Amplification.

Wear Leveling

Wear leveling là thuật toán đặc biệt giúp tăng tuổi thọ và độ ổn định của NAND flash bằng cách phân bổ quá trình ghi ra đều nhau, không được ghi hoặc xóa thường xuyên. Mặc dầu wear leveling mang đến lợi ích cho ổ đĩa, nhưng nó lại làm tăng hiện tượng write amplification. Để phân bổ quá trình ghi ra đều khắp ổ đĩa, thỉnh thoảng nó phải cần ghi và xóa block mặc dầu nội dung trong đó không có thay đổi.

Nguồn ExtremeTech