Thảo luận  Khám phá cấu trúc vật lý của ổ cứng thông qua microbenchmark

Administrator
Khám phá cấu trúc vật lý của ổ cứng thông qua microbenchmark
Bởi Henry, ngày 6 tháng 9 năm 2019

microbenchmark-HDD.webp

Bài dịch rất dài cho thấy quá trình tác giả sử dụng phương pháp Microbenchmark, giúp khám phá cách dữ liệu thực sự được bố trí bên trong ổ cứng, từ vị trí sector, thời gian seek cho đến cách các track được sắp xếp trên bề mặt đĩa. Tuy nhiên, quá trình đo đạc không hề đơn giản vì các thuật toán thường phải dựa trên nhiều giả định như cấu trúc track, track skew, cache hay hành vi của đầu đọc. Sự khác biệt giữa các thế hệ ổ cứng từ 45 MB đến 5 TB cũng tạo ra vô số trường hợp đặc biệt, khiến việc suy luận số lượng phiến đĩa (platter) hoặc bề mặt lưu trữ trở thành một bài toán phức tạp hơn nhiều so với tưởng tượng. Mình có để link bài gốc ở cuối bài.

Mời các bạn nghiên cứu

Ổ cứng hiện đại có thể lưu trữ một lượng dữ liệu khổng lồ trong không gian rất nhỏ và vẫn là lựa chọn mặc định cho nhu cầu lưu trữ dung lượng lớn (dù không phải lựa chọn có hiệu năng cao nhất). Mặc dù ổ cứng đã xuất hiện từ những năm 1950, chuẩn kích thước 3,5 inch hiện nay (thực tế rộng khoảng 4 inch) chỉ xuất hiện vào đầu những năm 1980. Kể từ đó, dung lượng của ổ cứng 3,5 inch đã tăng khoảng 10^6 lần (từ 10 MB lên khoảng 10 TB), tốc độ truyền dữ liệu tuần tự tăng khoảng 10^3 lần, và thời gian truy cập được cải thiện khoảng 10^1 lần.

Mặc dù nguyên lý cơ bản của các đĩa từ quay được truy cập bởi cụm đầu đọc/ghi di động không thay đổi, ổ cứng ngày nay đã trở nên phức tạp hơn rất nhiều để đạt được mật độ lưu trữ và hiệu năng cao hơn. Những ổ cứng đời đầu chỉ có vài chục nghìn sector được bố trí trên hàng trăm track đồng tâm (thưa đến mức động cơ bước có thể định vị đầu đọc chính xác), trong khi ổ cứng hiện đại có tới hàng tỷ sector (kèm hàng nghìn điểm lỗi), được nén vào hàng trăm nghìn track với khoảng cách chỉ vài chục nanomet.

Ngoài các phép đo hiệu năng cấp cao như tốc độ truyền dữ liệu và thời gian tìm kiếm (seek time), liệu chúng ta có thể xác định được những đặc tính nào khác của ổ cứng bằng microbenchmark? Ban đầu, tôi chỉ muốn tìm cách phát hiện số lượng platter (đĩa từ) bên trong một ổ cứng mà không cần mở nó ra. Tuy nhiên, với ổ cứng hiện đại, nhiệm vụ tưởng chừng đơn giản này lại yêu cầu phải đo nhiều thuộc tính khác trước khi suy ra số lượng bề mặt ghi dữ liệu.

Việc phân tích cấu trúc hình học của ổ cứng đã từng được nghiên cứu trước đây [1, 2], và các thuật toán tôi sử dụng không khác biệt quá nhiều. Tuy nhiên, các thuật toán cũ thường dựa trên những giả định không còn đúng với ổ cứng hiện đại. Ví dụ, thuật toán Skippy [2] (một thuật toán nhanh dùng để đo số lượng bề mặt, thời gian chuyển cylinder và thời gian chuyển đầu đọc) hiện không còn hoạt động trên ổ cứng ngày nay vì nó giả định một kiểu sắp xếp track trên nhiều platter không còn được sử dụng nữa (nhiều lần chuyển đầu đọc xảy ra trước khi seek sang cylinder kế tiếp).

Ổ cứng lưu trữ dữ liệu trên một chồng gồm một hoặc nhiều đĩa từ quay. Dữ liệu được ghi theo các track đồng tâm. Một cụm đầu đọc/ghi sẽ di chuyển theo hướng xuyên tâm trên các đĩa để định vị đầu đọc đến track mong muốn. Thông thường, mỗi platter có hai đầu đọc (mỗi mặt một đầu đọc), và toàn bộ cụm đầu đọc di chuyển đồng thời như một khối thống nhất.

Quá trình đọc dữ liệu diễn ra bằng cách di chuyển đầu đọc tới track cần thiết (seek), chờ cho phần đầu của dữ liệu cần đọc đi qua vị trí đầu đọc, sau đó tiếp tục đọc tuần tự cho đến khi toàn bộ dữ liệu được đọc xong hoặc đến cuối track, lúc đó đầu đọc cần chuyển sang track tiếp theo.

“Cấu trúc hình học” (geometry) của ổ cứng mô tả cách dữ liệu được sắp xếp thành platter, track và sector. Trước đây, nó được mô tả bằng ba thông số:
  • Cylinders: số vòng tròn đồng tâm từ ngoài vào trong
  • Heads: số bề mặt ghi dữ liệu (hay số track trên mỗi cylinder)
  • Sectors per track: số sector trên mỗi track
Ba thông số này tạo nên thuật ngữ quen thuộc CHS (Cylinder – Head – Sector). Dung lượng của ổ cứng tính theo số sector đơn giản là:

C × H × S

Ngày nay, C và S có thể thay đổi, chỉ có H là hằng số. Số lượng track không nhất thiết giống nhau trên mỗi bề mặt ghi dữ liệu, và số sector trên mỗi track cũng thay đổi tùy theo vị trí trên đĩa (các track ngoài dài hơn nên chứa được nhiều sector hơn các track bên trong).

Bài viết này mô tả một loạt microbenchmark nhằm trích xuất cấu trúc vật lý của ổ cứng cùng một số phép đo liên quan khác. Các phép đo này bao gồm:
  • Chu kỳ quay của đĩa
  • Vị trí vật lý của từng sector (góc và bán kính)
  • Ranh giới giữa các track
  • Độ lệch (skew)
  • Thời gian seek
  • Một số quan sát về các sector lỗi

Tôi sử dụng các microbenchmark này để phân tích nhiều loại ổ cứng khác nhau, từ mẫu dung lượng 45 MB (năm 1989) cho đến 5 TB (năm 2015).

Bài viết không tập trung vào việc đánh giá các khía cạnh hiệu năng quan trọng khác như bộ nhớ đệm (cache). Phần còn lại của bài viết sẽ bắt đầu bằng phần giới thiệu về cấu trúc hình học của ổ cứng, sau đó mô tả tập hợp các microbenchmark, bắt đầu từ phép đo thời gian truy cập đọc cơ bản và dần mở rộng tới các thuật toán phức tạp hơn. Phần thứ hai sẽ trình bày kết quả microbenchmark trên 17 ổ cứng được sử dụng trong thử nghiệm.


Cấu trúc hình học của ổ cứng​


Sector, track và cylinder. Cylinder là tập hợp tất cả các track ở cùng một bán kính (hình minh họa hiển thị 6 track trên hai mặt và ba platter).

chs.webp

Từ góc nhìn của phần mềm, ổ cứng trông giống như một khối lớn các sector, theo truyền thống mỗi sector có kích thước 512 byte (nay là 4.096 byte), với rất ít thông tin về vị trí vật lý của các sector. Ví dụ, một ổ cứng 300 GB có thể có 585.937.500 sector kích thước 512 byte, được đánh số từ 0 đến 585.937.499.

Một số giao tiếp ổ cứng đời đầu yêu cầu bộ điều khiển ổ đĩa trên máy tính chủ phải biết bố cục vật lý của ổ đĩa (vì bộ điều khiển gửi lệnh để di chuyển đầu đọc). Ổ cứng IDE (Integrated Drive Electronics - Điện tử ổ đĩa tích hợp, giữa những năm 1980) cuối cùng đã tích hợp bộ điều khiển ổ đĩa trực tiếp vào bên trong ổ.

Bộ điều khiển tích hợp sẽ chuyển đổi số sector logic (như phần mềm nhìn thấy) sang vị trí vật lý, tạo ra một giao diện dạng khối sector đơn giản cho máy tính chủ, đồng thời cho phép bố cục vật lý bên trong phức tạp hơn rất nhiều. Tuy nhiên, vì lý do tương thích phần mềm, số sector vẫn tiếp tục được mã hóa dưới dạng bộ ba CHS (ba con số nhưng không liên quan đến số lượng thực tế của cylinder, đầu đọc hoặc sector/track của ổ đĩa) trong nhiều năm sau đó, cho đến khi LBA (Logical Block Addressing - đánh địa chỉ khối logic, biểu diễn số sector bằng một con số duy nhất) trở nên phổ biến.

Mặc dù về mặt logic nó chỉ là một khối lớn các sector, nhưng các sector, track và head (hay bề mặt ghi) vẫn tồn tại về mặt vật lý. Chỉ là phần mềm không có cách đơn giản để nhận biết chúng.

Phần này đưa ra một số định nghĩa cơ bản cho những đặc điểm vật lý này. Nhiều độc giả có thể đã quen thuộc với chúng.

Sector​

Dữ liệu được lưu trữ thành các khối có kích thước bằng nhau. Sector là đơn vị dữ liệu nhỏ nhất có thể được đọc hoặc ghi trên ổ đĩa.
Sector kích thước 512 byte đã là tiêu chuẩn từ những năm 1980, trong khi các ổ đĩa mới hơn (khoảng năm 2011) sử dụng sector 4.096 byte, được quảng bá dưới tên gọi Advanced Format.
Sector có thêm siêu dữ liệu cũng được ghi lên bề mặt đĩa (chẳng hạn như số sector và mã sửa lỗi). Trên các ổ sử dụng embedded servo (tất cả các ổ không quá cổ), còn có các mẫu servo trên đĩa dùng để định vị đầu đọc.
Tất cả những dữ liệu này chiếm không gian trên bề mặt đĩa nhưng không hiển thị với máy tính chủ.

Track​


Track là một vòng tròn gồm các sector liên tiếp được đặt trên một bề mặt đĩa trong một vòng quay của đĩa.
Việc đọc các sector trong cùng một track được thực hiện bằng cách để đầu đọc đi theo track trong khi đĩa quay.
Việc vượt qua ranh giới của track yêu cầu phải di chuyển đầu đọc sang track kế tiếp (track-to-track seek) hoặc chuyển sang một đầu đọc khác để đọc track từ một bề mặt đĩa khác (head switch).
Trước khi có zone bit recording, mọi track trên ổ đĩa đều có cùng kích thước (số sector bằng nhau). Zone bit recording cho phép nhồi nhiều sector hơn vào các track ngoài dài hơn về mặt vật lý và ít sector hơn vào các track trong ngắn hơn.
Vì một track (bất kể độ dài) được đọc trong một vòng quay, nên ổ cứng có tốc độ truyền dữ liệu cao hơn ở phần đầu của ổ đĩa.
Kích thước track cũng có thể khác nhau giữa các bề mặt ghi, vì chất lượng của bề mặt ghi và đầu đọc khác nhau ngay cả trong cùng một ổ đĩa.
Ổ cứng (giống như đĩa mềm) sử dụng các track hình tròn đồng tâm, khác với CD và DVD vốn sử dụng một track xoắn ốc duy nhất.

Cylinder​


Cylinder là tập hợp các track trên nhiều bề mặt nằm ở cùng một bán kính (nếu track là một vòng tròn thì một chồng các vòng tròn cùng đường kính sẽ tạo thành một cylinder).
Trên các ổ đĩa cũ, các track trên các bề mặt khác nhau được căn chỉnh sao cho việc truy cập các track trong cùng một cylinder chỉ cần chuyển đầu đọc (một thao tác điện nhanh hơn) mà không cần di chuyển đầu đọc (một thao tác cơ học chậm hơn).
Cylinder không còn nhiều ý nghĩa trên các ổ đĩa hiện đại. Với mật độ track ngày càng tăng, các track trên những bề mặt ghi khác nhau không còn được căn chỉnh đủ chính xác để tạo thành cylinder, và việc chuyển đầu đọc cần một khoảng dịch chuyển lớn hơn so với việc di chuyển sang track kế cận trên cùng bề mặt, khiến việc chuyển đầu đọc chậm hơn việc chuyển sang track kế cận.

Zone​


Biểu đồ hiệu năng của ổ đĩa. Khoảng 20 zone có thể nhìn thấy. Các track ngoài có tốc độ truyền dữ liệu cao hơn các track trong và tốc độ truyền ổn định trong cùng một zone.
mk8034gsx-bench-360x256.png

Do các track ngoài dài hơn về mặt vật lý nên nhiều sector hơn có thể được nhồi vào các track ngoài so với các track trong.
Để đơn giản hóa, các track liền kề được nhóm thành các zone, trong đó mọi track trong cùng một zone có cùng kích thước (số sector trên mỗi track).
Zone bit recording tạo ra đường cong hiệu năng quen thuộc, trong đó các track ngoài có tốc độ cao hơn các track trong và tốc độ giảm theo từng bước rời rạc.
Theo cách hiểu truyền thống, zone được xem là nhóm các cylinder, trong đó mọi track trên mọi bề mặt trong zone đều có cùng kích thước.
Do kích thước track trên các ổ hiện đại có thể khác nhau giữa các bề mặt ghi, nên trên ổ đĩa hiện đại hợp lý hơn khi xem zone là một nhóm các track liền kề trên cùng một bề mặt ghi.

Độ lệch track (Track Skew)​


Bên trái: Không có độ lệch. Mọi track bắt đầu tại cùng một vị trí góc.
Bên phải: Độ lệch 72° (1/5 vòng quay). Sau khi hoàn thành một track, chỉ lãng phí 1/5 vòng quay nếu đầu đọc có thể di chuyển sang track kế tiếp trong khoảng thời gian đó.

skew.jpg

Truy cập tuần tự đọc một track trong một vòng quay hoàn chỉnh, di chuyển đầu đọc sang track kế tiếp rồi tiếp tục đọc trong vòng quay tiếp theo.
Nếu mọi track bắt đầu tại cùng một vị trí góc, thời gian khác không cần để di chuyển đầu đọc sang track kế tiếp sẽ khiến đầu đọc bỏ lỡ phần đầu của track tiếp theo vào lúc đầu đọc đến nơi, dẫn đến việc gần như phải lãng phí thêm một vòng quay hoàn chỉnh.

Để giảm thiểu điều này, mỗi track được đặt lệch sao cho nó bắt đầu muộn hơn một chút so với track trước đó, nhằm tạo đủ thời gian cho đầu đọc di chuyển từ cuối track trước sang đầu track kế tiếp trước khi sector đầu tiên của track mới đi qua dưới đầu đọc.
Với việc lựa chọn độ lệch phù hợp, chỉ một phần nhỏ của vòng quay bị lãng phí giữa các track.
Các ổ đĩa tôi thử nghiệm có độ lệch từ 6% đến 36% một vòng quay, cho thấy rằng các truy cập tuần tự thực tế dành 74–94% thời gian để đọc dữ liệu.

Bố cục track (Track layouts)​


layouts.webp

