Tại sao IOPS lại quan trọng?


32

Tôi hiểu IOPS và thông lượng là gì. Thông lượng đo lưu lượng dữ liệu theo MB / s và IOPS cho biết có bao nhiêu hoạt động I / O đang diễn ra mỗi giây.

Điều tôi không hiểu là tại sao nhiều dịch vụ lưu trữ chỉ hiển thị IOPS mà họ cung cấp. Tôi thực sự không thể thấy bất kỳ kịch bản nào mà tôi muốn biết IOPS thay vì thông lượng.

Tại sao IOPS lại quan trọng? Tại sao AWS chủ yếu hiển thị các điều khoản lưu trữ trong IOPS? IOPS ở đâu phù hợp hơn thông lượng (MB / s)?


CHỈNH SỬA:

Một số người đang xem xét câu hỏi này như thể tôi đã hỏi truy cập ngẫu nhiên là gì và nó ảnh hưởng đến hiệu suất như thế nào hoặc ổ cứng và SSD hoạt động như thế nào ... mặc dù tôi nghĩ thông tin này hữu ích cho những người mới sử dụng hành vi lưu trữ, rất nhiều trọng tâm đang được áp dụng với điều này và đó không phải là mục tiêu của câu hỏi, câu hỏi là về "Tôi sẽ nhận được thông tin mới nào khi nhìn thấy số IOPS, rằng tôi sẽ không thấy số thông lượng (MB / s)?"



3
Nếu bạn muốn di chuyển dữ liệu lớn, bạn quan tâm đến thông lượng. Nếu bạn cần r / w nhiều dữ liệu nhỏ, bạn cần nhiều IOPS hơn. eg1 Nếu có một thao tác duy nhất có thể đọc MB dữ liệu từ thiết bị thì bạn chỉ cần 1 thao tác để có thông lượng cao. eg2 Nếu bạn cần đọc hàng tá thuộc tính tệp, bạn không nhìn vào một lượng lớn dữ liệu mỗi lần nhưng cần thực hiện nhiều thao tác để lấy các bit dữ liệu nhỏ. Thông lượng sẽ thấp nhưng bạn sẽ cần rất nhiều hoạt động.
TafT

Câu trả lời:


32

Thông lượng

Thông lượng là hữu ích khi bạn đang làm những việc như sao chép tệp. Khi bạn đang làm hầu hết mọi thứ khác, việc đọc và ghi ngẫu nhiên trên đĩa sẽ hạn chế bạn.

IOPS

IOPS thường chỉ định kích thước của từng gói dữ liệu. Ví dụ: AWS gp2 có thể thực hiện 10.000 IOPS với kích thước tải trọng 16 KiB . Nó nhân lên tới 160MiB / giây. Tuy nhiên, có thể bạn sẽ không sử dụng kích thước tải trọng đầy đủ mọi lúc, vì vậy thông lượng thực tế có thể sẽ thấp hơn. NB KiB là 1024 byte, KB là 1000 byte.

Bởi vì IOPS chỉ định kích thước gói cũng cung cấp cho bạn tổng thông lượng. Trong khi thông lượng cao không có nghĩa là bạn có IOPS cao.

Kịch bản

Hãy xem xét các kịch bản sau:

  • Khởi động PC của bạn. Hãy xem xét sự khác biệt giữa SSD và đĩa quay trong máy tính của bạn, đây là điều mà nhiều người có trải nghiệm đầu tiên. Với một đĩa quay, thời gian khởi động có thể là một phút, trong khi với SSD, thời gian này có thể giảm xuống còn 10 - 15 giây. Điều này là do IOPS cao hơn dẫn đến độ trễ thấp hơn khi thông tin được yêu cầu. Thông lượng của đĩa quay khá tốt, 150MB / giây, mặc dù SSD có khả năng cao hơn nhưng đây không phải là lý do nhanh hơn - đó là độ trễ thấp hơn để trả về thông tin.
  • Chạy một bản cập nhật hệ điều hành. Nó đi khắp đĩa, thêm và vá các tập tin. Nếu bạn có IOPS thấp thì sẽ chậm, bất kể thông lượng.
  • Chạy một cơ sở dữ liệu, ví dụ chọn một lượng nhỏ dữ liệu từ một cơ sở dữ liệu lớn. Nó sẽ đọc từ chỉ mục, đọc từ một số tệp, sau đó trả về kết quả. Một lần nữa, nó sẽ đi khắp đĩa để thu thập thông tin.
  • Chơi một trò chơi trên PC của bạn. Nó có thể tải một số lượng lớn kết cấu từ tất cả các đĩa. Trong trường hợp này IOPS và thông lượng có khả năng được yêu cầu.

