Trên một hệ thống hiện đại, việc sử dụng nén đĩa có cho tôi hiệu năng tổng thể tốt hơn không?


10

Có vẻ như việc tăng CPU đã vượt quá tốc độ đĩa trong một thời gian. Giả sử một máy tính để bàn hoặc máy tính xách tay có CPU Intel / AMD lõi kép hiện đại và một đĩa SATA trung bình duy nhất, liệu việc nén trên hầu hết tất cả các đĩa có cho hiệu năng tổng thể tốt hơn? Về cơ bản, băng thông đĩa giảm có nhiều hơn bù cho tải CPU tăng không? Tôi chắc chắn câu trả lời thực sự là "nó phụ thuộc vào những gì bạn đang làm". Bằng cách đặt câu hỏi này, tôi hy vọng sẽ có ai đó thực hiện đường ống này và đưa ra một số ví dụ hoặc cạm bẫy.


xác định hiệu suất? Như tăng tốc hay tăng không gian? Bạn có thể sẽ không nhận thấy bất kỳ sự gia tăng tốc độ nào nhưng chắc chắn sẽ tìm thấy các byte dự phòng hữu ích! :-p
Christopher Lightfoot

Câu trả lời:


9

Có, nén đĩa có thể cung cấp hiệu suất tốt hơn trong các trường hợp cụ thể:

  • Ứng dụng của bạn bị giới hạn thông lượng đĩa: CPU hiện đại và (de) thuật toán nén có thể chạy ở băng thông cao hơn nhiều so với các đĩa hiện đại trong các lần chuyển dài. Bất kỳ sự giảm nào về số lượng dữ liệu di chuyển đến hoặc từ đĩa đĩa đều là một chiến thắng trong trường hợp này
  • Sẽ mất ít thời gian hơn để (giảm) nén dữ liệu sẽ chuyển sang đĩa hơn so với sự khác biệt về thời gian truyền và bạn có chu kỳ CPU để dự phòng

Có một lý do cả ZFS và Btrfs, cả hai thiết kế trường xanh gần đây, bao gồm các điều khoản để nén.

Trong không gian HPC, khi một ứng dụng đang kiểm tra điểm từ bộ nhớ đến đĩa, CPU thường không làm gì hữu ích cả. Thời gian này về cơ bản là trên cao. Bất kỳ việc sử dụng CPU để giảm thời gian này là một chiến thắng.


Đĩa truyền phát đa phương tiện có lẽ là nơi duy nhất có lợi ích xảy ra vì kích thước khối đủ lớn. Các đĩa hệ điều hành tiêu chuẩn sẽ * luôn luôn bị ảnh hưởng.
Ryaner

5
Truyền phát phương tiện không phải là một ứng dụng hấp dẫn để nén mức hệ thống lưu trữ. Dữ liệu phải được nén ở định dạng ứng dụng cụ thể tốt hơn nhiều.
Phil Miller

5

Nén đĩa sẽ không bao giờ cung cấp cho bạn hiệu suất tốt hơn.

Nó có thể cho bạn gần như không bị phạt do CPU hiện đại nhanh, nhưng đó là một điều hoàn toàn khác.

Bạn cho rằng phải chuyển ít dữ liệu từ / sang đĩa có thể cải thiện hiệu suất; nhưng chuyển dữ liệu lớn hầu như không bao giờ là nút cổ chai I / O: nút cổ chai thực sự đang tìm kiếm thời gian và độ trễ. Các đĩa cứng hiện đại thực sự rất nhanh trong việc truyền dữ liệu bền vững với các tệp lớn, điều làm chúng chậm lại là việc truyền ít từ tất cả các đĩa.

Một số tình huống:

  • Tập tin phương tiện truyền thông. Những cái đó thường đã được tự nén (JPEG, MPEG, MP3), do đó, nén chúng ở cấp hệ thống tập tin sẽ không giúp ích gì cả; thay vào đó, nó sẽ làm mọi thứ trở nên tồi tệ hơn, bởi vì tài nguyên CPU đã cần thiết để mã hóa / giải mã chúng.
  • Cơ sở dữ liệu. Chúng thường được đọc từ / ghi thành các cụm ngẫu nhiên nhỏ, do đó, việc nén chúng sẽ không chỉ không có lợi ích gì, mà còn làm giảm hiệu suất, vì DBMS không thể xác định chính xác vị trí mà dữ liệu vật lý cần truy cập trên đĩa lưu trữ.
  • Pagefile. Điều này thường khá lớn, nhưng HĐH cần xử lý các khối dữ liệu rất nhỏ trên đó và cần thực hiện điều đó rất chính xác ("Đọc 4K tại địa chỉ vật lý X"); nén nó thường là không thể, nhưng ngay cả khi nó là, nó sẽ hoàn toàn lãng phí thời gian và tài nguyên: nó sẽ cung cấp khả năng nén gần như bằng không, do tính chất "dữ liệu ngẫu nhiên hoàn toàn" của tệp này.