Bố cục track. Các bố cục “head-first” truyền thống sắp xếp các track thành các cylinder để việc truy cập tuần tự sẽ chuyển đầu đọc và truy cập tất cả các bề mặt trước khi di chuyển đầu đọc sang cylinder tiếp theo. Các bố cục “seek-first” mới hơn trước tiên di chuyển đầu đọc sang track kế cận trong một khoảng nhất định trước khi chuyển sang bề mặt tiếp theo. Còn có nhiều biến thể khác không được hiển thị ở đây.
Nếu một ổ cứng chỉ có một bề mặt ghi dữ liệu, có hai cách hợp lý để sắp xếp các track lên bề mặt đó: từ ngoài vào trong hoặc từ trong ra ngoài.

Khi một ổ đĩa có nhiều bề mặt ghi dữ liệu, có nhiều cách hơn nữa để sắp xếp các track trên các bề mặt. Các nghiên cứu trước đây đã đặt tên cho một số cách sắp xếp này [3,1], nhưng vẫn còn nhiều bố cục khác đang được sử dụng phổ biến. Tôi sẽ cố gắng mở rộng cách phân loại để bao quát nhiều bố cục phổ biến hơn.
Sau khi đặt track đầu tiên ở một vị trí nào đó trên đĩa (trên đường kính ngoài của đĩa), có hai chiến lược rõ ràng để đặt các track tiếp theo.
Các track tiếp theo có thể trước tiên được đặt trên các bề mặt ghi khác nhau tại cùng một bán kính (cylinder) trước khi seek sang bán kính tiếp theo, hoặc một nhóm track có thể được đặt trước trên cùng một bề mặt ghi trước khi chuyển sang các bề mặt khác.
Theo truyền thống (trên các ổ đĩa cũ), việc chuyển đầu đọc nhanh hơn di chuyển đầu đọc, vì vậy lựa chọn đầu tiên được sử dụng (các track liên tiếp sẽ chuyển đầu đọc trước khi thay đổi bán kính).
Trên các ổ đĩa mới hơn, nơi việc chuyển đầu đọc chậm hơn seek sang track kế cận, các nhóm track liên tiếp được đặt trên cùng một bề mặt trước khi chuyển sang bề mặt tiếp theo.

Lựa chọn này dẫn đến hai loại bố cục track, tôi gọi là:
  • Head-first (nhiều lần chuyển đầu đọc trước khi seek)
  • Seek-first (nhiều lần seek trước khi chuyển đầu đọc)
Có hai bố cục head-first được sử dụng phổ biến.

Một bố cục sẽ luân phiên qua tất cả các bề mặt theo cùng một thứ tự cho mỗi cylinder (forward, còn gọi là traditional), trong khi bố cục còn lại sẽ đảo ngược thứ tự các bề mặt cho mỗi cylinder (alternating, còn gọi là cylinder serpentine).

Theo tính đối xứng, có thêm hai bố cục tương tự sắp xếp cylinder từ trong ra ngoài, nhưng tôi chưa từng thấy chúng được sử dụng.

Các bố cục track kiểu seek-first sắp xếp các nhóm track trên cùng một bề mặt trước khi chuyển đầu đọc.

Kích thước nhóm thường nhỏ hơn nhiều so với toàn bộ bề mặt, thông thường vào khoảng vài trăm đến vài nghìn track, và kích thước nhóm thường khá đồng đều.

Nhóm các track này đôi khi còn được gọi là serpentine, xuất phát từ tên gọi của một trong các bố cục đó (surface serpentine).
Do sử dụng các serpentine (thay vì lấp đầy toàn bộ một bề mặt trước khi chuyển sang bề mặt khác), tồn tại bốn kiểu bố cục seek-first phổ biến.
Thứ nhất, các track trong serpentine có thể luôn được sắp xếp từ ngoài vào trong (forward seek direction), hoặc thứ tự này có thể bị đảo ngược trên các bề mặt xen kẽ (alternating seek direction: ngoài vào trong ở một bề mặt và trong ra ngoài ở bề mặt kế tiếp).

Cũng có thể tồn tại các bố cục sử dụng hướng seek ngược lại, nhưng tôi chưa từng quan sát thấy chúng.
Thứ hai, tương tự như các bố cục head-first, thứ tự sử dụng các bề mặt có thể lặp lại ở mỗi nhóm serpentine (forward surface order) hoặc đảo ngược sau mỗi nhóm (alternating surface order).

Hai đặc điểm này kết hợp với nhau tạo ra bốn lựa chọn.
Hai trong số bốn lựa chọn này đã được đặt tên trong các nghiên cứu trước:
  • alternating-forward còn được gọi là surface serpentine
  • forward-forward còn được gọi là hybrid serpentine
Cách phân loại này chưa đầy đủ.

Ví dụ, ổ Western Digital S25 sử dụng bố cục seek-first với hướng seek tiến, nhưng kích thước serpentine và trình tự các bề mặt không tuân theo một quy luật đều đặn.
Bố cục này không thể được phân loại vào bất kỳ kiểu nào trong sáu bố cục đã mô tả ở trên.

Các nghiên cứu trước đây (Prior Work)​


Đã có nhiều nỗ lực trước đây nhằm phân tích các đặc tính của ổ cứng bằng microbenchmark.
Bài viết này thực hiện thêm một nỗ lực khác bởi vì ổ cứng đã thay đổi theo thời gian và chưa có nghiên cứu nào cố gắng thực hiện các phép đo chi tiết trên nhiều ổ cứng thuộc nhiều thời kỳ khác nhau như vậy.
Nhiều nghiên cứu trước đây hướng tới các ứng dụng thực tế (thay vì chỉ xuất phát từ sự tò mò) và chấp nhận đánh đổi tốc độ đo lấy một chút suy giảm độ chính xác.

Bài viết này là nghiên cứu đầu tiên mà tôi biết cố gắng thực hiện các phép đo chi tiết như:
  • Vị trí góc của từng sector
  • Kích thước của từng track
  • Độ lệch của từng track trên ổ cứng
Mặc dù các thuật toán không khác biệt đáng kể về mặt nguyên lý, các nghiên cứu trước đây có thể đã tránh đi sâu vào các phép đo này vì chúng có thể mất nhiều giờ và mang lại ít lợi ích thực tế cho các ứng dụng như mô hình hóa hiệu năng hoặc cải thiện cách bố trí dữ liệu trong hệ thống tập tin.
Nhiều nghiên cứu trước đây sử dụng tập lệnh SCSI để thu thập thông tin [4,5].

Điều này bao gồm:
  • Sử dụng lệnh SCSI Send Diagnostic để chuyển đổi từ khối logic sang vị trí vật lý
  • Sử dụng lệnh Seek để đo thời gian seek (không phải thời gian truy cập)

Các phương pháp này không thể áp dụng chung cho các ổ ATA, đồng thời phụ thuộc vào việc ổ đĩa:
  • Có triển khai các lệnh này hay không
  • Có triển khai chính xác hay không
  • Có cung cấp thông tin chính xác hay không

Sự tồn tại và độ chính xác của các lệnh này không được đảm bảo vì chúng không thiết yếu cho hoạt động của ổ cứng — ổ đĩa chỉ cần hỗ trợ đọc và ghi.
Các microbenchmark chỉ sử dụng thao tác đọc hoặc ghi khó xây dựng hơn, nhưng tránh được nhiều hạn chế này.

Một số nỗ lực xây dựng microbenchmark kiểu “hộp đen” (black-box) đã tạo ra các thuật toán hoạt động tốt trên ổ đĩa ở thời điểm đó nhưng không còn hoạt động trên ổ cứng hiện đại [2].
Thuật toán Skippy đặc biệt giả định rằng ổ đĩa sử dụng bố cục track head-first truyền thống.
Các thuật toán được sử dụng trong nghiên cứu này giống nhất với thuật toán của Gim và Won [1].

Họ đã chỉ ra chính xác rằng các thuật toán trước đó thường không hoạt động với các bố cục seek-first mới hơn và đã mô tả các thuật toán phù hợp hơn.

Tuy nhiên, thuật toán của họ được tối ưu nhiều hơn cho tốc độ với đánh đổi là giảm độ chính xác, đồng thời chưa đủ ổn định để xử lý nhiều hành vi bất thường xuất hiện ở một số ổ đĩa.
Tôi đã quan sát được nhiều hành vi bất thường hơn do tập hợp ổ đĩa được thử nghiệm đa dạng hơn: 17 ổ cứng từ năm 1989 đến 2015, so với 4 ổ cứng từ khoảng năm 2006–2007 trong nghiên cứu trước đó.

Có thể đo được những gì?​


measure.png

Đo thời gian truy cập: Bắt đầu từ A rồi đọc B sẽ bao gồm thao tác tìm kiếm (seek), thời gian ổn định (settling time) sau khi đến track của B, sau đó chờ sector B quay đến dưới đầu đọc. Thời gian truy cập từ A đến B được xác định bởi góc giữa hai sector, cộng với 0 hoặc nhiều vòng quay đầy đủ. Việc đo thời gian truy cập cho phép đo chính xác góc giữa hai sector, nhưng không đo trực tiếp thời gian seek.

Nếu không có quyền truy cập nội bộ vào ổ đĩa, việc đo đạc chỉ có thể thực hiện bằng cách gửi lệnh và đo thời gian phản hồi của chúng. Công cụ cơ bản tôi sử dụng là đo độ trễ giữa hai lần đọc sector, với bộ nhớ đệm (cache) của ổ đĩa được tắt để các giá trị thời gian phản ánh đặc tính vật lý của ổ đĩa thay vì cache. Tôi không sử dụng thao tác ghi vì ghi dữ liệu sẽ phá hủy dữ liệu trên ổ, đồng thời cũng khó xác định chính xác thời điểm dữ liệu thực sự được ghi xuống bề mặt đĩa.

Khoảng thời gian giữa việc đọc hai sector phụ thuộc vào khoảng cách giữa chúng. Sau khi hoàn thành lần đọc sector đầu tiên (A), thời gian cho tới khi hoàn thành lần đọc thứ hai là thời gian cần để di chuyển đầu đọc đến track chứa sector thứ hai, chờ cho tới khi sector thứ hai đi đến dưới đầu đọc, rồi đọc sector đó (B). Một quan sát quan trọng là thời gian truy cập này chính là thời gian cần để đĩa quay qua góc giữa sector A và B, cộng với 0 hoặc nhiều vòng quay hoàn chỉnh. Điều này có nghĩa là nếu tôi biết thời gian quay một vòng của đĩa (có thể đo khá dễ dàng), tôi có thể đo với độ chính xác cao góc giữa bất kỳ hai sector nào (chính xác đến vài micro giây hoặc khoảng 0,1°). Điều này cũng đồng nghĩa việc tách riêng thành phần thời gian seek khỏi thời gian truy cập là khá khó khăn, vì seek time chỉ ảnh hưởng đến access time bằng cách quyết định cần thêm bao nhiêu vòng quay bổ sung.

Công cụ nền tảng này đo vị trí góc của các sector có thể được dùng để xây dựng nhiều phép đo khác.
  • RPM (số vòng quay/phút): Đọc lặp đi lặp lại cùng một sector (góc luôn chính xác là 360°). Mỗi lần đọc tương ứng với đúng một vòng quay của đĩa.
  • Vị trí góc (Angular position): Bằng cách đọc hai sector, thời gian giữa hai lần đọc (lấy modulo theo thời gian một vòng quay) sẽ cho biết vị trí góc của sector thứ hai so với sector đầu tiên. Điều này cho phép lập bản đồ vị trí góc của mọi sector trên đĩa, xác định nơi track bắt đầu và kết thúc, đồng thời quan sát độ lệch (skew) giữa các track (sự khác biệt về vị trí góc bắt đầu của các track liền kề).
  • Kích thước track: Vì có thể quan sát skew để tìm ranh giới giữa các track (track skew xảy ra tại ranh giới track), chúng ta có thể xác định kích thước của từng track cũng như vị trí của các vùng (zone — nhóm các track có cùng kích thước). Những thay đổi bất thường về kích thước track cũng có thể cho thấy các track có chứa sector lỗi.
  • Thời gian seek: Độ trễ (thời gian truy cập) giữa việc đọc một sector và một sector khác bằng tổng của thời gian seek (bao gồm cả thời gian ổn định) cộng với thời gian chờ sector mong muốn xuất hiện dưới đầu đọc (độ trễ quay — rotational latency). Để đo seek time, tìm kiếm các sector lân cận nhằm xác định sector tạo ra cực tiểu cục bộ của thời gian truy cập. Sector này là sector xuất hiện dưới đầu đọc ngay sau khi đầu đọc đến track mục tiêu (nếu sector xuất hiện sớm hơn, đầu đọc sẽ bỏ lỡ nó và phải chờ thêm một vòng quay hoàn chỉnh nữa). Đối với sector mục tiêu này, độ trễ quay gần như bằng 0, khiến thời gian truy cập xấp xỉ thời gian seek.
  • Đường cong seek (Seek profile): Biểu đồ thời gian seek từ một điểm tham chiếu (thường là sector 0) tới từng track trên đĩa được gọi là seek profile hoặc seek curve. Nếu giả định rằng khoảng cách di chuyển đầu đọc càng lớn thì thời gian càng dài, seek profile có thể tiết lộ cách các track được bố trí trên bề mặt đĩa, cũng như số lượng bề mặt ghi dữ liệu.
  • Số lượng bề mặt (Number of surfaces): Cuối cùng! Việc suy luận số lượng bề mặt về cơ bản đòi hỏi phải biết bố cục của các track.

Tóm tắt kết quả​


Bảng dưới đây tổng hợp các phép đo trên 17 mẫu ổ cứng mà tôi đã thử nghiệm. Các phần tiếp theo sẽ trình bày chi tiết hơn về từng chỉ số, cách chúng được đo và những quan sát chung liên quan đến từng chỉ số. Kết quả chi tiết của từng ổ đĩa được trình bày ở trang 2.

Ổ Toshiba DT01ACA300 và P300 có khả năng là cùng một mẫu ổ đĩa nhưng được gắn thương hiệu khác nhau, vì vậy các phép đo trên bốn ổ này có thể phần nào cho thấy mức độ khác biệt giữa các ổ cùng một model.