Băng LTO

Hãy xem xét một lúc một hệ thống sao lưu băng. LTO6 có thể thực hiện 400MB / giây, nhưng (tôi đoán ở đây) thậm chí có thể không thực hiện một IOP ngẫu nhiên, nó có thể thấp đến vài giây trên mỗi IOP. Mặt khác, nó có thể có thể thực hiện rất nhiều IOPS tuần tự, nếu IOPS được định nghĩa là đọc hoặc ghi một lô dữ liệu vào băng.

Nếu bạn đã cố khởi động một hệ điều hành khỏi băng thì sẽ mất nhiều thời gian, nếu nó hoạt động hoàn toàn. Đây là lý do tại sao IOPS thường hữu ích hơn thông lượng.

Để hiểu một thiết bị lưu trữ, có lẽ bạn muốn biết đó là IOPS ngẫu nhiên hay tuần tự và kích thước IO. Từ đó bạn có thể rút ra thông lượng.

AWS

Lưu ý rằng AWS không xuất bản cả IOPS và số liệu thông lượng cho tất cả các loại lưu trữ của nó, trên trang này . SSD đa năng (gp2) có thể thực hiện 10.000 IOK 16KiB, cho tốc độ tối đa 160MB / giây. IOPS được cấp phép (io1) là 20.000 IOPS 16KiB, cho tốc độ tối đa 320MB / giây.

Lưu ý rằng với khối lượng gp2, bạn nhận được 30IOPS cho mỗi GB được cung cấp, vì vậy để có được 10.000 IOPS, bạn cần có dung lượng 333,33GB. Tôi không nhớ nếu các tập io1 có giới hạn tương tự (đã được một thời gian kể từ khi tôi thực hiện bài kiểm tra liên kết nơi loại điều đó được kiểm tra), nhưng tôi nghi ngờ họ làm như vậy, và nếu vậy thì có lẽ là 60IOPS mỗi GB.

Phần kết luận

Thông lượng tuần tự cao là hữu ích, và trong một số trường hợp là yếu tố hạn chế hiệu suất, nhưng IOPS cao có thể sẽ quan trọng hơn trong hầu hết các trường hợp. Tất nhiên bạn vẫn cần thông lượng hợp lý bất kể IOPS.


Tôi hiểu rằng IOPS đo hiệu suất truy cập ngẫu nhiên, nhưng thực tế nó không cho thấy bạn đang làm nhanh như thế nào ... bạn có thể thực hiện 10000 IOPS, nhưng đây có thể là một thứ gì đó chậm hoặc nhanh, cách duy nhất để biết là biết bao nhiêu MB / s hoạt động đang tiêu thụ.
mFeinstein

IOPS thường chỉ định kích thước tải dữ liệu. AWS nói 16KiB. Vì vậy, 10.000 IOPS với tốc độ 16KiB / giây mang lại cho bạn 160MB / giây.
Tim

2
10000 IOPS ở 16KB sẽ không chuyển thành 20000 IOPS ở 8KB, mặc dù (có thể ~ 11000). Điều này có nghĩa là người ta cần biết cả IOPS và thông lượng để đánh giá một ổ đĩa / khối lượng công việc.
boot4life