1
Vì vậy, chuyển ít dữ liệu từ đĩa cung cấp không có lợi ích?
kbyrd

Đã chỉnh sửa để trả lời rằng :-)
Massimo

3
không bao giờ là một từ rất hẹp. Băng thông thô từ đĩa và qua bus pci thường là nút cổ chai với một số công việc tôi làm. Nén có thể giúp thực hiện rất nhiều, đặc biệt là nếu bạn đã thực hiện các biện pháp để loại bỏ một số tắc nghẽn khác mà bạn đề cập
JamesRyan

1
Tôi cũng sẽ do dự khi nói "không bao giờ". Cũng có thể có các kịch bản trong đó băng thông đĩa là nút cổ chai. Nhưng bạn có thể đúng rằng đây không phải là trường hợp điển hình.
sleske

2
đĩa i / o hầu như luôn luôn là nút cổ chai trong cơ sở dữ liệu
Nick Kavadias

3

Có những tình huống cụ thể đã thực hiện việc này ở cấp độ cho mỗi ứng dụng, chẳng hạn như nén video - một hệ thống không thể đọc video chất lượng HD đủ nhanh từ một dsk thay vào đó có thể đọc thông tin nén và mở rộng nó bằng bộ nhớ và sức mạnh CPU . Không có lý do gì điều này cũng không thể xảy ra đối với các tình huống cụ thể khác, nhưng điều này có thể được xử lý tốt nhất ở cấp ứng dụng để các phương pháp nén được sử dụng được tối ưu hóa cho mục đích của chúng.

Hãy nhớ rằng chi phí hiệu năng của giải nén là đáng giá nếu toàn bộ thông lượng tăng, do đó, ý tưởng sẽ không bị loại bỏ - Tôi không nghĩ rằng chúng tôi đã sẵn sàng cho việc nén hiệu năng cho mục đích chung nhưng về mặt lý thuyết là có thể để trao đổi một tài nguyên mà bạn có dư thừa (CPU & bộ nhớ) để tăng ở nơi khác (tổng số dữ liệu được đọc từ ổ cứng)


3

Bạn đã trả lời câu hỏi của riêng bạn! Nó phụ thuộc thực sự là câu trả lời.

Khái quát nhất tốt nhất tôi có thể làm là:

Nếu bạn có một ứng dụng cơ sở dữ liệu bị hạn chế đọc đĩa , thì có! hiệu suất tốt hơn.

Tôi không nghĩ rằng đây là trường hợp của hầu hết các hoạt động bạn sẽ thực hiện trên máy tính để bàn / máy tính xách tay.

Trong miền của tôi (SQL Server) tôi biết rằng cơ sở dữ liệu báo cáo dưới tải nặng có thể có hiệu suất tốt hơn nếu sử dụng nén. Tôi biết điều tương tự cũng đúng với mysql.

Microsoft có một trang giấy trắng về các tính năng nén của họ trong SQL Server 2008. Không đọc chính xác trừ khi DBA của bạn, nhưng đây là một biểu đồ hỗ trợ khái quát hóa của tôi:

văn bản thay thế


0

Tốc độ CPU luôn nhanh hơn tốc độ đĩa. IMHO, nén sẽ tăng chi phí và do đó làm giảm hiệu suất.


nhưng nó phụ thuộc vào những gì bạn đang làm :-)
Josh

Làm sao vậy Một chi phí gia tăng là một chi phí gia tăng. Bạn không thể mua tiền bằng cách tiêu tiền (trừ khi đó là tiền giả, nhưng đó là một câu chuyện khác).
Mark Henderson