ModelCapacityRPMSector Size (bytes)Sectors/TrackTracksSurfacesSkew (°, rev.)Max. seek (ms)Avg. track pitch (nm)Track layout
Seagate ST-157A
3.5″, stepper
44.7 MB3602512263,360606340,000F or A
Maxtor 7405AV
3.5″
405 MB3548512123 – 667,998393° – 100°30.510,000AF or AA
Seagate Medalist ST ST51270A
3.5″
1.28 GB5371512145 – 7621,5994129°22.25200F
Seagate Medalist Pro ST39140A
3.5″
9.1 GB7209512297 – 16972,048885°18.33100F or A
Samsung SV0432D
3.5″
4.3 GB5399512403 – 23124,460260° (7/42 rev)19.42300F
Seagate ST1 ST650211CF
1″
5 GB3606.5512335 – 18337,7822109.3° (17/56 rev)
116.7° (18/56 rev)
26.3280(1)AF
Toshiba MK8034GSX 2.5″80 GB5399.8512891 – 429219,635351.8° (19/132 rev)19.1230AF
Hitachi Deskstar 7K80
3.5″
82 GB72015121170 – 573176,275267.3° (3/16 -0.0004 rev)25.7310A
Western Digital Caviar SE16 WD2500KS
3.5″
250 GB72045121116 – 630520,449640° (2/18 rev)17.4320AF
Seagate Barracuda 7200.9 ST3160811AS
3.5″
160 GB72035121452 – 638281,786255.7°24.1200FA
Seagate Barracuda 7200.11 ST3320613AS
3.5″
320 GB72045122464 – 1200329,853261.3° (1/6 + 0.004 rev)19.9170AA
Western Digital S25 WD3000BKHG
2.5″
300 GB9999.65121926 – 1117384,085324.4° (1/15 + 0.0009 rev)8.1100F*
Seagate Cheetah 15K.7 ST3450857SS
3.5″
450 GB15047.75121800 – 1028595,848623.8° (1/15 – 0.0006 rev)7.3150(2)AA
Samsung SpinPoint F3 HD103SJ 3.5″1 TB7247.15122937 – 1546854,135472° (1/5 rev)17.3130(3)FF
Hitachi 7K1000.C 3.5″1 TB7199.85122673 – 1350914,873453.3° (4/27 rev)15.2120AF
Toshiba DT01ACA300/P300 3.5″3 TB7219.1
7200.3
7200.0
7200.0
4096473 – 211
464 – 204
485 – 207
464 – 216
2,075,497
~2,098,859
2,070,465
2,076,586
637.2° (3/29 rev)21.0
21.1
20.9
20.9
80FF
Toshiba X300 HDWE150 3.5″5 TB7199.64096500 – 2293,279,5831022.5° (1/16 – 0.000008 rev)14.685AF

  1. Tài liệu hướng dẫn của dòng ổ cứng Seagate ST1 cho biết mật độ tối đa là 105.000 TPI (tracks per inch – số track trên mỗi inch), tương đương 242 nm cho mỗi track.
  2. Tài liệu hướng dẫn của Seagate Cheetah 15K.7 cho biết mật độ 165.000 TPI, tương đương 154 nm cho mỗi track.
  3. Tài liệu của HD103SJ cho biết mật độ 245.000 TPI, tương đương 104 nm cho mỗi track. Mẫu HD103SJ sau đó đã được đổi tên thành ST1000DM005 sau khi Seagate mua lại mảng kinh doanh ổ cứng của Samsung vào năm 2011.


Tốc độ quay (RPM)​


Tốc độ quay của đĩa được đo bằng cách liên tục đọc cùng một sector (sector 0). Nếu đối tượng đo là một ổ cứng quay (spinning hard disk), sector 0 sẽ được đọc chính xác một lần trong mỗi vòng quay. Phép thử này cũng được sử dụng để xác minh rằng bộ nhớ đệm (cache) của ổ đĩa đã bị vô hiệu hóa. Nếu cache được bật, các lần đọc sẽ lấy dữ liệu từ cache và diễn ra nhanh hơn rất nhiều.


Chi tiết triển khai​


Cache trên Maxtor 7405AV không thể bị vô hiệu hóa hoàn toàn, vì vậy các lần đọc lặp lại cùng một sector sẽ được xử lý bởi cache. May mắn là việc đọc một sector khác sẽ không bị cache trên ổ này, ngay cả khi sector đó nằm ngay sau lần đọc đầu tiên. Để khắc phục vấn đề này, thuật toán thực tế sẽ luân phiên đọc giữa sector 0 và sector 1.

Vị trí góc của sector (Sector Angular Position)​


Góc giữa bất kỳ hai sector nào có thể được đo bằng cách truy cập hai sector đó và đo khoảng thời gian giữa phản hồi của hai yêu cầu. Phương pháp này thường đạt độ chính xác tới vài micro giây (khoảng 0,1°), tuy nhiên độ chính xác còn phụ thuộc vào từng ổ đĩa.

Bất kỳ thời gian seek nào (hoặc biến động ngẫu nhiên của thời gian seek) chỉ ảnh hưởng đến việc liệu sector thứ hai có thể được đọc trong cùng một vòng quay hay không, hoặc cần thêm một hay nhiều vòng quay hoàn chỉnh nữa. Vì vậy, có thể loại bỏ hoàn toàn tác động của seek time bằng cách lấy phần dư sau khi chia khoảng thời gian đo được cho thời gian quay một vòng của đĩa.

Có thể tạo bản đồ vị trí góc của mọi sector trên (một vùng của) ổ đĩa bằng cách sử dụng một sector cố định (sector 0) làm điểm tham chiếu. Tuy nhiên, vì mỗi sector cần từ vài chục đến vài trăm phép đo, nên phương pháp này chỉ thực tế đối với những vùng nhỏ trên ổ đĩa.

Biểu đồ vị trí góc là một công cụ rất mạnh để phóng to và phân tích chi tiết các đặc điểm khác, chẳng hạn như quản lý sector lỗi (defect management).


x300-angpos-768x709.webp

Toshiba X300 5TB: Sơ đồ màu được chọn để làm nổi bật phần bắt đầu (xanh dương đậm) và kết thúc (vàng) của từng track. Hình này cho thấy độ lệch track (track skew) là 22,5°. Ngoài ra, hình cũng thể hiện một sự thay đổi vùng (zone change), từ 500 sector trên mỗi track xuống 460 sector trên mỗi track, kèm theo một độ lệch track bất thường tại ranh giới giữa hai vùng (zone boundary).

st1-angpos-768x709.webp

Seagate ST1 5GB: Có độ lệch track (track skew) khá lớn, lên tới 109,3°. Ngoài ra, có vẻ như tồn tại một khoảng trống tương đương một sector ở cuối mỗi track.

st157a-angpos-360x332.webp

Seagate ST-157A: Chỉ có 26 sector trên mỗi track và không có độ lệch track (skew). Khoảng cách giữa sector 25 và sector 0 có vẻ lớn hơn một chút so với khoảng cách giữa các sector khác.

Các biểu đồ phía trên là biểu đồ cực (polar plots) biểu diễn vị trí góc (thời gian tăng theo chiều ngược kim đồng hồ) và số track của từng sector, trong đó màu sắc của mỗi điểm thể hiện vị trí của sector bên trong track (màu tối là đầu track, trong khi màu vàng là gần cuối track). Sơ đồ màu này được chọn để dễ phân biệt phần đầu và cuối của mỗi track, giúp độ lệch track (track skew) hiện ra rõ ràng hơn.
Phương pháp xác định số track của từng sector sẽ được thảo luận trong phần xác định ranh giới track. Những biểu đồ này sử dụng thông tin ranh giới track cùng một khoảng trống ở trung tâm để hình ảnh trực quan hơn, nhưng không phải là yếu tố bắt buộc.
Nếu không có thông tin về ranh giới track, việc dùng số sector làm tọa độ bán kính cũng tạo ra biểu đồ có hình dạng tương tự, nhưng thay vì các vòng tròn đồng tâm sẽ xuất hiện một đường xoắn ốc lớn và một khoảng trống (track skew) ở cuối mỗi track.

Cùng tập dữ liệu này cũng có thể được biểu diễn trên hệ tọa độ Descartes (Cartesian), trong một số trường hợp sẽ dễ đọc hơn so với các biểu đồ cực ở đây.

Biểu đồ đầu tiên hiển thị các track từ 824 đến 844 trên Toshiba X300. Ổ đĩa này sử dụng track skew 22,5°: điểm bắt đầu của mỗi track xuất hiện muộn hơn khoảng 1/16 vòng quay (ngược chiều kim đồng hồ) so với điểm bắt đầu của track trước đó. Điều này cung cấp thêm thời gian (1/16 vòng quay) để đầu đọc di chuyển và ổn định trên track kế tiếp sau khi đọc xong một track trước khi bắt đầu đọc track tiếp theo.

Đối với truy cập tuần tự, ổ đĩa sẽ đọc được một track dữ liệu sau mỗi (1 + 1/16) vòng quay. Phần về track skew sẽ được phân tích chi tiết hơn ở các mục sau.
Biểu đồ này cũng cho thấy sự chuyển đổi đầu đọc/bề mặt (head/surface change) tại track 834, thể hiện bằng một độ lệch lớn bất thường. Biểu đồ hiển thị track 833 và 834 như các track logic liền kề, nhưng thực tế chúng nằm trên hai bề mặt khác nhau, và nhiều khả năng yêu cầu thao tác seek lớn hơn so với việc chuyển sang track liền kề trên cùng một bề mặt. Điều này giải thích cho độ lệch lớn hơn tại ranh giới kiểu serpentine.

Biểu đồ thứ hai thuộc về Seagate ST1, một ổ cứng 1 inch theo chuẩn CompactFlash. So với các ổ cứng máy tính để bàn và máy chủ, nó chỉ chạy ở 3600 RPM và vẫn sử dụng track skew lớn tới 109,3°.
Độ lệch lớn hơn nhiều này tạo ra một dạng hình ảnh khác biệt rõ rệt trong biểu đồ vị trí góc. Một quan sát thú vị là ST1 dường như có chính xác một sector trống ở cuối mỗi track. Tôi hiện chưa có giả thuyết nào về mục đích của khoảng trống này.

Biểu đồ thứ ba thuộc về Seagate ST-157A, một ổ cứng dung lượng 44,7 MB từ năm 1989, sử dụng cơ cấu truyền động bằng động cơ bước (stepper motor actuator).

Ổ này có track skew bằng 0° (hoặc chính xác hơn có thể xem là 360° track skew). Việc không sử dụng track skew có lẽ giúp giảm độ phức tạp của bộ điều khiển ổ đĩa — điều vốn là vấn đề đáng quan tâm hơn vào năm 1989.

Tuy nhiên, thời gian seek giữa các track liền kề lại khá lớn (thông số 8 ms, đo thực tế khoảng 10,8 ms bao gồm dưới 2,5 ms chi phí xử lý của bộ điều khiển), nên track skew cần phải lớn hơn 75% một vòng quay (270°) mới đủ hiệu quả. Vì vậy, lợi ích hiệu năng tiềm năng khi dùng skew khác 0° có lẽ chỉ ở mức khá nhỏ (tăng khoảng 10–15% thông lượng đọc tuần tự).

Một điểm đáng chú ý khác là khoảng cách giữa sector 25 và sector 0 có vẻ hơi lớn hơn khoảng cách giữa các sector liền kề khác.

Chi tiết triển khai​

--angpos reference,start,step,end,error
(Ví dụ: --angpos 0,0,1,10000,10)

  • reference: sector tham chiếu
  • start: sector bắt đầu
  • step: bước nhảy sector
  • end: sector kết thúc
  • error: sai số chuẩn trung bình tối đa (độ lệch chuẩn chia cho căn bậc hai của số mẫu), tính bằng micro giây
Sử dụng sector tham chiếu được chỉ định, chương trình sẽ báo cáo vị trí góc của mỗi sector cách nhau một khoảng step, từ start (bao gồm) đến end (không bao gồm), và lấy đủ số mẫu sao cho sai số chuẩn trung bình thấp hơn giá trị error.
Thuật toán sử dụng trung bình của nhiều mẫu đo để cải thiện độ chính xác. Việc lấy mẫu tiếp tục cho tới khi sai số chuẩn thấp hơn ngưỡng do người dùng chỉ định. Có thể đánh đổi giữa độ chính xác và thời gian chạy bằng cách thay đổi mức độ chính xác mong muốn.

Ngoài ra còn có một cơ chế tối ưu tốc độ.

Thuật toán cơ bản chỉ có thể thực hiện tối đa một phép đo trong mỗi vòng quay, tùy theo khoảng cách giữa hai sector, bằng cách truy cập sector nguồn và sector đích rồi quay trở lại sector nguồn trong cùng một vòng quay.

Thuật toán cải tiến cố gắng sử dụng hai vòng quay cho mỗi lần lặp, bằng cách:
  1. Truy cập sector nguồn
  2. Cố gắng lấy nhiều mẫu nhất có thể (sector đích và các sector phía sau)
  3. Quay lại sector nguồn sau hai vòng quay để bắt đầu vòng lặp kế tiếp
Phương pháp này thường có thể thu được 10–15 mẫu trong hai vòng quay, mang lại mức tăng tốc khoảng 5–7 lần so với thuật toán cơ bản.
Cho phép nhiều vòng quay hơn trong mỗi lần lặp sẽ tiếp tục tăng hiệu quả (nhưng với lợi ích giảm dần), đồng thời độ chính xác có thể giảm do bất kỳ sai số nào trong việc ước tính thời gian quay của đĩa sẽ bị nhân lên theo số vòng quay.


Thời gian truy cập​


Thời gian truy cập là thời gian để di chuyển đầu đọc và đọc một sector, bao gồm cả thời gian tìm kiếm (seek time) và độ trễ quay (rotational latency). Thuật toán này đo thời gian truy cập giữa một cặp sector. Nó rất giống với thuật toán dùng để đo vị trí góc, ngoại trừ việc thời gian đo được không được chia cho thời gian của một vòng quay. Tôi thường cố định sector 0 làm sector tham chiếu, sau đó đo thời gian truy cập từ sector tham chiếu đến các sector khác nằm xung quanh đĩa. Thuật toán này không có gì đặc biệt mới mẻ, nhưng nó tạo ra những biểu đồ thú vị khi dữ liệu này được biểu diễn trong hệ tọa độ cực. Những biểu đồ này rất giống với biểu đồ vị trí góc (vị trí các điểm dữ liệu thực tế hoàn toàn giống nhau), nhưng sử dụng một sơ đồ màu khác. Những biểu đồ này cung cấp cách trực quan hóa phần diện tích của đĩa có thể truy cập được trong một khoảng thời gian nhất định.

hd103sj-access-0-768x709.jpg

Samsung HD103SJ: Sector xa nhất nằm cách hơn 3 vòng quay một chút.

hd103sj-access-middle-768x709.jpg

Samsung HD103SJ, thời gian truy cập từ vùng giữa của đĩa: Sector xa nhất nằm cách khoảng 2,5 vòng quay.

Phía trên là hai biểu đồ thời gian truy cập từ cùng một ổ cứng Samsung SpinPoint F3 1TB, thể hiện thời gian truy cập từ một sector tham chiếu đến các vị trí khác trên toàn bộ ổ đĩa (track 0 đến 854133). Biểu đồ này đo một điểm dữ liệu sau mỗi vài nghìn sector trên tổng số 1,95 tỷ sector của ổ đĩa. Trong biểu đồ đầu tiên, sector tham chiếu (điểm bắt đầu) là sector 0 ở đầu ổ đĩa, nằm tại góc = 0 (phía ngoài cùng bên phải) của biểu đồ. Biểu đồ thứ hai sử dụng sector 976762583 (giữa ổ đĩa theo số lượng sector), và sector tham chiếu cũng được hiển thị tại góc 0.

Hiệu ứng xoáy màu cho thấy trực quan rằng thời gian truy cập chủ yếu được quyết định bởi vị trí góc của sector đích, trong khi thời gian tìm kiếm (seek time) quyết định số vòng quay bổ sung cần thiết để tới được sector đó. Bắt đầu từ sector tham chiếu 0 (bên phải (góc = 0), track ngoài cùng (track 0)), biểu đồ cho thấy đầu đọc đĩa chỉ có thể tới được một nhóm rất nhỏ các track ngoài trong vòng nửa vòng quay, đạt khoảng 19% số track sau một vòng quay đầy đủ, và tới được track trong cùng ở mức chỉ hơn hai vòng quay một chút. Trong trường hợp xấu nhất, một số sector trên track trong cùng cần chờ thêm một vòng độ trễ quay (rotational latency) sau khi đầu đọc tới nơi mới có thể truy cập được, vì vậy thời gian truy cập tệ nhất vào khoảng 3,09 vòng quay.