4
Chỉ cần là pedantic, nó vẫn là 1 IOPS, không phải 1 IOP. Đây không phải là số nhiều
Matthew Steeples

1
Tôi không thể nghĩ về bất kỳ người khác. Hầu hết những thứ có IOPS cao đều có thông lượng cao một cách hợp lý, nhưng trong hầu hết các trường hợp đều hữu ích vì IOPS không phải là thông lượng. Một ví dụ khác có thể là cơ sở dữ liệu quan hệ, mặc dù đó không phải là thiết bị lưu trữ, đó là phần mềm. Tôi không chắc chắn những gì bạn muốn từ câu hỏi này, tôi nghĩ rằng khái niệm này đã được giải thích kỹ lưỡng cho bạn. Bất cứ điều gì có thời gian tìm kiếm cao hoặc độ trễ có thể có IOPS thấp, nhưng thông lượng có thể được tách rời và cao trong một số trường hợp.
Tim

57

Điều này là do thông lượng tuần tự không phải là cách mà hầu hết hoạt động I / O xảy ra.

Các hoạt động đọc / ghi ngẫu nhiên đại diện nhiều hơn cho hoạt động hệ thống bình thường và thường bị ràng buộc bởi IOPS.

Truyền phát nội dung khiêu dâm từ một trong các máy chủ của tôi tới khách hàng của chúng tôi (hoặc tải lên CDN của chúng tôi) có tính chất tuần tự hơn và bạn sẽ thấy tác động của thông lượng ở đó.

Nhưng việc duy trì cơ sở dữ liệu phân loại nội dung khiêu dâm và theo dõi hoạt động của người dùng thông qua trang web sẽ là ngẫu nhiên và bị giới hạn bởi số lượng hoạt động I / O nhỏ / giây mà bộ lưu trữ bên dưới có khả năng.

Tôi có thể cần 2.000 IOPS để có thể chạy cơ sở dữ liệu ở mức sử dụng cao nhất, nhưng chỉ có thể thấy thông lượng 30MB / s ở cấp đĩa vì loại hoạt động. Các đĩa có khả năng 1200MB / s, nhưng IOPS là giới hạn trong môi trường.

Đây là một cách mô tả tiềm năng năng lực của một hệ thống lưu trữ. Một ổ SSD có thể có khả năng thực hiện 80.000 IOPS và thông lượng 600MB / s. Bạn có thể có được thông lượng đó với 6 đĩa SAS 10k thông thường, nhưng sẽ chỉ mang lại khoảng 2.000 IOPS.


Bạn có thể cho tôi một ví dụ về việc IOPS sẽ cung cấp cho tôi cái nhìn sâu sắc về hiệu suất hệ thống của tôi khi MB / s sẽ không hữu ích?
mFeinstein

@mFeinstein Xem ví dụ khiêu dâm ở trên.
ewwhite

33
+1 cho ví dụ khiêu dâm lol
mFeinstein

2
Ngoài ra, một hệ điều hành có khả năng thực hiện một loạt các truy cập ngẫu nhiên nhỏ. Thông lượng Seq sẽ không giúp đỡ. Đó là một lý do để chạy HĐH trên SSD, ít nhất là trong PC.
sudo

3
Tôi thường thấy các đĩa được sử dụng đầy đủ với tốc độ ~ 2MB / giây. Đó là bởi vì đó là IO ngẫu nhiên 100%. Đôi khi, mức tăng hoàn hảo đáng kinh ngạc có thể bằng cách đặt dữ liệu tuần tự trên đĩa (ví dụ: loại bỏ phân mảnh, lập chỉ mục trong cơ sở dữ liệu).
boot4life

6

Mặc dù câu trả lời của ewwhite là hoàn toàn chính xác, tôi muốn cung cấp một số con số cụ thể hơn chỉ để giúp đưa ra lý do tại sao sự khác biệt lại quan trọng.

