Đĩa SATA xử lý ghi bộ nhớ đệm đúng cách?


15

Khá phổ biến để xem lời khuyên để vô hiệu hóa bộ đệm ghi trên các đĩa riêng lẻ được sử dụng cho cơ sở dữ liệu vì nếu không, một số đĩa sẽ xác nhận ghi mà chưa được đưa lên bề mặt đĩa.

Điều này ngụ ý rằng một số đĩa không thừa nhận ghi cho đến khi chúng xuất hiện trên bề mặt đĩa (Cập nhật: hoặc chúng báo cáo chính xác khi được yêu cầu xóa bộ đệm. Tôi có thể tìm các đĩa đó ở đâu hoặc tôi có thể tìm thông tin có thẩm quyền ở đâu Nơi để tìm các đĩa như vậy?

Tôi đang thiết lập một số máy chủ DB thực sự có lợi khi sử dụng bộ đệm ghi, nhưng ứng dụng này rất nhạy cảm về giá và tôi không muốn tăng gấp đôi chi phí cho hệ thống con đĩa của mình cho một số bộ điều khiển RAID lưu trữ vì tôi không có đủ thông tin để biết liệu tôi có thể tin tưởng bộ nhớ cache trong mỗi ổ đĩa không.


linux cho phép vô hiệu hóa bộ đệm ghi trên ổ đĩa trên cơ sở ổ đĩa thông qua hdparam. Đối với các ổ đĩa SATA, tôi tin rằng điều này phải được viết kịch bản để được áp dụng lại mỗi lần khởi động lại. Tôi có thể đi theo cách đó nếu tôi vẫn có thể đạt được các yêu cầu hoàn hảo của chúng tôi mà không cần sử dụng bộ điều khiển đột kích được hỗ trợ bằng pin. Tôi thích sử dụng phần mềm RAID khi có thể vì nó đơn giản và rẻ hơn. Dù bằng cách nào, tôi chắc chắn sẽ có một UPS.
eas

Câu trả lời:


15

Nói chung, để trả lời trực tiếp cho câu hỏi của bạn, tôi không biết về bất kỳ thương hiệu lớn nào của ổ đĩa SATA mà chính ổ đĩa đó đã có lỗi liên quan đến hoạt động đúng với chức năng ghi bộ đệm được kích hoạt. Đó là, chỉ từ góc độ ổ đĩa, ổ đĩa thực hiện những gì nó phải làm từ góc độ bộ đệm. Tôi cũng xin lưu ý rằng ngay cả khi ghi bộ nhớ đệm được kích hoạt, mà sự chậm trễ từ một ghi đĩa trên cáp SATA với giới truyền thông xoay vật lý được cập nhật vẫn là rất ngắn (~ 50 đến 100ms thường). Không giống như dữ liệu bộ nhớ cache bẩn sẽ chỉ ngồi đó vài giây một lần ..... ổ đĩa liên tục cố gắng lấy dữ liệu bẩn từ bộ đệmlên các phương tiện truyền thông vật lý ngay khi nó có thể. Đây không chỉ là một câu hỏi về an toàn dữ liệu, mà là một trong những sẵn sàng chấp nhận viết trong tương lai mà không có bất kỳ sự chậm trễ nào (ví dụ: viết bài).

Vấn đề phát sinh khi kích hoạt bộ nhớ đệm là thứ tự ghi vào ổ đĩa qua cáp SATA và thứ tự ghi vào phương tiện quay không giống nhau. Điều này không bao giờ có thể gây ra sự cố KHÔNG GIỚI HẠN bạn bị mất điện hoặc sự cố hệ thống trước khi tất cả nội dung của bộ đệm được đưa vào đĩa. Tại sao? ->

Vấn đề có thể phát sinh ở đây liên quan đến độ mạnh giao dịch của hệ thống tệp và / hoặc nội dung tệp cơ sở dữ liệu đối với các lỗi bị mất theo thứ tự. Trên thực tế, những người có khả năng bị mất trật tự ghi có thể về mặt lý thuyết có thể làm hỏng tính toàn vẹn của logic giao dịch mà nếu không thì đã được bảo đảm bằng cách ghi đĩa xảy ra theo một thứ tự rất cụ thể đối với phương tiện truyền thông.

Bây giờ, tất nhiên, các nhà thiết kế hệ thống tệp, cơ sở dữ liệu, bộ điều khiển RAID, v.v ... đều biết (hoặc chắc chắn nên biết) về hiện tượng này liên quan đến việc ghi bộ đệm. Bộ nhớ đệm ghi là cực kỳ mong muốn từ quan điểm hiệu suất trong hầu hết các kịch bản I / O loại truy cập ngẫu nhiên. Trong thực tế, việc có sẵn bộ đệm ghi là một yếu tố quan trọng để có thể có bất kỳ lợi ích thực sự nào đối với Hàng đợi Lệnh gốc tiên tiến hơn ( NCQ) được hỗ trợ trên SATA mới hơn và một vài thế hệ triển khai PATA mới nhất. Vì vậy, để đảm bảo trật tự cho phương tiện vật lý vào những thời điểm quan trọng nhất định, hệ thống tệp và / hoặc ứng dụng, v.v. có thể yêu cầu cụ thể một bộ đệm ghi vào phương tiện truyền thông. Khi hoàn thành yêu cầu đồng bộ hóa này - mọi thứ đang chờ xử lý từ bộ đệm tệp (có khả năng), bộ đệm đĩa hệ điều hành, bộ đệm đĩa vật lý, v.v ... thực sự đã xuất hiện trên phương tiện theo thiết kế hệ thống giao dịch theo đúng các hoạt động quan trọng. Đó là, điều này xảy ra một cách chính xác nếu các lập trình viên thực hiện cuộc gọi đúng ở phía trên VÀ mọi phần tử của chuỗi phần mềm và phần cứng này đã thực hiện đúng công việc của họ. tức là: Không có lỗi về vấn đề này trong ổ đĩa, bộ điều khiển RAID, trình điều khiển đĩa, bộ đệm hệ điều hành, hệ thống tệp, công cụ cơ sở dữ liệu, v.v. Đây là rất nhiều phần mềm mà tất cả phải hoạt động chính xác. Ngoài ra, việc xác minh tính chính xác trong vấn đề này là rất khó vì trong hầu hết mọi tình huống, thông thường, thứ tự ghi không có vấn đề gì cả .... và sự cố mất điện và các tình huống sự cố là những thử nghiệm khó thực hiện. Vì vậy, cuối cùng "tắt ghi bộ nhớ đệm" tại một hoặc nhiều lớp và / hoặc ý nghĩa khác nhau của thuật ngữ này .... có tiếng là "sửa chữa" một số loại vấn đề. Trên thực tế, việc tắt các hành vi ghi bộ đệm của bộ điều khiển RAID hoặc Bộ đệm đĩa hệ điều hành, hoặc Ổ đĩa, v.v ... là tránh một hoặc nhiều lỗi trong hệ thống ..... và nguồn gốc của truyền thuyết đó. và sự cố mất điện và các tình huống sự cố là những thử nghiệm khó khăn để xây dựng. Vì vậy, cuối cùng "tắt ghi bộ nhớ đệm" tại một hoặc nhiều lớp và / hoặc ý nghĩa khác nhau của thuật ngữ này .... có tiếng là "sửa chữa" một số loại vấn đề. Trên thực tế, việc tắt các hành vi ghi bộ đệm của bộ điều khiển RAID hoặc Bộ đệm đĩa hệ điều hành, hoặc Ổ đĩa, v.v ... là tránh một hoặc nhiều lỗi trong hệ thống ..... và nguồn gốc của truyền thuyết đó. và sự cố mất điện và các tình huống sự cố là những thử nghiệm khó khăn để xây dựng. Vì vậy, cuối cùng "tắt ghi bộ nhớ đệm" tại một hoặc nhiều lớp và / hoặc ý nghĩa khác nhau của thuật ngữ này .... có tiếng là "sửa chữa" một số loại vấn đề. Trên thực tế, việc tắt các hành vi ghi bộ đệm của bộ điều khiển RAID hoặc Bộ đệm đĩa hệ điều hành, hoặc Ổ đĩa, v.v ... là tránh một hoặc nhiều lỗi trong hệ thống ..... và nguồn gốc của truyền thuyết đó.

Dù sao, quay trở lại cốt lõi của câu hỏi: Trong SATA, việc xử lý cụ thể tất cả các lệnh đọc / ghi đĩa và các lệnh bộ đệm bộ đệm được xác định rõ bởi các thông số kỹ thuật của SATA . Ngoài ra, các nhà sản xuất ổ đĩa nên có tài liệu chi tiết cho từng kiểu ổ đĩa hoặc họ ổ đĩa mô tả việc thực hiện và tuân thủ các quy tắc này như ví dụ này cho các ổ đĩa Seagate Barracuda . Cụ thể, xem chi tiết về TÍNH NĂNG THIẾT LẬP SATAlệnh điều khiển chế độ hoạt động của ổ đĩa và tùy chọn cụ thể 82h có thể được sử dụng để vô hiệu hóa bộ nhớ đệm đĩa ở cấp ổ đĩa vì mặc định chắc chắn là ghi bộ đệm được kích hoạt trên tất cả các ổ đĩa mà tôi biết. Nếu bạn thực sự muốn tắt bộ đệm, lệnh này phải được thực hiện khi bắt đầu mỗi lần thiết lập lại ổ đĩa hoặc bật nguồn và thường nằm dưới sự kiểm soát của trình điều khiển đĩa cho hệ điều hành của bạn. Bạn có thể khuyến khích trình điều khiển hệ điều hành của mình thiết lập chế độ này thông qua điều loại IOCTL và / hoặc Cài đặt đăng ký, nhưng điều này rất khác nhau.


5
Một lưu ý biên tập cho câu trả lời của tôi: Bộ điều khiển RAID phần cứng nổi tiếng có lỗi liên quan đến nhiều vấn đề bao gồm các vấn đề liên quan đến việc triển khai bộ nhớ đệm ghi nội bộ của chúng. Tôi không biết tại sao, nhưng các bộ điều khiển RAID nói một cách ngẫu nhiên dường như là một trong những phần mềm có lỗi nhất từng được viết dưới dạng một cái gì đó có sử dụng rộng rãi như vậy. Nó chắc chắn trả tiền để sử dụng phần cứng RAID rất chính thống, được thiết lập và triển khai rộng rãi từ các nhà cung cấp rất có uy tín ..... và thậm chí sau đó các bản vá cho các vấn đề không tầm thường dường như quá thường xuyên!
Cao Jeff

Cảm ơn Jeff. Tôi đã đọc rất nhiều về điều này, và tôi cũng bối rối như tôi đã từng. Tôi nghĩ rằng vấn đề hiện tại tôi đang phải vật lộn với "rào cản ghi" cho phép các ứng dụng và hệ thống tập tin hướng dẫn lớp khối đảm bảo trật tự ghi đúng bằng các cơ chế khác nhau có sẵn. Thật không may, có tất cả các loại vấn đề với việc thực hiện các rào cản. LVM, đối với một điều, dường như không hỗ trợ họ, ngay cả khi các thiết bị cơ bản làm. Ngoài ra, có vẻ như với tôi rằng quản trị hệ thống nên có tùy chọn của việc có fsync buộc một tuôn ra của bộ nhớ cache ổ đĩa
eas

@eas - Thuật ngữ "viết rào cản" mà bạn đề cập đến tôi giả sử là cùng một cơ chế cơ bản mà tôi gọi là "đồng bộ hóa" hoặc "tuôn ra" các bộ đệm trong câu trả lời của tôi ở trên. Theo quan điểm của bạn, điều này có thể được bắt đầu ở các lớp khác nhau trong "ngăn xếp" truy cập tệp. Để xây dựng một rào cản ghi thực sự, nó phải có ảnh hưởng thông qua tất cả các lớp có dữ liệu ghi đang chờ xử lý (nghĩa là: bộ đệm bẩn hoặc bộ đệm ghi lại) thông qua phương tiện vật lý để thực sự hoạt động như dự định. Bất kỳ liên kết bị ngắt kết nối nào trong chuỗi đó là những gì giới thiệu các vấn đề tiềm ẩn khi viết được sắp xếp lại.
Cao Jeff

Đĩa có thể trì hoãn việc ghi vào phương tiện truyền thông trong vài giây, thông thường nếu có nhiều lần ghi tiếp tục tràn bộ đệm đĩa, nó sẽ buộc ghi vào phương tiện. NCQ không thực sự cần bộ đệm ghi, nó vẫn có thể có nhiều lệnh ghi và đọc đang chờ xử lý và phát hành chúng theo thứ tự mà đĩa nghĩ sẽ có hiệu suất tốt nhất, với NCQ không có ý nghĩa gì đối với thứ tự ghi. hệ thống tập tin và cơ sở dữ liệu cần sử dụng các rào cản IO.
Baruch Ngay cả

3

Theo kinh nghiệm của tôi, bộ điều khiển đĩa bộ nhớ đệm dựa trên pin sẽ vô hiệu hóa bộ đệm trên ổ đĩa. Tôi không biết cách nào để vô hiệu hóa bộ đệm trên đĩa. Ngay cả khi bạn có thể vô hiệu hóa bộ đệm trên đĩa, hiệu suất sẽ bị ảnh hưởng đáng kể.

Đối với một optoin chi phí thấp, bạn có thể sử dụng một UPS rẻ tiền có thể báo hiệu cho hệ thống của bạn để tắt máy có trật tự.


Nhận xét của tôi ở trên nên đã được thêm vào đây. Tôi vẫn đang học trang này.
eas

Một số bộ điều khiển RAID luôn vô hiệu hóa bộ đệm trên đĩa, một số không và một số có cài đặt. Hành vi này về cơ bản phụ thuộc vào việc triển khai chiến lược bộ nhớ đệm của bộ điều khiển RAID là như thế nào. Trong một số triển khai, họ thực sự muốn kiểm soát thứ tự ghi vào đĩa .... và trong những lần khác, vấn đề ít hơn. Tôi ám chỉ một số vấn đề ở đây trong câu trả lời của tôi.
Cao Jeff

Trong bộ thử nghiệm nhỏ được thừa nhận của tôi (bộ điều khiển RAID LSI 9261, ổ đĩa SATA, NL SAS và SAS), tôi thấy rằng cho phép ổ đĩa ghi bộ đệm khi ổ đĩa được kết nối với bộ điều khiển RAID với bộ đệm được hỗ trợ bởi bộ đệm / dung lượng, không khác biệt với hiệu năng trên và chỉ cần có bộ đệm bộ điều khiển RAID. Tôi chưa nói đây là một quy tắc khó và nhanh, nhưng với tôi chắc chắn rằng bộ điều khiển RAID vô hiệu hóa bộ đệm ổ đĩa không nhất thiết là một vấn đề.
Daniel Lawson

2

Tôi sử dụng hệ thống RAID với siêu tụ điện thay vì pin để duy trì bộ đệm. Pin bị hao mòn, phải được theo dõi, phải được thay thế và thể hiện một điểm thất bại tiềm tàng trong những khía cạnh đó. Một tụ điện sạc khi khởi động, xóa bộ nhớ cache khi mất điện từ UPS, tồn tại gần như mãi mãi, không cần giám sát, v.v. Tuy nhiên, trừ khi bạn đang điều hành một doanh nghiệp trên chuẩn nghèo (không phổ biến trong những ngày này), bạn nên có một UPS và phần mềm tắt hệ thống sạch hoàn toàn khi gặp sự cố - Tôi thường cho nó 5-15 phút (tùy thuộc vào tải của UPS và do đó có sẵn pin) trước khi tắt máy nếu nguồn điện trở lại.

Trong cơn giông bão bạn có thể (hoặc có thể có - hệ thống điện đang trở nên tốt hơn) nhìn thấy ánh sáng nhấp nháy, đôi khi ngay trước khi chúng tắt. Đây là một thiết bị được gọi là recloser. Đó là một bộ ngắt mạch mà khi bị vấp phải cố gắng đóng công tắc đã mở trong trường hợp quá tải là nhất thời. Nếu nó không đóng cửa sau, nói ba lần thử, nó vẫn mở. Một số anh chàng tội nghiệp phải ra ngoài trời mưa và đối phó với nó. Đừng cảm thấy quá tiếc cho anh ấy, trong khi chỉ làm gấp đôi những gì bạn và tôi làm và hai lần rằng nếu làm thêm giờ, đó là công việc nguy hiểm.


2

Một trong những quan niệm sai lầm nếu đĩa ghi lại bộ nhớ cache là chúng chỉ mất dữ liệu khi mất điện. Điều này không phải lúc nào cũng đúng, đặc biệt là trên các thiết bị sATA. Nếu một thiết bị sATA có lỗi trên nó (chẳng hạn như lỗi FW hoặc lỗi bộ điều khiển góc) và thiết lập lại hoặc được đặt lại bên ngoài, không có gì đảm bảo rằng dữ liệu trong bộ đệm ghi lại vẫn có sẵn sau khi treo.

Điều này có thể dẫn đến các tình huống trong đó một thiết bị có lỗi thoáng qua, được đặt lại, mất dữ liệu xảy ra do mất bất kỳ bộ nhớ cache bẩn nào và điều này là im lặng trên mức chặn trình điều khiển.

Tồi tệ hơn, vô hiệu hóa bộ nhớ cache ổ đĩa thông qua các công cụ hệ điều hành cũng sẽ bị mất trên thiết lập lại thiết bị, vì vậy ngay cả khi thiết bị bị tắt bộ đệm vào lúc bắt đầu, nếu thiết bị được đặt lại, nó sẽ kích hoạt lại bộ nhớ đệm ghi lại. Khi thiết lập lại, thiết bị sẽ mất dữ liệu.

Các ổ đĩa SCSI / SAS và một số ổ đĩa SATA có khả năng lưu trạng thái của hồ sơ ghi lại để đảm bảo rằng các thiết lập lại trên tài sản không bị mất - nhưng trong thực tế, điều này hiếm khi được sử dụng.

Bộ điều khiển RAID tích hợp lớp khối vào các lớp trên có thể nhận thấy thiết lập lại ổ đĩa và vô hiệu hóa lại bộ đệm ghi lại - nhưng bộ điều khiển sATA và SAS tiêu chuẩn sẽ không làm điều này.

Giới hạn này cũng áp dụng cho TÍNH NĂNG THIẾT LẬP khác và các tham số tương tự được định cấu hình cho hiệu suất và độ tin cậy.


1

Như bạn nói, bộ điều khiển RAID được hỗ trợ bằng pin thích hợp sẽ rất tốn kém, nhưng bạn có thể tìm thấy bộ điều khiển Dell Perc5 / i trên eBay với giá 100 bảng (150 đô la) và đặc biệt với RAID5 tốc độ của bộ điều khiển như Perc5 / i sẽ làm bạn ngạc nhiên. Tôi có một số máy chủ với Perc5 / is và sáu mảng RAID5, và chúng là một trong những đĩa nhanh nhất tôi từng thấy. Đặc biệt đối với các ứng dụng cơ sở dữ liệu đĩa nhanh sẽ thực sự cải thiện hiệu suất.

Tôi sẽ cắn viên đạn và mua bộ điều khiển RAID.

JR


1

Theo tôi hiểu, giả mạo fsync () là một thuộc tính của bộ điều khiển RAID được hỗ trợ bằng pin, không phải ổ đĩa. Bộ điều khiển RAID chứa pin có thể cấp nguồn cho bộ đệm ghi của nó cho đến khi nguồn được phục hồi vào ổ đĩa và ghi có thể được cam kết an toàn vào đĩa. Điều này cho phép bộ điều khiển quay trở lại hệ điều hành ngay lập tức, vì nó đưa ra một số mức độ đảm bảo rằng ghi sẽ được ghi vào đĩa.

Cần lưu ý, nếu các ổ đĩa ghi bộ đệm lấp đầy, ghi sẽ chặn cho đến khi bộ đệm được ghi lại vào ổ đĩa. Điều này có nghĩa là bộ đệm thường không hiệu quả khi ghi liên tục.

Bạn cần bao nhiêu IOPS? Bạn có chắc chắn rằng bạn đang bị giới hạn bởi các ổ đĩa ghi bộ đệm, hoặc một bộ nhớ nhỏ (so với bộ nhớ của máy chủ của bạn) trên ổ đĩa sẽ có ích?


Việc kiểm tra tôi đang thực hiện bây giờ là xác định phong bì hiệu năng của ứng dụng của chúng tôi để chúng tôi có thể tìm ra cách mở rộng tốt nhất. Bộ nhớ cache của ổ đĩa có thể tương đối nhỏ, nhưng với bộ đệm ghi trên nó cung cấp cho ổ đĩa khả năng sắp xếp lại ghi (khi thích hợp), có vẻ như nó có thể tăng gấp đôi lưu lượng ghi.
eas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.