Trong biểu đồ thứ hai, nơi thao tác seek bắt đầu từ giữa ổ đĩa (tính theo số lượng sector chứ không phải theo đường kính vật lý), ta thấy mô hình tương tự. Bắt đầu từ giữa ổ đĩa, khoảng cách seek xa nhất chỉ bằng khoảng một nửa so với biểu đồ đầu tiên, nên thời gian truy cập tệ nhất cũng thấp hơn. Thời gian truy cập tới track trong cùng dài hơn một chút (~2,47 vòng quay) so với track ngoài cùng (~2,42 vòng quay), bởi vì vị trí giữa ổ đĩa tính theo số lượng sector thực tế nằm gần phía ngoài hơn về khoảng cách vật lý (theo số thứ tự track). Các track ngoài lưu trữ được nhiều dữ liệu hơn nhờ kỹ thuật ghi vùng (Zone Bit Recording).

Chi tiết triển khai​

--access reference,start,step,end,error (Ví dụ: --access 0,0,1,-1,30)

Reference, start, step và end là số sector. Error là sai số chuẩn tối đa tính bằng micro giây. Sử dụng sector tham chiếu được chỉ định, chương trình sẽ báo cáo thời gian truy cập đến mỗi bước sector từ start (bao gồm) đến end (không bao gồm), đồng thời lấy đủ số mẫu để sai số chuẩn của giá trị trung bình nhỏ hơn giá trị error đã đặt.

Trong triển khai hiện tại, yêu cầu đọc thứ hai chỉ được gửi sau khi yêu cầu đầu tiên hoàn tất, do đó phép đo bao gồm cả độ trễ của hệ điều hành và bộ điều khiển ổ đĩa. Nếu mục tiêu là chỉ đo hiệu năng cơ học của ổ đĩa nhằm thu được kết quả chính xác hơn đối với các truy cập khoảng cách ngắn và nhanh, có thể đáng để thử gửi cả hai yêu cầu cùng lúc để cả hai thao tác đọc được thực hiện mà không cần trả dữ liệu đọc đầu tiên về chương trình benchmark trước. Tuy nhiên, điều này sẽ làm tăng độ phức tạp của benchmark (cần sử dụng I/O bất đồng bộ và theo dõi thời gian phản hồi của từng yêu cầu riêng biệt), đồng thời có thể phải xử lý việc sắp xếp lại yêu cầu do bộ lập lịch của hệ điều hành hoặc bộ điều khiển ổ đĩa thực hiện (SATA NCQ hoặc SCSI TCQ).

Do thời gian tuyệt đối (không lấy modulo theo thời gian của một vòng quay) được đo, thuật toán không thể lấy nhiều mẫu trong mỗi vòng quay như cách thực hiện với phép đo vị trí góc, và bị giới hạn tối đa ở một mẫu trên mỗi vòng quay. Kết quả là việc đo thời gian truy cập mất nhiều thời gian hơn vài lần so với việc đo vị trí góc.


Short stroking​


Quan sát hai biểu đồ thời gian truy cập phía trên cho thấy vì sao việc short stroking ổ đĩa chỉ mang lại mức giảm thời gian truy cập khá khiêm tốn. Short stroking là phương pháp chỉ sử dụng một phần nhỏ dung lượng của ổ cứng để dữ liệu được giới hạn trong một khu vực nhỏ (thường là phần ngoài của ổ đĩa), nhằm giảm khoảng cách seek tệ nhất và tránh sử dụng các track phía trong có tốc độ truyền thấp hơn (các track trong có ít sector trên mỗi vòng quay hơn).

Một phần đáng kể của thời gian seek được tiêu tốn ở giai đoạn đầu và cuối của quá trình di chuyển đầu đọc, ngay cả với các thao tác seek ngắn, do đầu đọc cần thời gian để tăng tốc, giảm tốc và ổn định vị trí. Việc giảm một nửa khoảng cách seek chỉ giúp giảm thời gian truy cập tệ nhất khoảng 22% (từ 3,09 xuống 2,42 vòng quay, tương đương từ 25,6 ms xuống 20,0 ms). Short stroking thực tế không làm thay đổi thời gian seek, mà chỉ loại bỏ một số thao tác seek khoảng cách dài khỏi tập hợp được tính trung bình.

Để đầy đủ hơn, tôi đã đo thời gian truy cập trung bình cho các truy cập ngẫu nhiên khi các truy cập này bị giới hạn trong một phần nhất định của ổ đĩa. Biểu đồ bên dưới thể hiện số lần đọc mỗi giây (IOPS), là giá trị nghịch đảo của thời gian truy cập khi không có truy cập song song (không có hàng đợi). Giá trị IOPS tăng lên khi chỉ sử dụng một phần nhỏ hơn của ổ đĩa.

hd103sj-shortstroke.png

Việc short stroking ổ cứng mang lại mức cải thiện hiệu năng tương đối khiêm tốn, đổi lại phải đánh đổi bằng việc hy sinh một lượng lớn dung lượng lưu trữ.

Biểu đồ thể hiện hai kịch bản: một trường hợp vùng sử dụng nằm ở phần đầu ổ đĩa (trường hợp phổ biến khi áp dụng short stroking vì phần đầu ổ đĩa nhanh hơn), và trường hợp còn lại vùng sử dụng nằm ở cuối ổ đĩa (khu vực chậm nhất). Do thời gian seek có tính phi tuyến rất cao theo khoảng cách (ngay cả các thao tác seek ngắn vẫn tốn nhiều thời gian), mức cải thiện IOPS ngẫu nhiên là khá nhỏ trừ khi chỉ sử dụng một phần cực nhỏ của ổ đĩa. Ví dụ, khi sử dụng phần đầu của ổ đĩa, IOPS tăng khoảng 20% khi sử dụng một nửa dung lượng ổ, tăng 55% khi chỉ sử dụng 10% dung lượng, và tăng gấp đôi khi chỉ sử dụng 0,07% dung lượng ổ đĩa.

Hiện nay, khi các ổ lưu trữ thể rắn dựa trên bộ nhớ flash (SSD) đã trở nên phổ biến, việc áp dụng short stroking trên ổ cứng để tăng hiệu năng không còn nhiều ý nghĩa. Tính đến tháng 7 năm 2019, một SSD phân khúc thấp có giá trên mỗi đơn vị dung lượng cao hơn khoảng 3–4 lần so với ổ cứng truyền thống, nhưng cung cấp IOPS ngẫu nhiên cao hơn khoảng 500 lần và băng thông tuần tự cao gấp đôi.

Chi tiết triển khai​

--random-access start,end,iterations(Ví dụ: --random-access 0,-1,5000)

Start và end là số sector. Tùy chọn này đo thời gian truy cập trung bình khi thực hiện iterations lần truy cập ngẫu nhiên trong vùng từ start (bao gồm) đến end (không bao gồm).
Thuật toán sẽ đọc các sector ngẫu nhiên. Nó đo thời gian truy cập (access time) chứ không phải thời gian seek (seek time). Thời gian truy cập bao gồm thời gian seek, độ trễ quay (trung bình bằng một nửa chu kỳ quay), và chi phí phát sinh từ bộ điều khiển/phần mềm (thường vào khoảng vài trăm micro giây).


Seek Time​

p300-seek-768x576.png

Thời gian seek của Toshiba P300 theo số lượng track.

Thời gian seek (Seek Time) là khoảng thời gian cần để đầu đọc của ổ đĩa di chuyển đến track đích, nhưng không bao gồm độ trễ quay (rotational latency) cần để chờ sector mục tiêu quay tới vị trí bên dưới đầu đọc. Tôi tính cả thời gian ổn định đầu đọc (head settling time) vào thời gian seek vì quá trình ổn định thực chất chỉ là giai đoạn tinh chỉnh cuối cùng ở tốc độ thấp của thao tác seek, và không có cách nào để đo riêng thời gian ổn định khỏi thời gian seek.

Thời gian seek cung cấp thông tin về vị trí hướng tâm của một track trên đĩa. Các thao tác seek có khoảng cách vật lý dài hơn thường mất nhiều thời gian hơn so với các thao tác seek ngắn hơn, vì vậy thời gian seek có thể được sử dụng để xác định track nào nằm gần hơn về mặt vật lý so với một vị trí tham chiếu. Tôi thường sử dụng sector 0 ở mép ngoài cùng làm sector tham chiếu.

Mặc dù việc đo thời gian truy cập (access time) khá đơn giản, việc đo thời gian seek lại đòi hỏi phải tìm ra sector trên track đích có thời gian truy cập thấp nhất (gần như không có độ trễ quay). Nisha và cộng sự [2] mô tả một thuật toán đo thời gian truy cập giữa một sector và nhiều sector gần mục tiêu seek, sau đó chọn giá trị nhỏ nhất. Thuật toán của tôi cải thiện tốc độ bằng cách sử dụng phương pháp tìm kiếm logarit để xác định sector có thời gian truy cập tối thiểu, bắt đầu bằng các bước lớn rồi giảm dần theo cấp số mũ (thời gian chạy tăng theo logarit của số sector trên mỗi track thay vì tăng tuyến tính). Điều này đặc biệt quan trọng khi ổ đĩa có nhiều sector trên mỗi track. Tôi đã thử nghiệm với các ổ đĩa có tới 2937 sector mỗi track, trong khi Nisha và cộng sự chỉ thử nghiệm tới 356 sector.

Biểu đồ hồ sơ seek (seek time profile) thường được vẽ với thời gian seek trên trục dọc và khoảng cách seek (số lượng track) trên trục ngang. Hình minh họa bên phải cho thấy một ví dụ từ ổ cứng Toshiba P300 3TB. Thời gian seek tăng gần như tuyến tính theo khoảng cách đối với các thao tác seek dài (khi thời gian seek chủ yếu bị chi phối bởi việc đầu đọc di chuyển ở tốc độ cao gần như không đổi), và có tính phi tuyến đối với các thao tác seek ngắn (chủ yếu bị chi phối bởi quá trình tăng tốc, giảm tốc và thời gian ổn định đầu đọc).
Một cách khác để hình dung đường cong thời gian seek là xem nó như ranh giới phân chia các vùng màu trong biểu đồ thời gian truy cập. Thời gian seek chính là thời gian truy cập của tập hợp các sector có độ trễ quay gần bằng 0, tức là các sector nằm trên ranh giới giữa trường hợp “sector xuất hiện ngay khi đầu đọc vừa tới nơi” và trường hợp “sector xuất hiện chậm hơn một chút sau khi đầu đọc tới nơi và cần chờ thêm một vòng quay”.


Anh-man-hinh-2026-05-16-luc-14.38.03.webp

Biểu đồ cực thời gian truy cập (Toshiba DT01ACA300).
Anh-man-hinh-2026-05-16-luc-14.38.20.webp

Seek profile plotted on a polar axis. A seek profile is equivalent to finding the boundary between colour regions in the acess time plot.
Để minh họa điều này, hai biểu đồ cực ở bên trên thể hiện hồ sơ seek và các điểm dữ liệu thời gian truy cập của cùng một ổ đĩa trên cùng một hệ tọa độ cực để so sánh. Tuy nhiên, hồ sơ seek thường hữu ích hơn khi được hiển thị bằng hệ tọa độ Descartes (cartesian).

hd103sj-seek.png

Samsung F3. Ngay cả khi thu nhỏ hoàn toàn, vẫn có thể nhìn thấy bốn bề mặt ghi dữ liệu.

wd3000-seek.png

Western Digital S25: Hồ sơ seek có đặc điểm bất thường, cho thấy tồn tại một cách ánh xạ kỳ lạ giữa số thứ tự track và vị trí vật lý. Cách ánh xạ này có vẻ khá không đều và thiếu quy luật.


Hai biểu đồ trên là ví dụ về các hồ sơ thời gian seek phức tạp hơn một chút. Các biểu đồ thời gian seek của Samsung HD103SJ và WD3000BKHG không mượt ngay cả khi thu nhỏ toàn bộ biểu đồ.

Các mẫu hình này cho thấy rằng các track không được sắp xếp hoàn toàn theo thứ tự từ đường kính ngoài vào đường kính trong, mà tồn tại một số track logic ở phía sau lại nằm gần phía ngoài hơn về mặt vật lý (thời gian seek thấp hơn) so với một số track logic phía trước (thời gian seek cao hơn).

Những mẫu hình này cung cấp thông tin về cách bố trí các track, nội dung mà chúng ta sẽ xem xét trong phần bố cục track (track layout).


Chi tiết triển khai​

hd103sj-seeksearch.png

Thời gian truy cập của một sector phụ thuộc vào vị trí góc của nó. Thuật toán dùng để xác định thời gian seek sẽ tìm kiếm các sector lân cận nằm trước đó nhằm xác định một sector cực tiểu cục bộ có độ trễ quay gần bằng 0.


--seek-track reference,start,step,end (Ví dụ: --seek-track 0,0,1,-1)
Reference, start, step và end là các số sector.

Thời gian seek là thời gian truy cập của sector trên track đích có thời gian truy cập thấp nhất (độ trễ quay gần bằng 0). Thuật toán này bắt đầu bằng cách đo thời gian truy cập (bao gồm cả độ trễ quay) tới một sector đích bất kỳ. Sau đó nó đo thời gian truy cập của một sector nằm trước đó, được chọn sao cho nhiều khả năng vẫn nằm trên cùng track nhưng có độ trễ quay thấp hơn. Quá trình này được lặp lại cho đến khi thời gian truy cập tăng đột ngột, hiện tượng xảy ra khi sector đích xuất hiện quá sớm dưới đầu đọc và hệ thống phải chờ thêm một vòng quay đầy đủ nữa.

Sau đó, kích thước bước tìm kiếm sẽ được giảm đi một nửa và quá trình được lặp lại cho tới khi tìm được sector có thời gian truy cập nhỏ nhất.

Có một trường hợp phổ biến khiến quá trình tìm kiếm thất bại: nếu sector tối ưu thực sự nằm trong vùng track skew (được đánh dấu là “Not seek time” tại sector 102345 trong hình minh họa). Khi điều này xảy ra, thuật toán sẽ kết luận rằng sector đầu tiên của track hiện tại có thời gian truy cập thấp nhất, nhưng thực tế nó vẫn có độ trễ quay khác 0 do tồn tại khoảng cách vật lý giữa sector cuối của track trước và sector đầu của track hiện tại (track skew).

Để giảm ảnh hưởng của vấn đề này, phần triển khai hiện tại cố gắng tìm kiếm thêm trên hai track liền kề trước khi đưa ra kết quả thời gian seek.

Tương tự như phép đo thời gian truy cập, phép đo thời gian seek gửi các yêu cầu đọc theo kiểu tuần tự, do đó kết quả cũng bao gồm phần chi phí phát sinh từ hệ điều hành và bộ điều khiển ổ đĩa.

Cả tập lệnh SCSI và ATA đều chứa lệnh Seek, vốn có thể cung cấp cách đo thời gian seek trực tiếp hơn. Tuy nhiên, tôi chưa thử sử dụng phương pháp này. Lệnh này đã được đánh dấu là “obsolete” (lỗi thời) trong SCSI, còn đối với ATA thì tôi không rõ trạng thái hiện tại của nó, cũng như không rõ mức độ các lệnh này được triển khai đáng tin cậy trên các ổ cứng khác nhau ra sao. (Ví dụ: tài liệu của ổ Cheetah 15K.7 cho biết cả lệnh SeekSeek Extended đều được hỗ trợ.)


Acoustic Management​

Automatic Acoustic Management (AAM) là một phương pháp cho phép người dùng giảm tiếng ồn phát ra từ ổ cứng để đổi lấy việc giảm hiệu năng. Vì phần lớn tiếng ồn xuất phát từ việc đầu đọc di chuyển trong quá trình seek, AAM về bản chất sẽ làm chậm các thao tác seek (tăng thời gian seek) nhằm giảm tiếng ồn.