Như ewwhite đã nêu chính xác, hầu hết các ứng dụng không phát trực tuyến chủ yếu thực hiện các hoạt động đĩa không tuần tự, đó là lý do tại sao IOPS quan trọng ngoài thông lượng cao nhất về mặt lý thuyết.

Khi một đồng nghiệp và tôi lần đầu tiên cài đặt SSD trong các hệ thống phát triển của chúng tôi để thay thế các ổ cứng mà chúng tôi đã sử dụng trước đây, chúng tôi đã thực hiện một số phép đo hiệu suất trên chúng thực sự làm nổi bật lý do tại sao điều này lại quan trọng:

Kết quả ổ cứng SATA:

Thông lượng đọc tuần tự: ~ 100 MB / s
Thông lượng đọc không tuần tự (khối 2k, IIRC): ~ 1 MB / s

Kết quả SSD đính kèm PCIe:

Thông lượng đọc tuần tự: ~ 700 MB / s
Thông lượng đọc không tuần tự (khối 2k, IIRC): ~ 125 MB / s

Như bạn có thể thấy rõ từ ví dụ, chỉ cần liệt kê một thông lượng tối đa cho mỗi thiết bị sẽ đưa ra một bức tranh cực kỳ không chính xác về cách chúng so sánh. SSD chỉ nhanh khoảng 6-7 lần so với ổ cứng khi đọc các tệp lớn một cách tuần tự, nhưng nó nhanh hơn 100 lần khi đọc các khối dữ liệu nhỏ từ các phần khác nhau của đĩa. Tất nhiên, với ổ cứng, hạn chế này phần lớn là do ổ cứng phải di chuyển vật lý đầu r / w đến rãnh mong muốn và sau đó chờ dữ liệu mong muốn quay dưới đầu, trong khi SSD không có bộ phận vật lý nào để di chuyển.

Thời gian biên dịch của chúng tôi đã cải thiện đáng kể hơn nhiều so với so sánh đơn giản về thông lượng tối đa sẽ đề xuất. Các bản dựng trước đây mất hơn 30 phút đã hoàn thành sau khoảng một phút, vì I / O của đĩa trong một bản dựng lớn bao gồm đọc và ghi rất nhiều tệp nguồn riêng biệt không lớn và có thể nằm rải rác trên đĩa .

Bằng cách cung cấp cả thông lượng và số IOPS, bạn có thể hiểu rõ hơn về cách thức một khối lượng công việc nhất định sẽ thực hiện trên một thiết bị lưu trữ nhất định. Nếu bạn chỉ truyền một lượng lớn dữ liệu không bị phân mảnh, bạn sẽ tiến gần đến mức thông lượng tối đa. Tuy nhiên, nếu bạn đang thực hiện nhiều lần đọc và / hoặc ghi nhỏ không được lưu trữ tuần tự trên đĩa, bạn sẽ bị giới hạn bởi IOPS.


Bạn đã đo IOPS chưa?
mFeinstein

3

Để thực hiện thao tác IO, các ổ đĩa phải trải qua một loạt các hoạt động. Đối với một ổ cứng cơ học họ cần.

  1. Tìm kiếm đúng bài hát và chọn đúng đầu.
  2. Đợi đĩa quay đến đúng vị trí.
  3. Thực tế chuyển dữ liệu.

Thời gian dành cho 3 phụ thuộc vào kích thước của khối dữ liệu, nhưng thời gian dành cho 1 và 2 không phụ thuộc vào kích thước của yêu cầu.

Thông lượng tiêu đề và số liệu IOP đại diện cho các trường hợp cực đoan. Các số liệu thông số tiêu đề đại diện cho trường hợp mỗi hoạt động liên quan đến một khối dữ liệu lớn, do đó, ổ đĩa dành phần lớn thời gian thực sự di chuyển dữ liệu.

Con số IOP tiêu đề đại diện cho trường hợp các khối dữ liệu rất nhỏ, do đó, phần lớn thời gian được dành cho việc tìm kiếm các đầu và chờ cho các đĩa quay.

