Kích thước dữ liệu có thể xóa tối thiểu và Mở rộng Ghi
Một
số loại mạch điều khiển SSD đời đầu có sử dụng hệ thống Kênh cố định,
tức là nếu mạch điều khiển sử dụng 8-kênh để kết nối với Flash NAND ở
điểm cuối thì lúc nào nó cũng dùng 8 kênh. Do đó, mỗi lượt giao dịch sẽ
địa chỉ hóa 4-kB x 8, tổng cộng là 32 kB kích thước Ghi tối thiểu . Như
vậy, việc ghi dữ liệu trống sẽ dẫn đến việc ghi giá trị FF vào tất cả
các địa chỉ, tức là chẳng có gì được lập trình lại thay đổi được gái
trị bit “đã xóa” mặc định của những ô NAND.
Vấn
đề đáng phải suy nghĩ trong trường hợp này là việc xóa một Khối trong
cấu hình 8 kênh cố định sẽ dẫn đến việc xóa cả 4 MB, thậm chí cả khi
chỉ cần xóa một Khối. Trong cả 2 trường hợp, khối lượng công việc mà
mạch điều khiển và mảng NAND phải thực hiện đều cao hơn kích thước tập
dữ liệu cần xử lý. Hơn nữa, việc lập chu kỳ khối NAND lặp đi lặp lại mà
không có bất kỳ “giá trị thực tế” nào sẽ ảnh hưởng nghiêm trọng đến độ
bền chung của ổ. Các loại mạch điều khiển hiện đại hơn có khả năng coi
mỗi kênh như một đơn vị chức năng độc lập dùng cho việc Đọc hoặc Ghi
theo yêu cầu.
Còn
có thước đo tương tự như Kích thước có thể xóa tối thiểu có tên gọi Mở
rộng Ghi ( WA - Write Amplification ). Tuy nhiên, hai nhân tố này không
hẳn có liên quan, bởi Write Amplification tức là tỉ lệ giữa lượng dữ
liệu mà máy tính ghi lên thiết bị với lượng dữ liệu và thiết bị ghi lên
vào bộ phận lưu trữ , bất chất quy trình sử dụng như thế nào . Nói cách
khác, nếu mạch điều khiển đủ thông minh chuyển từ quy trình đa kênh
sang quy trình 1 kênh, thì việc ghi 1 KB lên một trang có giới hạn ghi
lập trình nhỏ nhất 2KB thì sẽ ghi được ½ trang dữ liệu và có WA bằng
2x. Dù gì thì điều này vẫn tốt hơn nhiều so với việc sử dụng một mạch
điểu khiển kích hoạt cả 8 kênh và chỉ có thể ghi toàn bộ trang. Khi đó, WA sẽ
là 32 KB/1 KB, tức 32x. Nói cách khác, trong ví dụ trên với mỗi Byte di
chuyển từ máy tính tới mạch điều khiển, có 32 Byte thực chất được ghi.
Vai trò của Write Cache
Hầu
hết các file chuyển từ máy tính tới mạch điều khiển đều có kích cỡ tùy
ý, tức là không khớp với kích thước trang 4KB . Để đơn giản hóa, chúng
ta chỉ xét đến việc ghi toàn bộ trang, điều mà hầu hết các mạch điều
khiển hiện nay đang làm. Thường thì máy chủ sẽ gửi file theo thứ tự vài
byte, nhất là trong trường hợp các file Log. Nếu các file này cần viết
lại ngay vào mảng do thiếu cache, thì điều này sẽ nhanh chóng làm nghẽn
hệ thống do mạch điều khiển của ổ đĩa không theo kịp khối lượng ghi và
khiến dòng dữ liệu chờ trong Bus dữ liệu bị tràn đến điểm khiến cho hệ
thống phải dừng lại để tranh gây lỗi cho hệ điều hành. Đây là một vấn
đề thường gặp với ổ SSD đời đầu.
Nếu
có bộ nhớ Cache Ghi ( Write Cache ) thì các file hoặc các phần file nhỏ
có thể được gộp lại thành khối 4KB, bằng với kích thước trang vật lí
của cấu trúc trang vật lí SSD . Tuy vậy,
ngay cả khi áp dụng chính sách tốt nhất thì hiệu quả của việc lấp đầy
trang cũng chỉ đạt khoảng 90-95% trong khi 5-10% số giao dịch nội bộ
vẫn có giá trị từ 0.5 đến 3.5 kB.
Tùy
vào hệ điều hành mà một số Cache có thể được thực hiện trong bộ nhớ hệ
thống. Ví dụ như Windows 7 sử dụng Cache file hệ thống, tức một vùng
riêng biệt trong bộ nhớ hệ thống để tạm thời lưu giữ dữ liệu và các dữ
liệu kết hợp mà được Ghi đều đặn tới vào ổ đĩa , chứ không gửi thẳng
từng bit đến ổ đĩa và sử dụng Cache của ổ đĩa để ghi những dữ liệu kết
hợp .
Việc
truyền dữ liệu từ Cache file hệ thống sang ổ đĩa được gọi là làm sạch (
Flushing ) Cache Ghi, và quy tắc chính ở đây là chính sách “lazy
write,” tức là các file tạm thời thường không được ghi vào ổ đĩa , bởi
đằng nào chúng cũng bị xóa. Theo mặc định, quy trình “lazy write” chiếm
1/8 số file Cache ghi lên ổ. Cái hay của phương pháp này là ở chỗ nó
điều chỉnh linh hoạt lượng dữ liệu truyền tùy theo các giao dịch nổi
bật, trong khi vẫn sắp xếp được lượt dữ liệu cho 7 chu kỳ tiếp theo, do
đó tránh tình trạng khối lượng giao dịch lên xuống quá thất thường.
Vấn đề liên kết
Trên
ổ đĩa cứng, kích thước Sector vào khoảng 512 Byte, tức là kích thước
lưu trữ vật lí nhỏ nhất là 0.5 KB. Theo đó, hầu hết các hệ thống file
ngày nay đều dùng 512 Byte để thiết lập không gian lưu trữ “ảo” cho
chúng. Về lý thuyết, không mất nhiều thời gian để chuyển 512 Byte sang
4 KB, nhất là khi kích thước đơn vị phân phối chuẩn trong hệ thống file
thường dùng nhất -- Microsoft NTFS – lúc nào cũng là 4 kBytes (kích
thước cluster).
Chênh lệch Parition trong Windows XP
Tuy
nhiên trong đời thực, mọi thứ phức tạp hơn nhiều. Ví dụ đơn giản nhất
là việc Windows XP một khoảng trống ở phần mở đầu của mỗi Partition (
phân vùng ) , không trùng khớp lên giới hạn trang 4 kByte của NAND
Flash. Trong trường hợp này, khoảng trống đó gồm 63 sector, tương đương
với 7/8 trang. Kết quả là , mỗi trang
Logic ghi từ máy tính lên hệ thống sẽ chồng lên 2 trang vật lí NAND
Flash, tuy nhiên, cả hai đều không được sử dụng hết. Do đó, nếu một trang đơn lẻ cần được cập nhật hoặc viết lại thì sẽ phải viết lại cả 2 trang.
Trong
trường hợp Đọc dữ liệu , nhất là với các file lớn, thì tốc độ không bị
cản trở nhiều. Tuy nhiên trong việc Ghi dữ liệu, đặc biệt là các gói dữ
liệu nhỏ, thì vấn đề này lại ảnh hưởng rất lớn và rất nhanh tới tốc độ.
Kích thước file trung bình tùy thuộc vào khối lượng xử lý; sự khác biệt
tự nhiên giữa các file media nặng như MPEG hay AVI, hay thậm chí là các
hình ảnh tĩnh như JPEG với các ứng dụng khoa học hay tài chính. Khi đó
các file 4KB sẽ chiếm khoảng 60-70% tổng số file ghi, điều đó ngày càng
trở nên nghiêm trọng với nhiều File có dung lượng nhỏ hơn 4KB khi sử
dụng SSD trong Windows XP.
Còn
với Windows Vista và Windows 7, các khối Logic sẽ được đặt khớp với
trang, tức là không có khoảng trống nào để gây ra vấn đề như trong
Windows XP.
Rõ
ràng là hầu hết tất cả các vấn đề trong SSD đều liên quan đến hoạt động
Ghi hơn là hoạt động Đọc dữ liệu. Trong khi đó trên thực tế hầu hết sự
qua lại giữa ổ và máy tính là quá trình Đọc dữ liệu tất nhiên có một số
chương trình như Email theo đánh giá có khoảng 70% là quy trình Ghi dữ
liệu .
Tình
trạng sắp xếp không khớp trong Windows XP do khoảng trống 63 sector gây
ra tại phần mở đầu của mỗi Partition, dẫn đến việc phải ghi 2 trang
thay vì 1.
Mức độ hao mòn – Wear Leveling
Mức
độ hao mòn là một khái niệm khá khó hiểu nhưng lại giúp giải quyết gần
như mọi vấn đề liên quan đến ổ SSD. Nói ngắn gọn, “định nghĩa” về vai
trò của “Mức độ hao mòn” là chuyển hoạt động từ mảng đến các vị trí
khác với có nhiệm vụ đảm bảo rằng tất cả các khối đều có cùng số chu kỳ
Lập trình / Xóa ( P/E ) . Điều này rất quan trọng bởi giới hạn ghi của
một khối MLC bình thường là chu kỳ 10.000 lần P/E ( với những SSD được
sản xuất dựa trên công nghệ chế tạo 50 nm) và việc thu nhỏ công nghệ
chế tạo sẽ rút ngắn vòng đời của một khối. Tức là với công nghệ 3x
(30-39nm), giới hạn Ghi sẽ giảm xuống còn 3 – 4000 lần chu kỳ P/E . Mục
đích của “ Mức độ hao mòn “ là tránh việc ghi lặp lại đối với một khối
bằng cách theo dõi số chu kỳ P/E đối với tất cả các khối. Mỗi nhà sản
xuất lại có cách khác nhau để thực hiện điều này.
Có
thể coi mảng flash NAND như một tấm thảm trong một ngôi nhà, trong đó
có những vùng sử dụng ít và vùng sử dụng nhiều. Tại những nơi sử dụng
nhiều, tấm thảm sẽ mòn đi nhanh hơn so với những vùng nằm dưới đồ đạc
hoặc nằm trong góc, nơi ít người qua lại. Trong trường hợp này, “ Mức
độ hao mòn “ là một cách để những vùng sử dụng nhiều sẽ liên tục được
bổ sung bằng những “tấm lát” được sử dụng ít .
Sắp xếp lại khối và Cho mượn ( Over-Provisioning )
Ngoài “ Mức độ hao mòn “ còn được chia làm nhiều loại khá thú vị. Với ổ đĩa cứng, tất cả các Phân vùng ( Partition ) sau
khi phân chia trong HDD đều cố định . Nhưng trong SSD, không có sơ đồ
cố định cho các khối khác nhau, mọi thứ đều Logic và khó hiểu. Điều này
rất quan trọng khi xem xét các Partition bởi “ Mức độ hao mòn “ không
phải là một chức năng của một Partition, mà là chức năng của toàn bộ
SSD . Do đó, các khối sẽ được Sắp xếp lại ( Block Shuffling ) tùy theo
mô hình sử dụng và tần số truy cập của một Partition nhất định. Nói
cách khác, nếu một SSD được chia vào một Partition hệ thống (sử dụng
nhiều) và Partition dữ liệu (sử dụng ít hơn), thì cả 2 Partition này sẽ
đạt đến giới hạn cùng lúc, nếu áp dụng “ Mức độ hao mòn “ đúng cách.
Liên
quan đến việc Sắp xếp lại các khối là một kỹ thuật mang tên Cho mượn (
Over-Provisioning ) . Nói một cách ngắn gọn, Over-Provisioning có nghĩa
là có nhiều bộ nhớ vật lí Flash NAND hơn hiện tại mà tại đó hệ thống có
thể truy cập bất kì lúc nào .
Ví
dụ như một SSD 120GB có thể được lập cấu hình qua Firmware để chỉ cho
phép truy cập 60 GB dung lượng. Điều này có thể gọi là 100%
Over-Provisioning hoặc 50% Over-Provisioning, tùy vào cách gọi theo
kiểu “dùng một nửa” hoặc “để trống một nửa” .
Over-provisioning
cũng tương tự như “ Mức độ hao mòn “ nhưng thường thì cho phép nhiều
khối đạt đến giới hạn hơn, sau đó thay thế chúng bằng cách khối mới dự
trữ. Một cách hiểu khác nữa là Over-provisioning có nhiệm vụ giữ lại
một phần trăm nào đó trong SSD để dự trữ, giống như không gian lưu trữ
tạm thời cho “ Mức độ hao mòn “ và sự thống nhất dữ liệu, bởi cả 2 chỉ
có thể làm việc trong một vùng kích thước lưu trữ duy nhất .
Xếp hàng lệnh (NCQ)
NCQ
( Native command queuing ) , một phương pháp sắp xếp lệnh giống như
được sử dụng trong những HDD bằng giao diện SCSI là một trong những
sáng kiến quan trọng nhất trong quá trình chuyển đổi từ Parallel ATA
sang SATA. Nói một cách ngắn gọn, ổ đĩa sẽ trở thành một nhà quản lí
Bus ( Busmaster ) và có khả năng tự lập lịch cho các giao dịch làm sao
để có thể truy cập dữ liệu một cách tối ưu nhất .
Do
không có đĩa và ổ cũng quan tâm đến vị trí vật lý nơi ghi dữ liệu, nên
NCQ lại mang một chức năng khác, cụ thể là xếp lịch các giao dịch đến
mảng NAND sao cho sử dụng hiệu quả nhất giao diện đa kênh.
Nói cách khác, giả sử một file 20 KB được xếp hàng để ghi, và một tập gồm các file 24, 8 và 12 kByte trong
giao diện 8 kênh, tương ứng với 5, 6, 2 và 3 trang, thì để tận dụng tốt
nhất giao diện này, cần kết hợp 5 và 3 trang trong một chu kỳ, và 6 và
2 trang trong chu kỳ tiếp theo. Do giao diện SATA cũng hỗ trợ việc
chuyển lệnh nên có thể sắp xếp trước dữ liệu từ bên trong (để truy cập
Flash NAND Đọc và Ghi) rồi chuyển đến mạch điều khiển theo cách hiệu
quả nhất.
Kiểm tra và sửa lỗi
Đối
lập với DRAM hay SRAM – gần như hoàn hảo về khả năng bảo toàn dữ liệu –
Flash NAND có độ bảo toàn dữ liệu tương đương với DRAM hồi giữa thập
niên 1980, tức là cần những Module Parity để bảo đảm dữ liệu là chính
xác .
Trong
Flash NAND hiện tại, có khoảng 30% lượng dữ liệu Đọc sẽ gặp lỗi nếu
không có cơ chế sửa lỗi . Hiện tại, ECC phổ biến nhất sử dụng thuật
toán, tuy nhiên, tỉ lệ thất bại ngày càng tăng mà NAND gặp phải đối với
việc xử lý các quy trình nhỏ khiến nó cần đến thuật toán BCH (Bose, Ray
–Chaudhuri Hocquenghem) dự trên việc giải mã hội chứng.
Việc
áp dụng các thuật toán BCH phức tạp hơn sẽ tạo ra nút thắt cổ chai về
tốc độ ở thế hệ Flash NAND tiếp theo hoạt động ở 200 Mbps sắp ra mắt
thị trường.
Theo Tuvantinhoc