Tính năng này xuất hiện trong chuẩn ATA-6 (năm 2002) [6], nhưng có vẻ không được triển khai trên nhiều ổ đĩa (đặc biệt là các mẫu mới hơn).

Nhờ khả năng đo thời gian seek, chúng ta có thể quan sát tác động của chế độ AAM yên tĩnh (quiet mode) đối với quá trình seek. Các biểu đồ cho thấy hồ sơ seek ở cả chế độ nhanh (fast, mặc định, màu xanh) và chế độ yên tĩnh (quiet, màu cam).
Đối với ổ WD SE16, chế độ yên tĩnh làm tăng thời gian seek tối đa lên 55%, từ 17,4 ms lên 27,1 ms. Với Samsung F3, mức tăng là 21%, từ 17,3 ms lên 21,0 ms.

Nếu phóng to phần đầu ổ đĩa, ta có thể thấy thời gian seek đối với các thao tác seek ngắn (dưới 2,2 ms với WD S25 và dưới 2,0 ms với Samsung F3) không bị ảnh hưởng.

Điều này khá hợp lý: các thao tác seek ngắn vốn đã ít gây tiếng ồn ngay cả ở công suất tối đa, và các thao tác seek giữa các track liền kề không thể bị làm chậm hơn, bởi nếu một thao tác seek giữa hai track kề nhau mất nhiều thời gian hơn khoảng track skew, tốc độ truyền tuần tự sẽ bị giảm xuống còn một nửa.

wd2500ks-acoustic-all.png

WD S25: Thời gian truy cập toàn hành trình (full-stroke seek) tăng từ 17,4 ms lên 27,1 ms ở chế độ yên tĩnh (quiet mode).\

wd2500ks-acoustic-1600.png

WD S25: Thời gian tìm kiếm đối với các thao tác truy cập khoảng cách ngắn (< 2,2 ms) không bị ảnh hưởng.

hd103sj-acoustic-all.webp

Samsung F3: Thời gian truy cập toàn hành trình (full-stroke seek) tăng từ 17,3 ms lên 21,0 ms ở chế độ yên tĩnh (quiet mode).

hd103sj-acoustic-400.png

Samsung F3: Thời gian tìm kiếm đối với các thao tác truy cập khoảng cách ngắn (< 2 ms) không bị ảnh hưởng.

Ranh giới Track (Track Boundaries)​


Việc xác định ranh giới track nghĩa là tìm số sector của sector đầu tiên trên mỗi track. Thiết kế một thuật toán để tìm chúng một cách đáng tin cậy lại khó hơn tưởng tượng khá nhiều.
Một track là một nhóm các sector liên tiếp kéo dài quanh một vòng quay của đĩa, được ngăn cách bởi track skew (độ lệch giữa các track). Thuật toán xác định ranh giới track bằng cách tìm kiếm track skew, tức là một sự thay đổi lớn bất thường về vị trí góc giữa hai sector liền kề hoặc gần nhau.
Tôi sẽ để phần thảo luận về nhiều trường hợp khiến thuật toán này có thể hoạt động sai ở phần Chi tiết triển khai (Implementation Details) bên dưới.


mk8034gsx-tracksize.png

Toshiba MK8034GSX: track sizes

mk8034gsx-bench.png

Kết quả đo hiệu năng tốc độ truyền dữ liệu của ổ đĩa Toshiba MK8034GSX. Tốc độ truyền dữ liệu (throughput) tỷ lệ thuận với kích thước của track (nếu track skew không đổi).

Số lượng sector trên mỗi track tỷ lệ thuận với tốc độ truyền dữ liệu tuần tự (sequential throughput) của ổ đĩa. Ổ cứng quay với tốc độ góc không đổi, vì vậy tốc độ truyền dữ liệu tuần tự sẽ thay đổi tùy theo lượng dữ liệu được đọc trong mỗi vòng quay.
Trong quá trình truy cập tuần tự, ổ đĩa đọc một track sector sau mỗi (1 + skew) vòng quay, do đó tốc độ truyền dữ liệu tuần tự có thể được tính toán chính xác dựa trên kích thước track, tốc độ quay RPM và track skew.
Các nghiên cứu trước đây thậm chí đã sử dụng mối quan hệ này theo chiều ngược lại để tính gần đúng kích thước track bằng cách đo tốc độ truyền dữ liệu tuần tự
Hai hình phía trên cho thấy sự so sánh giữa kích thước track và kết quả đo hiệu năng tốc độ truyền dữ liệu của cùng một ổ cứng (Toshiba MK8034GSX), cho thấy hai biểu đồ này có hình dạng rất tương đồng.


wd3000-tracksize.png

Western Digital S25 300GB: Kích thước track giảm dần một cách đơn điệu (ngoại trừ các khu vực có lỗi/khuyết tật).

hd103sj-tracksize.png

Samsung HD103SJ 1TB: Ổ đĩa này chuyển đổi đầu đọc/bề mặt đĩa (heads/surfaces) tương đối ít.

p300-tracksize.png

Toshiba P300 3TB: Khu vực gần track 140.000 là vùng có nhiều sector lỗi, khiến kích thước track bị giảm xuống.

x300-tracksize.png

Toshiba X300 5TB.
Tất cả các ổ cứng hiện đại đều sử dụng công nghệ Zone Bit Recording (ZBR), do đó các track ở phần đầu (vòng ngoài) sẽ chứa nhiều sector hơn các track ở phía sau (vòng trong). Tuy nhiên, chuỗi này thường không giảm hoàn toàn theo một đường đơn điệu, vì số lượng sector trên mỗi track thường khác nhau giữa các bề mặt ghi dữ liệu (recording surface), khiến kích thước track thay đổi tùy theo cách các track được sắp xếp trên các bề mặt đó.

Đối với Toshiba P300 và X300, biểu đồ trông như được tô bóng vì kích thước track thay đổi rất thường xuyên giữa nhiều giá trị khác nhau, phụ thuộc vào bề mặt mà track được đặt trên đó. Trong khi đó, Samsung HD103SJ chuyển đổi giữa các bề mặt ít thường xuyên hơn nhiều.
Mặc dù kích thước track của MK8034GSX và WD S25 đều giảm dần theo dạng đơn điệu, nhưng cách hoạt động của chúng thực tế lại khá khác nhau.
MK8034GSX sử dụng bố cục kiểu surface serpentine layout (kiểu seek-first AF, với việc chuyển đầu đọc sau khoảng 115 track), nhưng kích thước track trên mọi bề mặt đều giống nhau, nên đường cong kích thước track giảm đều.

Trong khi đó, WD S25 lại sử dụng kích thước track khác nhau trên từng bề mặt, nhưng các track được sắp xếp theo thứ tự giảm dần về kích thước thay vì theo vị trí vật lý. Kết quả là biểu đồ kích thước track vẫn giảm dần theo dạng đơn điệu, nhưng kích thước kiểu serpentine lại rất không đều, dẫn tới hồ sơ thời gian seek (seek profile) bất thường. Nội dung này sẽ được thảo luận chi tiết hơn ở phần đo đạc bố cục track.

Trong các biểu đồ phía trên, trục x sử dụng đơn vị số track (không phải số sector). Nếu mật độ track là hằng số, số track sẽ có quan hệ tuyến tính với bán kính vật lý của track. Ngoài ra, nếu mật độ bit tuyến tính trên toàn bộ đĩa là như nhau, kích thước track sẽ tỷ lệ thuận với chiều dài (và đồng thời là bán kính) của track.

Nếu hai giả định trên đều đúng, ta sẽ kỳ vọng biểu đồ kích thước track theo số track là một đường thẳng. Tuy nhiên gần như tất cả các ổ cứng đều cho thấy một đường cong hơi lồi nhẹ. Tại sao?
Giả thuyết của tôi là điều này liên quan đến góc của đầu đọc so với track (có phần gây nhầm lẫn khi cũng được gọi là skew angle).

Ở khu vực giữa của đĩa (thường là các track trung tâm), đầu đọc được thiết kế để thẳng hàng với track. Nhưng ở các vị trí gần mép trong (ID – Inner Diameter) và mép ngoài (OD – Outer Diameter), đầu đọc sẽ bị xoay lệch so với track (do đầu đọc được gắn trên một cánh tay quay). Điều này khiến mật độ bit đạt được thấp hơn tại vùng ID và OD.
Cordle cùng cộng sự [7] báo cáo rằng khả năng mật độ lưu trữ theo diện tích (Areal Density Capability – ADC) giảm khoảng 8–10% ở cả ID và OD so với khu vực giữa của đĩa đối với ổ sử dụng công nghệ PMR (Perpendicular Magnetic Recording – ghi từ vuông góc). Điều này khá phù hợp với hình dạng đường cong kích thước track được quan sát ở đây.

(PMR đã được sử dụng trên phần lớn ổ cứng từ khoảng năm 2006 cho đến nay, trong khi HAMR (Heat-Assisted Magnetic Recording – ghi từ hỗ trợ nhiệt) vẫn đang được xem là công nghệ “sắp xuất hiện”.)


Chi tiết triển khai (Implementation Details)​


--track-bounds 0,-1
--track-bounds-fast 0,-1

Trong trường hợp đơn giản nhất, một track bao gồm một nhóm các sector liên tiếp, được ngăn cách bởi track skew. Vì vậy, ta có thể phát hiện ranh giới track bằng cách tìm vị trí của skew (sự thay đổi bất thường về vị trí góc giữa hai sector gần nhau). Ta cũng có thể giả định rằng kích thước các track thường tương đối giống nhau (các track liền kề chỉ khác nhau tối đa vài chục phần trăm).
Tuy nhiên, đáng tiếc là những giả định này lại không đúng một cách nhất quán trên mọi ổ cứng và mọi track. Tôi đã phải sửa thủ công một số ranh giới track được phát hiện sai.
Mặc dù phần lớn ổ cứng có track skew khác 0, một số ổ đời cũ (ST-157A) lại không có skew (hoặc có skew bằng 360°). Về lý thuyết, thuật toán có thể cố phát hiện skew 360° và coi đó là ranh giới track, nhưng việc phân biệt nó với hai sector liền kề trên cùng một track là cực kỳ khó khăn.
Việc triển khai hiện tại của tôi không hoạt động với ST-157A, nhưng may là ổ này có dung lượng đủ nhỏ để có thể xác định kích thước track thủ công (26 sector mỗi track và không dùng Zone Bit Recording).

Ngay cả với các ổ có track skew khác 0, vẫn tồn tại những track có giá trị skew khác nhau. Phần lớn ổ cứng có skew bất thường (đôi khi gần bằng 0) tại các ranh giới serpentine hoặc zone, và skew có thể thay đổi khá ngẫu nhiên khi ranh giới track xuất hiện đồng thời với track slipping (quản lý lỗi) hoặc ở giữa một cụm sector lỗi khi sử dụng phương pháp sector-slipping defect management.

Tôi đã triển khai hai thuật toán.

Thuật toán thứ nhất​

Thuật toán đầu tiên có độ phức tạp O(lg(tracksize)) để tìm ranh giới track.

Ranh giới track chứa một track skew làm tăng khoảng cách góc giữa hai sector logic nếu hai sector đó cắt qua ranh giới track.
Thuật toán liên tục chia vùng đang xét thành hai phần rồi kiểm tra xem nửa nào chứa ranh giới track (tìm kiếm nhị phân) cho đến khi xác định chính xác vị trí.

Ngoài thuật toán cơ bản này, còn có một số tối ưu hóa:
  • Thuật toán dự đoán vị trí của ranh giới track tiếp theo (vì kích thước track thường giữ nguyên trong cùng một serpentine hoặc zone).
  • Nếu dự đoán đúng (trường hợp phổ biến), có thể xác nhận ranh giới track tiếp theo mà không cần tìm kiếm nhị phân.
  • Với các vùng lớn, thuật toán chia thành nhiều hơn hai vùng con, vì nhiều vùng có thể được kiểm tra trong cùng một vòng quay của đĩa.

Thuật toán “fast”​

Thuật toán “fast” là phần mở rộng của thuật toán đầu tiên và phần lớn dựa trên thuật toán MIMD (Multiplicative Increase, Multiplicative Decrease) do Gim và Won đề xuất [1], nhưng được cải tiến để tăng độ ổn định.
Vì kích thước track thường giữ nguyên trong những vùng tương đối lớn, nên việc chỉ dự đoán ranh giới track tiếp theo là chưa đủ. Thuật toán còn dự đoán rằng nhiều track sắp tới cũng có cùng kích thước.

Nếu dự đoán đúng:
  • Tăng gấp đôi khoảng dự đoán ở lần tiếp theo.
Nếu dự đoán sai:
  • Giảm một nửa số lượng track bỏ qua rồi thử lại.
Thuật toán về cơ bản đang thực hiện tìm kiếm nhị phân trên ranh giới zone/serpentine thay vì trên từng track riêng lẻ, do đó không cần phải duyệt mọi track.
Trong phần triển khai của tôi, chế độ fast bị giới hạn ở việc dự đoán chính xác bội số của kích thước track trước đó (Gim và Won cho phép sai số ±5 sector).
Nếu dự đoán không hoàn toàn chính xác dù chỉ lệch một track, thuật toán sẽ quay về thuật toán O(lg(tracksize)) để xử lý sự thay đổi kích thước track.

Để xác minh dự đoán, tôi kiểm tra xem ranh giới track có tồn tại ở cả:
  • (n-1) track phía trước
  • (n) track phía trước
Trong khi Gim và Won chỉ kiểm tra (n) track.
Điều này cần thiết vì khi kích thước track thay đổi, độ thay đổi nhân với số track bị bỏ qua có thể trùng khớp chính xác với bội số của kích thước track cũ, dẫn đến kết quả sai.

Ví dụ:
  • Kích thước track hiện tại = 1000 sector
  • Thuật toán muốn kiểm tra 64 track phía trước
  • Tương đương 64.000 sector
Thuật toán có thể kết luận sai rằng:
  • Zone vẫn gồm 64 track × 1000 sector
Trong khi thực tế lại là:
  • 80 track × 800 sector
Xác suất điều này xảy ra khá thấp, nhưng với hàng triệu track trên một ổ đĩa, tôi thường xuyên thấy một vài vùng bị dự đoán sai vì nguyên nhân này.
Ngay cả việc kiểm tra hai lần cho mỗi dự đoán cũng không đảm bảo chính xác tuyệt đối.

Ví dụ:
Nếu tồn tại hai track liên tiếp có kích thước đúng bằng một nửa các track xung quanh (khả năng thấp nhưng vẫn có thể xảy ra), cả hai thuật toán sẽ nhầm chúng thành một track kích thước bình thường.
Trong các trường hợp cực đoan nhất (cụ thể là vùng chứa nhiều lỗi trên một ổ P300 của tôi), tôi buộc phải vẽ biểu đồ vị trí góc của mọi sector trong khu vực đó và xác định ranh giới track bằng tay.
Có những track đã mất hơn 90% số sector, khiến các thuật toán tìm ranh giới track hoàn toàn mất phương hướng.
Dưới đây là hai ví dụ về trường hợp thuật toán tìm track thất bại.
Ví dụ đầu tiên minh họa khó khăn khi xuất hiện các khoảng trống do sector lỗi.
Ảnh động bên dưới hiển thị kết quả khi chạy thuật toán tìm ranh giới track 10 lần trên một vùng đĩa có:
  • một khoảng trống lớn
  • một số khoảng trống nhỏ rải rác