Chức năng nén và giải nén các tệp, bất kể chúng có nhỏ hơn do nén hay không, sẽ giới thiệu chi phí hiệu năng. Khi tệp được đọc từ đĩa vào bộ nhớ, nó phải được giải nén. Khi nó được ghi từ bộ nhớ vào đĩa, nó phải được nén.
joeqwerty

3
nhưng nếu cpu của bạn không làm gì cả và băng thông đĩa của bạn là nút cổ chai, cpu của bạn sẽ kết thúc công việc nhiều hơn nhưng hiệu suất tổng thể sẽ tăng lên. Nó thực sự phụ thuộc vào loại dữ liệu bạn đang truy xuất và những gì bạn đang làm với nó.
JamesRyan

0

Tôi đã đọc một cái gì đó tương tự như ngày hôm qua về OSX và nó đang nén hệ thống tập tin - Về cơ bản câu trả lời xoay quanh những gì bạn muốn nén - trong ví dụ này, anh ấy đang nói về dữ liệu "FAT"; cấu trúc tệp, thuộc tính, siêu dữ liệu, vv khi được lưu trữ cùng nhau có thể được nén để tiết kiệm dung lượng và được đọc vào cpu nhanh hơn là tìm kiếm đầu trên khắp mọi nơi để tìm dữ liệu cho mỗi tệp ...

Dù sao, đáng để đọc nếu bạn đang nghĩ về những điều như vậy :-p

Nhưng nén không chỉ là tiết kiệm dung lượng đĩa. Đây cũng là một ví dụ kinh điển về chu kỳ giao dịch CPU để giảm độ trễ và băng thông I / O. Trong vài thập kỷ qua, hiệu suất CPU đã trở nên tốt hơn (và tài nguyên điện toán dồi dào hơn về điều đó sau này) với tốc độ nhanh hơn nhiều so với hiệu suất đĩa đã tăng lên. Thời gian tìm kiếm đĩa cứng hiện đại và độ trễ quay vẫn được đo bằng mili giây. Trong một mili giây, CPU 2 GHz trải qua hai triệu chu kỳ. Và sau đó, tất nhiên, vẫn còn thời gian chuyển dữ liệu thực tế để xem xét.

Cấp, một số mức bộ nhớ đệm trên toàn hệ điều hành và phần cứng hoạt động mạnh mẽ để che giấu những sự chậm trễ này. Nhưng những bit đó phải ra khỏi đĩa vào một lúc nào đó để lấp đầy những bộ đệm đó. Nén có nghĩa là ít bit hơn phải được chuyển. Do tình trạng tài nguyên CPU gần như hài hước trên máy Mac đa lõi hiện đại trong sử dụng bình thường, tổng thời gian cần thiết để chuyển tải trọng nén từ đĩa và sử dụng CPU để giải nén nội dung của nó vào bộ nhớ thường sẽ ít hơn nhiều so với thời gian cần phải chuyển dữ liệu ở dạng không nén.

Điều đó giải thích các lợi ích hiệu suất tiềm năng của việc truyền ít dữ liệu hơn, nhưng việc sử dụng các thuộc tính mở rộng để lưu trữ nội dung tệp thực sự có thể làm mọi thứ nhanh hơn. Tất cả phải làm với địa phương dữ liệu.

Nếu có một thứ làm chậm đĩa cứng hơn là truyền một lượng lớn dữ liệu, thì nó sẽ di chuyển đầu của nó từ một phần của đĩa sang một phần khác. Mỗi lần di chuyển có nghĩa là thời gian để đầu bắt đầu di chuyển, sau đó dừng lại, sau đó đảm bảo rằng nó được đặt đúng vị trí trên vị trí mong muốn, sau đó đợi đĩa quay để đặt các bit mong muốn bên dưới nó. Đây đều là những bộ phận thực tế, vật lý, chuyển động, và thật đáng kinh ngạc khi họ thực hiện điệu nhảy của mình nhanh chóng và hiệu quả như họ, nhưng vật lý có giới hạn của nó. Những chuyển động này là những kẻ giết hiệu suất thực sự để lưu trữ quay như đĩa cứng.

Định dạng âm lượng HFS + lưu trữ tất cả thông tin của nó về các tệp siêu dữ liệu của siêu dữ liệu ở hai vị trí chính trên đĩa: Tệp Danh mục, lưu trữ ngày, quyền, quyền sở hữu và một loạt các thứ khác và Tệp thuộc tính, lưu trữ "các nhánh . "

