Một thế giới mới với SSD - Phần cuối

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,
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. 

 \"\"