Sơ đồ màu được thiết kế để làm nổi bật các sector đầu tiên của mỗi track bằng màu xanh đậm.
Mỗi lần chạy đều tạo ra kết quả khác nhau, vì thuật toán thường nhầm các khoảng trống này là track skew.

p300-trackbounds-hole-ezgif.com-optimize.gif

Thuật toán xác định ranh giới track bị nhầm lẫn khi xuất hiện các khoảng trống lớn trên đĩa và hiểu nhầm chúng là track skew. Ảnh động này cho thấy kết quả của việc chạy thuật toán tìm track 10 lần trong một khu vực có một vùng hình nêm bị thiếu (missing wedge), cho thấy mỗi lần chạy đều trả về kết quả khác nhau.
Ví dụ thứ hai không liên quan đến lỗi sector.
Trên ổ Samsung SV0432D, track cuối cùng của mỗi zone có thể không phải là một track hoàn chỉnh. Trong ví dụ này, track 8891 nằm trong một zone có 392 sector mỗi track, nhưng track cuối cùng của zone đó (track 8892) chỉ dài 6 sector.
Zone tiếp theo có 386 sector mỗi track, ít hơn chính xác 6 sector so với zone trước đó.

Một thuật toán tìm kiếm ranh giới track sẽ phát hiện một ranh giới tại đúng vị trí mà nó dự đoán (392 sector sau điểm kết thúc của track 8891), nhưng nó sẽ không nhận ra rằng đã bỏ sót một ranh giới track ở giữa.
Trường hợp này được phát hiện bằng cách kiểm tra thủ công toàn bộ các ranh giới zone, vì tôi nhận thấy xuất hiện những track rất nhỏ gần một số ranh giới zone.


sv0432d-angpos-8891.png

Track cuối cùng của một zone có 392 sector/track (chỉ có kích thước 6 sector) cộng với track đầu tiên của zone kế tiếp (386 sector) có tổng kích thước đúng bằng các track trong zone trước đó (392 sector).


Khoảng cách giữa các track và mật độ bit (Track pitch and bit density)​

Bây giờ khi đã xác định được ranh giới các track (và do đó biết được tổng số track), sẽ rất thú vị nếu thử ước tính track pitch, thông số thường được đo bằng số track trên mỗi inch (TPI – Tracks Per Inch).
Việc tính toán track pitch yêu cầu phải biết khoảng cách vật lý giữa track ngoài cùng và track trong cùng, nhưng thông tin này không thể xác định chỉ bằng việc đo thời gian.
Để giải quyết vấn đề này, tôi sử dụng ảnh chụp của các ổ cứng để ước tính kích thước vật lý của các phiến đĩa (platters).
Bảng dưới đây hiển thị các giá trị đo gần đúng. Dựa trên các số liệu này, ta có thể tính được track pitch trung bình (trong thực tế, track pitch có thể khác nhau giữa vùng ngoài, vùng giữa và vùng trong của đĩa).
Đối với các ổ cứng tôi thử nghiệm, track pitch nằm trong khoảng từ 40 µm đến 80 nm, tương đương khoảng 650 TPI đến 310.000 TPI.

ModelCapacityODIDAvg. tracks per surfaceSector SizeOD track sizeAvg. track pitchOD linear density
(mm)(mm)(bytes)(sectors)(nm/track)(TPI)(nm/bit)(kbpi)
Seagate ST-157A
3.5″
44.7 MB87435605122640,000650260010
Maxtor 7405AV405 MB9135266651212310,500240057048
Seagate ST51270A1.28 GB913554005121455200490048053
Seagate ST39140A9.1 GB9135900651229731008.2k240100
Samsung SV04324.3 GB913512230512403230011k170150
Seagate ST1 ST650211CF
1″
5 GB2312.51889151233528091k(1)53480(1)
Toshiba MK8034GSX 2.5″80 GB622873212512891230109k53480
Hitachi Deskstar 7K8082 GB913588138512117031081k60430
Western Digital SE16250 GB913586742512111632379k63410
Seagate 7200.9160 GB91351408935121452200128k48530
Seagate 7200.11320 GB91351649275122464170150k28900
Western Digital S25 WD3000BKHG
2.5″
300 GB62361280285121926100250k251000
Seagate Cheetah 15K.7 ST3450857SS
3.5″
450 GB6637993085121800150174k(2)28900(2)
Samsung SpinPoint F3 HD103SJ 3.5″1 TB91352135345122937130194k(3)241100
Hitachi 7K1000.C 3.5″1 TB91352287185122673120207k26970
Toshiba P300 HDWD130 3.5″3 TB9135345078409648580313k181400
Toshiba X300 HDWE150 3.5″5 TB9135327958409650085298k171450


  1. Tài liệu hướng dẫn của dòng Seagate ST1 cho biết mật độ tối đa là 105.000 TPI (tracks per inch). Tài liệu cũng ghi mật độ tuyến tính tối đa là 651 kbpi.
  2. Tài liệu của Seagate Cheetah 15K.7 cho biết giá trị 165.000 TPI. Đồng thời tài liệu cũng ghi mật độ tuyến tính tối đa là 1361 kbpi.
  3. Tài liệu của HD103SJ ghi mức 245k TPI.
Đối với ba ổ cứng mà tài liệu cung cấp giá trị track pitch, hai trong số các phép ước tính của tôi cho thấy mật độ track thấp hơn đáng kể so với số liệu công bố, chênh lệch lên tới 20%.

Tôi chưa rõ nguyên nhân của sự khác biệt này, nhưng một số khả năng gồm:
  • Tài liệu chỉ công bố mật độ tối đa ở khu vực có mật độ cao nhất trên đĩa, trong khi tôi tính giá trị trung bình.
  • Tôi có thể đã ước lượng quá lớn diện tích thực tế của phiến đĩa (platter) được dùng để lưu dữ liệu (ví dụ: phiến đĩa có khả năng lưu trữ nhiều hơn dung lượng thương mại hóa thực tế).
Tôi cũng có thể sử dụng cùng bộ dữ liệu này để tính toán giá trị gần đúng của mật độ bit tuyến tính (linear bit density) cho một track cụ thể.

Vì chúng ta biết số sector trên mỗi track, nên có thể tính mật độ bit của track ngoài cùng dựa trên giá trị ước tính đường kính ngoài (OD – Outer Diameter).
Ví dụ:

Nếu OD của Toshiba X300 là 91 mm và nó có 500 sector/track, thì kết quả sẽ vào khoảng:
  • 57.300 bit dữ liệu người dùng trên mỗi mm
  • tương đương 1 bit dữ liệu người dùng trên mỗi 17 nm
Mật độ bit vật lý thực tế có lẽ cao hơn khoảng 15–20% để dành không gian cho:
  • servo sectors
  • inter-sector gap
  • sync
  • data address marker
  • mã sửa lỗi (ECC)
  • mã hóa đường truyền dữ liệu (line coding)
Đối với hai trường hợp có thông số mật độ tuyến tính được công bố, thông số chính thức cao hơn đáng kể (tối đa khoảng 50%).
Tôi không thể giải thích phần lớn sự chênh lệch này.
Một số khả năng gồm:
  • Track ngoài cùng không phải là track có mật độ tuyến tính cao nhất.
  • Hoặc sự khác biệt giữa mật độ trung bình và mật độ tối đa, vốn được biết là có thể khác nhau khá nhiều [8].


Bố cục Track và số lượng bề mặt ghi dữ liệu​

Sau tất cả công sức này, cuối cùng chúng ta đã có đủ thông tin để xác định bố cục track và số lượng bề mặt ghi dữ liệu (cũng như số lượng phiến đĩa - platter) của các ổ đĩa. Câu hỏi tưởng chừng đơn giản về việc một ổ cứng chứa bao nhiêu phiến đĩa hóa ra lại khó đo đạc một cách đáng ngạc nhiên.
Các biểu đồ bên dưới hiển thị cả biểu đồ kích thước track và biểu đồ hồ sơ seek (seek profile) với cùng một trục x. Các biểu đồ này chỉ hiển thị vài nghìn track đầu tiên.
Biểu đồ kích thước track cho thấy các thay đổi về kích thước track, điều này cho biết thời điểm xảy ra việc chuyển đầu đọc (head change) hoặc chuyển vùng (zone change), bởi việc chuyển đầu đọc cũng có thể làm thay đổi kích thước track nếu bề mặt ghi dữ liệu khác có kích thước track khác.
Những thay đổi trong track skew (không được hiển thị ở đây) cũng có thể được dùng để xác định thời điểm chuyển đầu đọc, điều này đặc biệt hữu ích đối với các ổ đĩa sử dụng cùng một kích thước track trên mọi bề mặt.
Seek profile cung cấp một giá trị gần đúng về vị trí theo bán kính của track. Các track nằm gần mép ngoài hơn sẽ có thời gian seek thấp hơn.
Đây cũng là phương pháp mà Gim và Won đã sử dụng để xác định bố cục track.


hd103sj-layout.png

Ổ cứng Samsung HD103SJ: 4 bề mặt ghi. Đĩa này chuyển đổi bề mặt không thường xuyên (lưu ý thang đo trục x), và việc chuyển đổi đầu đọc/ghi trùng với ranh giới vùng ghi.

x300-layout.png

Toshiba X300: 10 bề mặt ghi dữ liệu (recording surfaces).

15k7-layout.png

Seagate 15K.7: 6 recording surfaces.

wd3000-layout.png

Western Digital S25: 3 bề mặt ghi dữ liệu. Mỗi bề mặt được hiển thị bằng một màu khác nhau trong biểu đồ hồ sơ seek (seek profile).

mk8034gsx-layout.png

Toshiba MK8034GSX: 3 recording surfaces.

Biểu đồ của Samsung HD103SJ khá dễ đọc. Nó cho thấy bốn bề mặt ghi dữ liệu (recording surfaces), mỗi bề mặt có kích thước track khác nhau. Bắt đầu từ đầu ổ đĩa, các track được điền trên một bề mặt từ ngoài vào trong (thời gian seek tăng từ track 0 đến track 9235), sau đó chuyển sang track ngoài cùng của bề mặt tiếp theo.
Mẫu này lặp lại bốn lần (cho thấy có bốn bề mặt) trước khi tiếp tục đi sâu hơn vào bên trong. Nhóm bốn zone tiếp theo bắt đầu tại track 36009. Khi nhìn vào biểu đồ phụ kích thước track (phía trên), có thể thấy cách bố trí track luân chuyển qua bốn bề mặt theo cùng một thứ tự: bề mặt thứ ba có mật độ cao nhất.

Giả định ở đây là “chất lượng” có thể khác nhau giữa các bề mặt ghi, nhưng chất lượng của cùng một bề mặt thay đổi chậm. Các vùng có cùng kích thước có khả năng cao hơn là nằm trên cùng một bề mặt và liền kề nhau, thay vì các zone khác nhau về kích thước track. Ngoài ra, tất cả các chuỗi serpentine đều có các track được sắp xếp từ ngoài vào trong.

Do đó ổ đĩa này sử dụng bố cục seek-first, hướng seek thuận, thứ tự bề mặt thuận (“seek first, FF”).

Ổ Toshiba X300 5TB có 10 bề mặt ghi dữ liệu, mỗi bề mặt có mật độ track khác nhau. Bố cục track khác với HD103SJ. Các track được điền từ ngoài vào trong trên bề mặt đầu tiên, nhưng trên bề mặt tiếp theo lại được điền theo hướng ngược lại (thứ tự seek xen kẽ).

Biểu đồ seek trông giống như các nhóm gồm năm hình chữ U lật ngược. Mười bề mặt được luân chuyển theo cùng một thứ tự (bề mặt thứ tư có mật độ cao nhất). Ổ đĩa này sử dụng bố cục “seek first, AF”.

Ổ Seagate 15K.7 (với 6 bề mặt ghi dữ liệu) có vẻ sử dụng bố cục track tương tự X300, hiển thị các hình chữ U lật ngược trong biểu đồ seek. Tuy nhiên, biểu đồ kích thước track cho thấy nó luân chuyển qua các bề mặt theo một thứ tự khác.

Mỗi nhóm gồm 6 chuỗi serpentine được phản chiếu đối xứng, điều này cho thấy các bề mặt từ 1 đến 6 được dùng cho nhóm chuỗi đầu tiên, sau đó đến các bề mặt từ 6 về 1 theo thứ tự ngược lại (thứ tự bề mặt xen kẽ).

Ổ này sử dụng bố cục “seek first, AA”.

Ổ Western Digital S25 có ba bề mặt ghi dữ liệu. Để dễ quan sát, tôi đã tô mỗi bề mặt bằng một màu khác nhau trong biểu đồ thời gian seek.
Biểu đồ seek trông không đều, nhưng biểu đồ kích thước track lại giảm dần đều. Có vẻ chiến lược được sử dụng ở đây là luôn duy trì kích thước track giảm đơn điệu bằng cách thay đổi thứ tự sử dụng các track vật lý.
Một vài track có số sector ít hơn một chút so với các track lân cận là do bỏ qua các sector lỗi.

Bề mặt có kích thước track lớn nhất được sử dụng trước, với 16.208 track đầu tiên đều nằm trên bề mặt này. Hai bề mặt còn lại được sử dụng bắt đầu từ track logic 16.208, và quay lại bề mặt đầu tiên ở gần track 39.600.
Ổ này sử dụng bố cục seek-first, hướng seek thuận, nhưng không có mẫu cố định trong thứ tự bề mặt.

Như đã đề cập trong phần ranh giới track, Toshiba MK8034GSX cũng có kích thước track giảm đơn điệu. Như thể hiện ở đây, bố cục track thực tế giống hệt Toshiba X300, chỉ khác là nó chỉ có 3 bề mặt (seek-first, AF).
Lý do kích thước track giảm đơn điệu là vì tất cả các bề mặt đều sử dụng cùng kích thước track và cùng ranh giới zone.
Ngược lại, WD S25 sử dụng các bề mặt có kích thước track khác nhau, nhưng các track được sắp xếp lại để kích thước track logic giảm đơn điệu.


Căn chỉnh track giữa các bề mặt (Track alignment across surfaces)


Biểu đồ seek cung cấp một phép đo gián tiếp về khoảng cách giữa một điểm tham chiếu (sector 0) và các track khác trên ổ đĩa. Trên các ổ có nhiều bề mặt ghi dữ liệu, biểu đồ có thể bị gián đoạn do cách bố trí kiểu serpentine, trong đó một track không liền kề (cách hàng trăm track) trên thực tế lại nằm rất gần về mặt vật lý (chuyển động đầu đọc tối thiểu) trên một bề mặt khác.

Một cách thú vị để diễn giải thông tin này là đặt ra câu hỏi: Các track trên một bề mặt được căn chỉnh tốt đến mức nào so với các track trên những bề mặt khác?

Trong các cách bố trí track truyền thống, người ta cho rằng việc chuyển đổi đầu đọc (head switch – thao tác điện tử) nhanh hơn việc seek sang track kế cận (adjacent-track seek – thao tác cơ học), vì vậy các track liên tiếp được sắp xếp theo các cylinder, chuyển đổi đầu đọc nhiều lần trước khi di chuyển đầu đọc sang cylinder kế cận. Nhưng khi mật độ track ngày càng tăng, việc căn chỉnh các track giữa các bề mặt khác nhau có thể đã trở nên quá khó khăn.

Ví dụ, biểu đồ seek của ổ Toshiba P300 3 TB cho thấy các track giữa các bề mặt có thể được căn chỉnh khá kém.