Đối với nhiều khối lượng công việc, các khối đủ nhỏ để số lượng khối được chuyển là quan trọng hơn nhiều so với kích thước của các khối.


2

Có hai loại nút cổ chai mà bạn có thể gặp phải trên khối lượng IO (hoặc nói chung là IO nói chung).

Hiệu suất thực tế thực sự được đo để bao gồm một thành phần dựa trên khối lượng dữ liệu được di chuyển, được chia tỷ lệ theo băng thông có sẵn hoặc kích thước đơn vị tương tự, nhưng cũng có một chi phí liên quan đến các yêu cầu, không đổi, đó là đĩa, mạng hoặc nhiều thứ khác

đơn vị * kích thước + trên đầu. phương trình của một đường thẳng.

Nếu đơn vị lớn, hoặc kích thước lớn, thì việc tính phí dựa trên các khối lượng này, chẳng hạn như mạng điện thoại di động, mặt khác, đôi khi các chi phí lại quan trọng hơn nhiều.

Bạn có thể tự mình thực hiện một thử nghiệm đơn giản này, tạo một thư mục với một vài tệp 1GB (hoặc bất cứ điều gì thực tế, một cái gì đó đủ lớn để mất vài giây để đọc / ghi nó), sau đó tạo một thư mục có một triệu tệp 100 byte . số lượng tệp cho các công cụ nhỏ hơn.

Tôi cho rằng amazon biết về cả hai mô hình sạc và chỉ đơn giản là tìm thấy một mô hình tốt hơn thể hiện khả năng của cơ sở hạ tầng của họ.

Có một giới hạn về kích thước của IOP liên quan rộng rãi đến số lượng đạn mà cửa hàng có thể chuyển trong một "chu kỳ", do đó, các yêu cầu lớn vẫn khiến bạn tốn nhiều IOPS.

Có một phần hay ở đây từ chính amazon về IOPS và chi phí, và 'tiết kiệm' mà họ truyền qua tối ưu hóa

Đặc điểm và giám sát I / O

Không đọc hết nhưng có vẻ thú vị, nếu bạn tò mò về khu vực này.


2

Trả lời câu hỏi của bạn

"Tôi có được thông tin mới nào khi nhìn thấy số IOPS, rằng tôi sẽ không thấy số thông lượng (MB / s)?"

trực tiếp, đó là số lượng hoạt động IO của độ sâu hàng đợi được chỉ định và kích thước tệp có thể lưu trữ thực hiện mỗi giây . Bạn có thể tính toán thông lượng ở các điều kiện nhất định bằng công thức sau:

Kích thước tệp IOPS * = Thông lượng

Kiểm tra lưu trữ có thể tạo ra số lượng IOPS khác nhau tùy thuộc vào kích thước tệp và độ sâu hàng đợi. Ở độ sâu hàng đợi = 1 hoặc 2, bộ điều khiển sẽ không tận dụng bộ nhớ đệm, trong khi ở độ sâu hàng đợi 32, 256, số 512 tăng lên nhiều lần và không thay đổi nhiều. Ở kích thước tệp, số lượng IOPS 128KB có thể thấp hơn bên cạnh các tệp 4KB, nhưng thông lượng - cao hơn.

Cách tốt nhất để đánh giá hiệu suất của bộ lưu trữ là tìm kiếm IOPS và kiểm tra thông lượng ở một số kích thước khối và độ sâu hàng đợi khác nhau.


Tôi tin rằng bạn có thể nhầm lẫn IOPS với thông lượng một chút ... Thông lượng không phải là đồng nghĩa với truy cập liên tục, nhưng tổng MB / s lưu trữ có thể xử lý tại một thời điểm nhất định .... Vì vậy, khi bạn nói rằng HDD và SSD sẽ có cùng thông lượng, nó dành cho truy cập liên tục ... Vì cũng có thông lượng cho truy cập ngẫu nhiên ... Nói chung là rất ít cho các ổ cứng nói chung vì thời gian tìm kiếm.
mFeinstein