Các thuộc tính mở rộng trong HFS + được triển khai như các nhánh được đặt tên trong Tệp thuộc tính. Nhưng không giống như các nhánh tài nguyên, có thể rất lớn (tối đa kích thước tệp tối đa được hệ thống tệp hỗ trợ), các thuộc tính mở rộng trong HFS + được lưu trữ "nội tuyến" trong Tệp thuộc tính. Trong thực tế, điều này có nghĩa là giới hạn khoảng 128 byte cho mỗi thuộc tính. Nhưng điều đó cũng có nghĩa là đầu đĩa không cần phải đi đến một phần khác của đĩa để lấy dữ liệu thực tế.

Như bạn có thể tưởng tượng, các khối đĩa tạo nên các tệp Danh mục và Thuộc tính thường được truy cập, và do đó nhiều khả năng hơn là nằm trong bộ đệm ở đâu đó. Tất cả những âm mưu này để làm cho việc lưu trữ hoàn toàn một tệp, bao gồm cả siêu dữ liệu của nó trong dữ liệu của nó, trong Danh mục cấu trúc cây B và các tệp Thuộc tính giành được hiệu suất tổng thể. Ngay cả một tải trọng tám byte có độ bóng đến 25 byte cũng không phải là vấn đề đáng lo ngại, miễn là nó vẫn nhỏ hơn kích thước khối phân bổ để lưu trữ dữ liệu thông thường và miễn là tất cả phù hợp với nút cây B trong Tệp thuộc tính Hệ điều hành phải đọc toàn bộ bằng mọi cách.

Có những đóng góp đáng kể khác cho dấu chân đĩa giảm của Snow Leopard (ví dụ: loại bỏ các bản địa hóa không cần thiết và các tệp "designable.nib") nhưng cho đến nay, nén HFS + là điều thú vị nhất về mặt kỹ thuật.

Từ: http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/3


Tôi đã nghĩ về điều này trước đây, nhưng bài viết chính xác đó đã thôi thúc tôi đăng câu hỏi này.
kbyrd

cười lớn. Thú vị :-p
Christopher Lightfoot

0

Việc nén Microsoft Disk là OLD xấu xí. Hầu như không thể so sánh về tỷ lệ với phương pháp ARJ từ những năm 80. Nhưng, ngay cả việc nén của Microsoft cũng có thể cung cấp hiệu suất tốt hơn trên các ổ cứng (laptop) rất chậm. Đặc biệt là nếu có đủ RAM để ghi bộ đệm và ngăn ghi quá mức.

Quá trình ghi là một điểm yếu của bất kỳ phương pháp nén kích hoạt truy cập ngẫu nhiên nào.

Vì vậy, nếu bạn muốn ổ đĩa nén, tốt nhất bạn nên chuyển sang một loại Linux nào đó.

Nén đĩa cũng rất phù hợp với ổ đĩa RAM, không cần cho bạn biết lý do.


1
Bạn có thể thêm một số dữ liệu hỗ trợ, có thể so sánh hiệu suất giữa các giải pháp dựa trên Windows và Linux không?
psarossy

Vâng, nếu bạn sắp sửa tạo ra một chủ đề 3,5 năm tuổi, tốt hơn là bạn nên mang đến một số sự thật mới, khó khăn.
MDMarra

-1

Nghi ngờ. Nén và giải nén không chỉ liên quan đến đĩa và CPU; đặc biệt sẽ có rất nhiều chuyển dữ liệu đến và từ bộ nhớ (ngoài chi phí truyền tải tiêu chuẩn mà không nén) sẽ thực sự gây tổn hại về lỗi trang.


-1

Nói tóm lại, không, có lẽ bạn sẽ không đạt được hiệu suất.

Mặc dù nén sẽ cải thiện hiệu suất lưu trữ của bạn, nhưng nó sẽ làm giảm đáng kể tốc độ xử lý của bạn. Nó có thể đi xuống loại tập tin bạn sẽ giải nén. Nếu bạn chỉ làm việc với word, excel và các kiểu tệp cơ bản khác thì hãy tiếp tục và nén chúng. Nếu các tệp riêng lẻ cồng kềnh hơn, bạn sẽ hy sinh nhiều thời gian hơn.

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.