Bên dưới là biểu đồ seek cho 1.100 track đầu tiên của ổ đĩa, trải dài qua 8 chuỗi serpentine đầu tiên (trên 6 bề mặt).
Trong các biểu đồ seek phía trên, tôi đã sử dụng sector 0 làm điểm tham chiếu. Tại đây, tôi tạo một ảnh động trong đó thay đổi điểm tham chiếu từ track 0 đến track 140 (bao phủ mọi track trong serpentine đầu tiên trên bề mặt đầu tiên). Vị trí tham chiếu được đánh dấu bằng mũi tên.

Tôi cũng làm nổi bật các ranh giới serpentine để dễ quan sát hơn.
Do có 6 bề mặt, sẽ xuất hiện 6 đỉnh cực tiểu, mỗi đỉnh tương ứng với một bề mặt ghi dữ liệu. Vị trí của các đỉnh cho biết các track logic nào nằm gần nhất về mặt vật lý so với điểm tham chiếu.
Điều này cho phép xác định liệu các serpentine trên những bề mặt khác nhau có được căn chỉnh với nhau hay không, bằng cách quan sát xem đỉnh của mỗi serpentine có nằm ở cùng một vị trí tương đối trong mọi serpentine hay không.


55279425816_c536688d15.jpg

Trên ổ đĩa này, các serpentine không được căn chỉnh tốt. Track logic 0 của ổ đĩa gần nhất về mặt vật lý với track 38 của serpentine thứ hai, track 26 của serpentine thứ ba, track 63 của serpentine thứ tư, track 20 của serpentine thứ sáu, và nằm trước 20 track so với điểm bắt đầu của serpentine thứ năm.
Điều này cho thấy rằng nếu chúng ta cố gắng tổ chức các serpentine này thành các cylinder, việc chuyển đổi đầu đọc rất có thể cũng sẽ đi kèm với một thao tác seek vài chục track do sự lệch căn chỉnh giữa các bề mặt.
Với khoảng cách trung bình giữa các track (track pitch) trên ổ này khoảng 80 nm, độ lệch này rơi vào khoảng 2 µm.

Dữ liệu này không cho thấy nguyên nhân gây ra sự lệch căn chỉnh. Nó có thể là do sự khác biệt về bán kính của các servo track ban đầu được ghi lên đĩa, hoặc có thể do các đầu đọc trong cụm đầu đọc (head stack assembly) không được căn chỉnh hoàn hảo, hoặc cũng có thể đơn giản là không có nỗ lực nào nhằm căn chỉnh chúng thật sát nhau vì bố cục track kiểu seek-first ít nhạy cảm hơn với thời gian chuyển đổi đầu đọc.

Biểu đồ này cũng cho thấy rằng chỉ riêng việc chuyển đổi đầu đọc (nếu chỉ cần seek tối thiểu) vẫn nhanh hơn việc seek sang track liền kề.
Đỉnh cực tiểu nằm tại track tham chiếu không liên quan đến thao tác seek nào, trong khi hai điểm ngay trước và ngay sau nó là các thao tác seek một track.

Các thao tác seek một track này mất nhiều thời gian hơn so với thời gian truy cập đến track gần nhất về mặt vật lý trên một bề mặt khác.
Tóm lại, mặc dù việc chuyển đổi đầu đọc vẫn nhanh hơn việc seek sang track liền kề, mật độ track hiện nay đã tăng quá nhiều đến mức không còn khả năng căn chỉnh các track thành các cylinder, vì vậy việc chuyển đổi đầu đọc bắt buộc phải đi kèm với một thao tác seek lớn hơn nhiều so với chỉ một track.
Điều này giải thích tại sao tất cả các ổ đĩa mới hơn đều sử dụng một dạng bố cục seek-first nào đó.

Track Skew

Track skew theo truyền thống được định nghĩa là góc lệch giữa sector bắt đầu của một track so với sector bắt đầu của track trước đó.
Tôi đã chọn đo sector bắt đầu của mỗi track so với sector 0.
Biết được vị trí bắt đầu tuyệt đối của mỗi track có thể cho thấy liệu độ lệch (skew) có chính xác bằng một phần của một vòng quay hay chỉ chênh lệch một chút.

Điều này khá thú vị vì tôi cho rằng nó cung cấp một số thông tin về cách dữ liệu servo ban đầu được ghi lên bề mặt đĩa trống, mặc dù tôi không hiểu đủ về quá trình ghi servo để có thể nắm được ý nghĩa thực sự của nó.


dt01aca300-skew.webp

Toshiba DT01ACA300: Track skew chính xác bằng 3/29 vòng quay (revolutions).

x300-skew.webp

Toshiba X300: Track skew không chính xác bằng 1/16 vòng quay.

x300-skew10.webp

Toshiba X300, phóng to ở 10% đầu tiên của ổ đĩa. Track skew nhỏ hơn một chút so với 1/16 vòng quay, với độ lệch tích lũy khoảng 28 vòng quay trên 3,28 triệu track (tương đương khoảng -0,003° trên mỗi track).

st1-skew.webp

Seagate ST1: Mỗi mặt của ổ đĩa có track skew khác nhau (17/56 và 18/56 vòng quay).

Mỗi biểu đồ ở trên gồm hai biểu đồ phụ. Biểu đồ phụ phía trên hiển thị vị trí góc của điểm bắt đầu mỗi track trên ổ đĩa, trong khi biểu đồ phía dưới hiển thị track skew của từng track (độ chênh lệch vị trí bắt đầu giữa các track liền kề). Hai biểu đồ phụ này là hai cách nhìn khác nhau của cùng một tập dữ liệu.
Biểu đồ đầu tiên ở trên (Toshiba 3TB DT01ACA300) cho thấy một ổ đĩa sử dụng skew chính xác bằng 3/29 vòng quay (~37,2°). Biểu đồ tạo thành một tập hợp các đường gần như nằm ngang, lệch khoảng 2° trên toàn bộ ổ đĩa. Nhưng tại sao lại có 58 đường ngang thay vì 29?
Các bề mặt liền kề có vị trí bắt đầu track bị dịch chuyển bởi một bội số lẻ của 1/58 vòng quay (29/58 = 180°). Biểu đồ phụ phía dưới cho thấy phần lớn track skew là 37,2°, nhưng 180° cũng là một giá trị phổ biến.
Các skew 180° xuất hiện tại các ranh giới serpentine, khi track tiếp theo chuyển sang một bề mặt ghi dữ liệu khác. Ngoài ra cũng có một số lượng nhỏ skew với các giá trị khác nhau.
Tôi cho rằng nhiều trường hợp trong số này là do track slipping hoặc sector slipping, khi vị trí bắt đầu track vẫn tuân theo chuỗi của các track vật lý thực sự, nhưng một số track không được sử dụng và bị bỏ qua.

Biểu đồ tiếp theo (Toshiba X300 5TB) không hiển thị các dải ngang trong biểu đồ track skewskew của nó không chính xác bằng một phân số nhỏ của vòng quay.
Biểu đồ phụ phía dưới cho thấy 22,5° (1/16 vòng quay) và 202,5° (9/16 vòng quay) là các giá trị skew phổ biến.
Biểu đồ thứ ba phóng to hơn nữa, hiển thị 10% đầu tiên của ổ đĩa. Lúc này có thể thấy rõ rằng skew nhỏ hơn một chút so với 1/16 vòng quay.
Chúng ta cũng có thể thấy rằng vị trí bắt đầu của các track bị lệch khoảng 45/16 vòng quay trong biểu đồ này, hoặc 28 vòng quay trên toàn bộ ổ đĩa.
Tôi không có lời giải thích hợp lý về nguyên nhân gây ra sự lệch nhỏ này, cũng như các ưu điểm hoặc nhược điểm mà nó có thể mang lại.
Tôi nghi ngờ rằng nó phụ thuộc vào phương pháp được dùng để ghi thông tin servo [9], nhưng tôi biết rất ít về quá trình ghi servo.
Biểu đồ thứ tư cho thấy Seagate ST1 Microdrive 5 GB. Đây là ổ đĩa 1 phiến đĩa (platter), 2 đầu đọc, và sử dụng skew khác nhau trên mỗi mặt.
Một mặt sử dụng 17/56 vòng quay (109,3°) trong khi mặt còn lại sử dụng 18/56 vòng quay (115,7°).

Chi tiết triển khai​

--access-list 0,30 < track_boundaries.txt

Để đo track skew, chúng ta cần biết sector bắt đầu của mỗi track. Sector bắt đầu của mỗi track sử dụng đầu ra của thuật toán xác định ranh giới track (track bounds algorithm) ở phần trước.
Mặc dù track skew thường được định nghĩa là điểm bắt đầu của một track so với điểm kết thúc của track trước đó, thuật toán này đo vị trí góc tuyệt đối (tức là tương đối với sector 0) của sector bắt đầu cho mọi track.


Sector lỗi (Defective Sectors)

Với việc ổ cứng chứa từ hàng triệu đến hàng tỷ sector, trong khi mỗi sector chỉ có kích thước vài chục nanomet, việc xuất hiện lỗi trên bề mặt đĩa ngay từ quá trình sản xuất là điều khó tránh khỏi. Mỗi hãng ổ cứng áp dụng các phương pháp khác nhau để quản lý những lỗi này.

Ở một số ổ cứng đời đầu, các lỗi được “quản lý” bằng cách thông báo trực tiếp cho người dùng. Ví dụ, tài liệu hướng dẫn của mẫu ST-157A ghi rằng: “Một nhãn được gắn lên ổ đĩa để liệt kê vị trí của mọi lỗi trên bề mặt theo cylinder, head và số byte tính từ điểm index.” Nếu áp dụng phương pháp này với các ổ cứng hiện đại có hàng trăm nghìn lỗi thì số lượng nhãn cần dùng sẽ quá tốn kém.
Khi dung lượng đĩa tăng lên và số lượng lỗi nhiều hơn, bộ điều khiển ổ cứng cần âm thầm bỏ qua các sector lỗi (chỉ gây ảnh hưởng rất nhỏ tới hiệu năng). Hai phương pháp phổ biến để bỏ qua lỗi là sector slippingtrack slipping.

Sector slipping cho phép ánh xạ các số sector logic liên tiếp sang các sector vật lý không liên tiếp khi cần bỏ qua các sector vật lý bị lỗi. Khi đọc các sector logic tuần tự, sector lỗi chỉ gây ra độ trễ nhỏ tương đương vài sector, nhưng không cần phát sinh thao tác seek bổ sung.

Track slipping hoạt động tương tự, nhưng thay vì bỏ qua từng sector riêng lẻ thì nó bỏ qua cả track.

Làm thế nào để phát hiện phương pháp quản lý lỗi mà từng ổ cứng đang sử dụng?

Sector slipping sẽ làm độ dài của track giảm đi đúng bằng số sector lỗi bị bỏ qua. Điều này có thể được nhận thấy khá dễ dàng khi quan sát biểu đồ kích thước track. Trên một ổ đĩa không có lỗi, tất cả các track trong cùng một vùng (zone) sẽ có cùng kích thước (đường ngang thẳng). Nhưng các track có “lỗ hổng” thường xuất hiện dưới dạng một nhóm các track nhỏ hơn nằm trong cùng một zone.
Sau đó, khu vực đáng chú ý có thể được phân tích kỹ hơn bằng cách vẽ vị trí góc vật lý của mọi sector logic trong vùng đó. Các sector lỗi bị bỏ qua sẽ xuất hiện như các khoảng trống (holes), đặc biệt dễ nhìn thấy nếu khoảng trống kéo dài qua nhiều track tại cùng một vị trí góc.
Do lỗi bề mặt đĩa là hiện tượng vật lý (không phải logic), chúng tạo ra các khoảng trống theo từng nhóm sector nằm gần nhau về mặt vật lý, bất kể các hiệu ứng logic như độ lệch track (track skew).

Sector slipping

Các hình bên dưới minh họa ví dụ về các “lỗ hổng” do cơ chế sector slipping trên nhiều ổ cứng khác nhau. Tôi đã quan sát thấy hiện tượng này trên phần lớn các ổ đĩa đã kiểm tra.
Trên hầu hết ổ cứng, các khoảng trống xuất hiện khá thưa thớt (có thể chỉ vài chục đến vài trăm trên mỗi ổ) và kích thước nhỏ (chỉ vài sector). Tuy nhiên, các mẫu ổ cứng Toshiba 3TB (P300 và DT01ACA300) dường như có nhiều khoảng trống hơn đáng kể và kích thước cũng lớn hơn nhiều, với một số khoảng trống chiếm hơn 90% chiều dài của cả một track.
Những lỗi phát sinh trong quá trình sản xuất này dường như không ảnh hưởng đến độ tin cậy, bởi cả bốn ổ cứng của tôi đều chưa phát sinh thêm bất kỳ sector lỗi mới nào trong quá trình sử dụng (tính đến thời điểm hiện tại từ 13.000 đến 30.000 giờ hoạt động).
Ảnh hưởng thực sự duy nhất là hiệu năng bị giảm tại các khu vực chứa khoảng trống, nhưng tổng số sector bị ảnh hưởng chỉ ở mức vài trăm nghìn sector trên tổng số 733 triệu sector.

p300-angpos-hole1.webp

Toshiba P300: Có một khoảng trống lớn cùng nhiều khoảng trống nhỏ rải rác kéo dài qua nhiều track. Khoảng trống này có thể trông rất lớn, nhưng 35 track thực tế chỉ tương đương khoảng 2,8 µm (micromet).

p300b-angpos-hole.webp

Một ổ Toshiba P300 thứ hai: Tại đây cũng xuất hiện một khoảng trống lớn, nhưng nhìn chung số lượng khoảng trống trên ổ đĩa này ít hơn so với chiếc P300 đầu tiên.

wd3000-angpos-hole.webp

Western Digital S25: Có một khoảng trống gồm 27 sector, kéo dài qua khoảng cùng một vị trí góc trên 8 track (~0,8 µm)

hd103sj-angpos-hole.webp

Samsung F3: Có một vài khoảng trống xuất hiện tại đây, trong đó khoảng trống lớn nhất nằm ở các track 231–233 (~0,4 µm).

15k7-angpos-hole.webp

Seagate 15K.7: Có một khoảng trống gồm 2 sector, kéo dài qua 11 track (~1,6 µm).


Track slipping​


Track slipping khó phát hiện hơn và thậm chí còn khó xác minh hơn. Nếu một ổ cứng chỉ sử dụng cơ chế track slipping, thì mọi track trong mỗi zone sẽ chứa đúng số lượng sector dự kiến mà không có ngoại lệ nào.
Tuy nhiên, track slipping có thể làm kích thước của một serpentine nhỏ hơn mức dự kiến. Cách dễ nhất để nhận biết hiện tượng bỏ qua track là sự xuất hiện của độ lệch track (track skew) bất thường bên trong một serpentine.
Độ lệch giữa các track liền kề trong cùng một serpentine thường có giá trị cố định, trong khi các mức lệch lớn hơn thường chỉ xuất hiện tại ranh giới giữa các zone hoặc serpentine (để đáp ứng việc chuyển đầu đọc hoặc thao tác seek lớn hơn).
Một độ lệch bất thường xuất hiện bên trong serpentine thường là dấu hiệu cho thấy một số track đã bị bỏ qua.
Tuy nhiên, việc xác minh rằng độ lệch bất thường đó thực sự do track bị bỏ qua gây ra lại rất khó khăn. Các track bị bỏ qua chỉ tạo ra một “khoảng trống” theo hướng bán kính (radial direction), chứ không theo hướng góc, vì vậy việc đo vị trí góc sẽ không có tác dụng.
Khoảng cách theo hướng bán kính có thể được đo thông qua thời gian seek (seek xa hơn → thời gian lâu hơn). Tuy nhiên, do mối quan hệ giữa khoảng cách seek và thời gian seek có tính phi tuyến rất cao và khác nhau giữa từng mẫu ổ cứng, việc xác định chính xác số lượng track bị bỏ qua là điều rất khó.