Vì vậy, bạn nên đưa vào câu trả lời của mình rằng bạn đang đề cập đến truy cập liên tục ở đầu và truy cập ngẫu nhiên ở cuối, vì IOPS cũng không đồng nghĩa với truy cập ngẫu nhiên ... Chỉ khi sử dụng IOPS như một ý nghĩa hơn đo lường
mFeinstein

@mFeinstein Tôi đã chỉnh sửa câu trả lời, hãy xem.
Eugene

1

Nói chung, IOPS khó lấy hơn thông lượng. Nếu bạn có nhiều IOPS, bạn sẽ có đủ thông lượng trong hầu hết thời gian.

Với các ổ đĩa cứng cổ điển, số lượng trục là yếu tố giới hạn của bạn, vì đầu phải được di chuyển một cách vật lý trên mỗi ổ đĩa: và nó rất chậm. SSD có dung lượng IOPS tốt hơn nhiều.

Nếu bạn chỉ có một người dùng, sao chép một tệp lớn vào mạng, bạn có thể chỉ có hàng tá tìm kiếm để lấy dữ liệu và phần còn lại sẽ chỉ truyền phát từ đĩa.

Tuy nhiên, nếu bạn đang truy cập cơ sở dữ liệu hoặc có nhiều người dùng đồng thời, bạn sẽ phải truy cập vào các phần khác nhau của bộ nhớ cùng lúc, với IOPS tăng vọt.

Chỉ cần cập nhật song song 10 hàng trên cơ sở dữ liệu quan hệ có thể kết thúc việc tạo ra hàng trăm IO: đọc chỉ mục, đọc dữ liệu, nối thêm logfile, cập nhật chỉ mục và dữ liệu. Hầu hết các hệ điều hành và cơ sở dữ liệu đều cố gắng hết sức để hạn chế số lượng IO bằng cách lưu vào bộ nhớ cache và trì hoãn / nhóm các IO khi có thể.


1

Tôi cũng sẽ trả lời câu hỏi của riêng mình vì tôi nghĩ hầu hết các câu trả lời đều lạc đề và câu trả lời có thể đơn giản hơn nhiều:

Nếu bạn chỉ nhìn vào thông lượng thiết bị lưu trữ của mình, bạn có thể bỏ lỡ những gì đang xảy ra ... Nếu có thông lượng thấp (MB / s thấp), bạn có thể có một thiết bị chậm HOẶC có nhiều quyền truy cập ngẫu nhiên trong ổ cứng hoặc một số thiết bị khác mà không xử lý truy cập ngẫu nhiên độc đáo.

Bằng cách xem xét IOPS và biết kích thước khối của mỗi thao tác I / O, bạn có thể biết có bao nhiêu quyền truy cập mà thiết bị lưu trữ có thể xử lý và thông lượng của các IOPS này (kích thước khối * IOPS) là bao nhiêu.

Vì vậy, nhìn vào IOPS cao, bạn có thể kết luận rằng thiết bị lưu trữ của bạn đang xử lý rất nhiều truy cập ngẫu nhiên, ngay cả khi điều này có thông lượng thấp .... hoặc có thể bạn đang xem IOPS thấp có cùng thông lượng thấp, điều đó có nghĩa là thiết bị của bạn chỉ là nhàn rỗi.

Vì vậy, bằng cách xem IOPS, chúng ta có thể hiểu rõ ý nghĩa của thông lượng, cả hai đều bổ sung cho nhau.


IOPS = Đầu vào / Đầu ra mỗi giây, nó không phải là về số nhiều và không nên bỏ qua dấu S. :)
Eugene

1
Không phải là về số nhiều, tôi đã thấy một số người đề cập đến IOP là viết tắt của "I / O OPANCE" vì nó nghe có vẻ như ... Nhưng vâng, điều này có thể dẫn đến sự nhầm lẫn, vì vậy tôi sẽ thay thế nó, cảm ơn
mFeinstein
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.