hdwe150-hole.webp

Track slipping trên Toshiba X300: Sơ đồ này hiển thị ba serpentine liền kề nhau về mặt vật lý trên cùng một bề mặt đĩa, được đặt cạnh nhau (do đó trục x không liên tục). Có vẻ như khoảng 263 track bị thiếu (~22 µm) tại track số 514148, dẫn đến việc tạo ra một serpentine có kích thước nhỏ bất thường (52 track thay vì 315 track) và xuất hiện độ lệch track (track skew) bất thường ở mức 177° tại vị trí các track bị bỏ qua. Biểu đồ thời gian seek có tính bất đối xứng, nguyên nhân là do sự thiếu hụt các track này.

cheetah-hole.webp

Track slipping trên Seagate Cheetah 15K.7: Có khoảng 28 track bị bỏ qua (~4 µm) giữa track 42033 và 42034.
Khi cố gắng đo số lượng track bị bỏ qua bằng cách sử dụng một bề mặt đĩa liền kề không có lỗi, kết quả cho thấy có 27 track bị bỏ qua. Tuy nhiên, khi quan sát mẫu vị trí bắt đầu của các track (track skew), dữ liệu lại cho thấy có 28 track bị thiếu.
Các hình phía trên cho thấy hai ví dụ về track slipping cùng với nỗ lực của tôi trong việc đếm số lượng track bị bỏ qua.

Trong biểu đồ đầu tiên (Toshiba X300), có vẻ như khoảng 263 track đã bị bỏ qua giữa các track logic 514147 và 514148. Biểu đồ thứ hai (Seagate 15K.7) cho thấy khoảng 28 track bị bỏ qua giữa các track (logic) 42033 và 42034 (trên “Surface B”).

Biểu đồ X300 hiển thị ba serpentine liền kề nhau về mặt vật lý trên cùng một bề mặt đĩa, trong đó serpentine ở giữa được tô màu xanh dương. Số track logic không liên tục do các serpentine nằm trên 9 bề mặt còn lại đã được loại khỏi biểu đồ.

Trong khung đầu tiên, kích thước track được giữ cố định ở 440 sector, cho thấy không có sự thay đổi zone. Kích thước của serpentine ở giữa nhỏ hơn đáng kể so với các serpentine thông thường có 315 track trong khu vực này của đĩa. Hai điểm nhô lên là phần còn lại từ biểu đồ chưa chỉnh sửa, nơi kích thước track thay đổi khi chuyển sang một serpentine liền kề về mặt logic trên một bề mặt khác; phần này đã bị cắt bỏ.

Khung thứ hai hiển thị biểu đồ seek profile với một sector tham chiếu nằm đâu đó bên trong serpentine ở giữa. Nếu ba serpentine này chỉ chứa các track liền kề nhau về mặt vật lý, có thể kỳ vọng biểu đồ seek sẽ đối xứng. Tuy nhiên, dường như có một đoạn lớn của đường cong seek profile bị cắt bỏ giữa track 514147–514148.
Khung thứ ba và thứ tư hiển thị track skew (vị trí góc của sector đầu tiên trên mỗi track và độ lệch so với track trước đó), cho thấy mô hình skew cũng bị gián đoạn tại đúng vị trí này.
Cả ba quan sát đều chỉ ra một sự gián đoạn sau track 514147, chứa (315 - 52 = 263) track vật lý bị ẩn.
Biểu đồ Seagate 15K.7 cho thấy một phương pháp khác để phát hiện các track vật lý bị thiếu.
Ở phần trên, chúng ta đã thấy rằng biểu đồ seek profile có thể được dùng để so sánh vị trí theo hướng bán kính giữa các bề mặt ghi dữ liệu, từ đó quan sát sự căn chỉnh của các track trên nhiều bề mặt khác nhau.
Tại đây, tôi sử dụng phương pháp tương tự nhưng với mục đích khác: đo khoảng cách vật lý theo hướng bán kính trên một bề mặt bằng cách đếm track trên một bề mặt khác, dựa trên giả định rằng mật độ track tại cùng bán kính là giống nhau giữa các bề mặt.
Trong biểu đồ này, tôi hiển thị hai serpentine liền kề nằm trên hai bề mặt khác nhau (được ghi chú là Surface A và Surface B), cùng với một số track bị nghi ngờ là đã bị bỏ qua giữa track 42303 và 42304.
Khung thứ hai và thứ ba hiển thị seek profile với sector tham chiếu được đặt lần lượt tại track 42034 và track 42033.
Dấu hiệu đầu tiên cho thấy có track bị thiếu là cả hai seek profile đều không đối xứng và dường như bị cắt cụt tại track 42033–42034.
Chúng ta có thể sử dụng seek profile để đo khoảng cách theo hướng bán kính giữa các bề mặt khác nhau.
Hai seek profile cho thấy track 42034 trên Surface B gần nhất về mặt vật lý với track 41964 trên Surface A, trong khi track 42033 gần nhất với track 41992.
Nếu không có track bị bỏ qua, ta kỳ vọng rằng việc di chuyển đầu đọc một khoảng cách tương đương một track trên Surface B cũng sẽ tương ứng với khoảng một track trên Surface A.
Tuy nhiên, khoảng cách “một track” trên Surface B thực tế lại tương ứng với 28 track trên Surface A, điều này cho thấy có 27 track bị thiếu trên Surface B.
Trong trường hợp này, Surface A (được giả định không có lỗi) đang được sử dụng như một thước đo để xác định khoảng cách vật lý trên Surface B.
Theo dõi sự gián đoạn trong mô hình skew (khung cuối cùng) giữa track 42033 và 42034 lại cho thấy có thể có 28 track bị thiếu.
Trong ví dụ cụ thể này, tôi tin tưởng mô hình skew hơn, nên tôi cho rằng khả năng 28 track bị thiếu cao hơn 27 track, dù tôi không có cách nào để chứng minh chắc chắn.
Các track vật lý bị thiếu rất khó phát hiện và xác minh, nhưng hai ví dụ trên cho thấy vẫn có thể xác định được sự tồn tại của chúng cũng như ước tính gần đúng số lượng track bị thiếu.
Việc sử dụng bốn quan sát độc lập giúp tăng độ tin cậy của kết quả:
  • Sự thay đổi kích thước serpentine so với các vùng lân cận
  • Seek profile không đối xứng hoặc bị cắt cụt
  • Sử dụng một bề mặt ghi dữ liệu khác như thước đo
  • Quan sát các điểm gián đoạn trong mô hình track skew

Những thách thức trong quá trình microbenchmark

Phần này là thảo luận ngắn về một số khó khăn tôi gặp phải trong quá trình thiết kế bộ microbenchmark này.

Bộ nhớ đệm (cache) và tính năng đọc trước (lookahead) của ổ đĩa phải được tắt

Các microbenchmark của tôi giả định rằng các lệnh đọc thực sự được xử lý bằng cách đọc dữ liệu từ đĩa, chứ không phải từ bộ nhớ đệm. Một số nghiên cứu trước đây [2] cố gắng giải quyết vấn đề này bằng cách sử dụng thao tác ghi thay vì đọc và giả định rằng dữ liệu ghi phải chờ đến khi thực sự được ghi xuống đĩa (để đảm bảo an toàn khi mất điện).

Có các lệnh tiêu chuẩn để vô hiệu hóa bộ nhớ đệm trên cả ổ ATA và SCSI, và những lệnh này hoạt động trên tất cả các ổ tôi thử nghiệm ngoại trừ một thiết bị. Ổ Maxtor 7405AV có bộ nhớ đệm không thể tắt, nhưng có vẻ bộ nhớ đệm của nó chỉ lưu các lần đọc lặp lại cùng một sector, nên việc xử lý vấn đề này khá dễ dàng.

Do đó, tôi có thể sử dụng thao tác đọc và tránh được nhiều vấn đề khác của thao tác ghi (tránh thời gian ổn định cao hơn khi ghi, tránh mất dữ liệu trên ổ đĩa và tránh việc không bao giờ hoàn toàn chắc chắn thời điểm chính xác dữ liệu được ghi xuống bề mặt đĩa).

Bộ điều khiển SAS có hai loại: HBA và RAID. Chỉ HBA mới hoạt động

Bộ điều khiển SAS RAID cho phép hệ điều hành nhìn thấy mảng RAID, nhưng không cho phép gửi trực tiếp các lệnh SCSI tới ổ đĩa. Điều đó khiến việc tắt bộ nhớ đệm của ổ đĩa trở nên bất khả thi.

Thay vào đó cần sử dụng HBA (Host Bus Adapter) đơn giản hơn. HBA chỉ đơn giản kết nối ổ đĩa với hệ thống, tương tự cách tôi thường sử dụng với các ổ IDE và SATA.

Mọi microbenchmark đều dựa trên các giả định về đối tượng được đo. Nhưng những giả định này không phải lúc nào cũng đúng


Những giả định này đặc biệt dễ sai nếu đối tượng bạn đo mới hơn thuật toán bạn đang sử dụng.

Các thuật toán từ các nghiên cứu trước [1,2] nhìn chung không hoạt động nguyên trạng trên nhiều loại ổ đĩa khác nhau mà tôi thử nghiệm. Thực tế, ngay cả các thuật toán của tôi cũng không hoạt động hoàn hảo trên toàn bộ ổ đĩa dù đã trải qua nhiều tinh chỉnh, và tôi dự đoán chúng sẽ càng hoạt động kém hơn với những ổ đĩa tôi chưa từng thử.

Thuật toán “Skippy” do Nisha và cộng sự đề xuất năm 1999 [2] giả định rằng các track được bố trí theo cylinder bằng một trong các phương thức sắp xếp track ưu tiên đầu đọc. Tuy nhiên như chúng ta đã thấy, gần như mọi ổ đĩa sau khoảng năm 2000 không còn sử dụng cách bố trí này.
Các thuật toán mới hơn của Gim và Won (2010) [1] nhìn chung vẫn hoạt động, nhưng một số tối ưu hóa của họ lại không đáng tin cậy.
Thuật toán tìm zone của họ giả định rằng các track trong cùng một zone hoặc cấu trúc serpentine đều có kích thước giống nhau và hiếm khi thay đổi. Tuy nhiên trên các ổ hiện đại có hiện tượng sector slipping, kích thước track có thể thay đổi rất thường xuyên, dẫn tới kết quả sai trong một số trường hợp.

Thuật toán tìm zone của họ bỏ qua những nhóm track lớn cùng lúc, giả định kích thước track không đổi rồi xác minh xem điểm đích còn là ranh giới track hay không, sau đó kết luận rằng toàn bộ nhóm track đó vẫn cùng kích thước.
Điều này thất bại khi tổng số sector bị thiếu (ví dụ do sector slipping) trong một nhóm track lại đúng bằng bội số của kích thước track giả định. Vấn đề này xảy ra phổ biến hơn với các ổ dung lượng lớn (tôi thử tới 5 TB trong khi họ chỉ thử tới 320 GB) và với các ổ có mức biến thiên kích thước track lớn hơn.

Thuật toán của tôi cũng dựa trên các giả định và những giả định đó cũng có thể thất bại:
  • Tôi giả định ổ cứng bao gồm nhiều đĩa quay xếp chồng lên nhau, dữ liệu được lưu dưới dạng track đồng tâm (không phải dạng xoắn ốc) và sector, đồng thời chỉ có một cụm đầu đọc với một đầu hoạt động tại một thời điểm.

    Tôi chưa thấy ổ nào là phản ví dụ, nhưng đôi khi vẫn có đề xuất (và có thể cả sản phẩm thực tế) về ổ đĩa sử dụng hai cụm đầu đọc [10,11,12].
  • Thuật toán xác định ranh giới track của tôi giả định rằng track có track skew, và độ lệch này lớn hơn vài phần trăm một vòng quay nhưng nhỏ hơn đáng kể so với một vòng hoàn chỉnh.

    Giả định này không đúng với ổ ST-157A mà tôi thử nghiệm: nó không có skew (hoặc có skew 360°).
    Vì ổ này chỉ dùng một kích thước track trên toàn bộ đĩa nên việc tính toán thủ công ranh giới track dễ hơn việc phát minh thuật toán mới xử lý trường hợp không có skew.
    Tuy nhiên, ngay cả trên các ổ khác giả định này cũng không phải lúc nào đúng.
    Hầu hết ổ đĩa đều có một số track với mức skew gần bằng 0, thường do thay đổi zone hoặc hiện tượng track/sector slipping gây ra các giá trị skew bất thường.
    Ngoài ra còn có các giả định khác như:
    • thời gian đọc không có quá nhiều biến động ngẫu nhiên;
    • ổ đĩa không có quá nhiều sector bị thiếu.
    • Vì vậy tôi phải chỉnh sửa thủ công các lỗi trong ranh giới track do thuật toán phát hiện trên tất cả ổ đĩa.
  • Những ổ đĩa lệch đáng kể khỏi hành vi lý tưởng gây ra nhiều vấn đề.

    Ví dụ, ổ Seagate 7200.11 của tôi có nhiều vùng trên đĩa cần thêm một vòng quay để thực hiện seek (có thể do lỗi seek?), trong khi ổ Seagate ST1 xuất hiện lỗi seek ngẫu nhiên.
  • Tương tự, rất khó tìm ranh giới track ở những vùng đĩa có nhiều sector bị mất do lỗi (hai ổ P300) hoặc ở nơi kích thước track thay đổi lớn (Samsung SV0432D).

Kết luận

Bài viết này đã trình bày các microbenchmark dùng để khám phá một số đặc điểm vật lý về cách dữ liệu được lưu trên ổ cứng.
Khả năng đo vị trí góc của sector và thời gian seek giữa các track có thể được sử dụng để xây dựng những phép đo phức tạp hơn nhằm xác định cách sector và track được bố trí trên bề mặt đĩa.

Ngoài kích thước track và hồ sơ seek được sử dụng trong các nghiên cứu trước, tôi cũng nhận thấy track skew rất hữu ích trong việc xác định cách bố trí track.
Tôi đã thử nghiệm các ổ cứng từ 45 MB đến 5 TB, trải dài 25 năm phát triển công nghệ.
Điều này cho thấy sự đa dạng về cách bố trí track và nhiều hành vi bất thường hơn những gì các nghiên cứu trước ghi nhận. Sự đa dạng về thiết kế và các trường hợp đặc biệt cũng khiến việc xây dựng thuật toán microbenchmark trở nên khó khăn hơn.
Câu hỏi ban đầu tôi muốn trả lời là liệu có thể đo được số lượng phiến đĩa (platters) hoặc số bề mặt (surfaces) trong ổ cứng hay không.
Kết quả cho thấy điều này nhìn chung là khả thi, nhưng không tồn tại một thuật toán đơn giản để thực hiện.
Việc xác định số lượng bề mặt đòi hỏi phải hiểu được cách bố trí track, và vì tồn tại rất nhiều kiểu bố trí khác nhau nên cần kết hợp nhiều phép đo khác nhau để suy luận ra kết quả cuối cùng.

 
Trả lời

naroto

Hoài niệm về năm tháng ấy...!
Công nhận người viết bài này thật sự quá chăm chỉ....
Dài quá mình đọc được có 1/4 bài là kéo chuột xuống đây r.. :D