Nén an toàn tốc độ cao (Tiếp theo)

Bài viết này đã là bài thứ hai về chủ đề nén dữ liệu tốc độ cao. Bài viết đầu tiên mô tả một máy nén hoạt động ở tốc độ 10 GB/giây. trên mỗi lõi bộ xử lý (nén tối thiểu, RTT-Min).

Этот компрессор, уже внедрен в оборудование криминалистических дубликаторов для скоростного сжатия дампов носителей информации и усиления стойкости криптографии, также он может применяться для сжатия образов виртуальных машин и своп файлов оперативной памяти при сохранении их на быстродействующих SSD накопителях.

В первой статье также анонсировалась разработка алгоритма компрессии для сжатия резервных копий HDD и SSD дисковых накопителей (среднее сжатие, RTT-Mid) с существенно улучшенными параметрами сжатия данных. К настоящему времени этот компрессор полностью готов и данная статья именно о нем.

Máy nén thực hiện thuật toán RTT-Mid cung cấp tỷ lệ nén tương đương với các trình lưu trữ tiêu chuẩn như WinRar, 7-Zip, hoạt động ở chế độ tốc độ cao. Đồng thời, tốc độ hoạt động của nó ít nhất cũng cao hơn gấp nhiều lần.

Скорость упаковки/распаковки данных является критическим параметром определяющим область применения технологий компрессии. Вряд ли кому придет в голову сжимать терабайт данных со скоростью 10-15 МегаБайт в секунду (именно такая скорость архиваторов в стандартном режиме компрессии), ведь на это придется затратить почти двадцать часов при полной загрузке процессора…

Mặt khác, cùng một terabyte có thể được sao chép ở tốc độ khoảng 2-3Gigabyte mỗi giây trong khoảng mười phút.

Do đó, việc nén thông tin có dung lượng lớn là rất quan trọng nếu nó được thực hiện ở tốc độ không thấp hơn tốc độ đầu vào/đầu ra thực. Đối với các hệ thống hiện đại, tốc độ này ít nhất là 100 Megabyte mỗi giây.

Máy nén hiện đại chỉ có thể tạo ra tốc độ như vậy ở chế độ “nhanh”. Ở chế độ hiện tại này, chúng tôi sẽ so sánh thuật toán RTT-Mid với các máy nén truyền thống.

Thử nghiệm so sánh thuật toán nén mới

Máy nén RTT-Mid hoạt động như một phần của chương trình thử nghiệm. Trong một ứng dụng “đang hoạt động” thực sự, nó hoạt động nhanh hơn nhiều, nó sử dụng đa luồng một cách khôn ngoan và sử dụng trình biên dịch “bình thường”, không phải C#.

Поскольку используемые в сравнительном тесте компрессоры построены на разных принципах и различные типы данных сжимают по разному, то для объективности теста использовался метод замера «средней температуры по больнице»…

Tệp kết xuất theo từng khu vực của đĩa logic với hệ điều hành Windows 10 đã được tạo; đây là sự kết hợp tự nhiên nhất của các cấu trúc dữ liệu khác nhau thực sự có sẵn trên mọi máy tính. Việc nén tệp này sẽ cho phép bạn so sánh tốc độ và mức độ nén của thuật toán mới với các máy nén tiên tiến nhất được sử dụng trong các bộ lưu trữ hiện đại.

Đây là tập tin kết xuất:

Nén an toàn tốc độ cao (Tiếp theo)

Tệp kết xuất được nén bằng máy nén PTT-Mid, 7-zip và WinRar. Máy nén WinRar và 7-zip được đặt ở tốc độ tối đa.

Máy nén đang chạy 7-zip:

Nén an toàn tốc độ cao (Tiếp theo)

Nó tải bộ xử lý lên 100%, trong khi tốc độ trung bình để đọc kết xuất ban đầu là khoảng 60 MegaBytes/giây.

Máy nén đang chạy WinRAR:

Nén an toàn tốc độ cao (Tiếp theo)

Tình trạng tương tự, tải bộ xử lý gần như 100%, tốc độ đọc kết xuất trung bình khoảng 125 Megabyte/giây.

Как и в предыдущем случае, скорость работы архиватора ограничена возможностями процессора.

Chương trình kiểm tra máy nén hiện đang chạy RTT-Mid:

Nén an toàn tốc độ cao (Tiếp theo)

Ảnh chụp màn hình cho thấy bộ xử lý được tải ở mức 50% và không hoạt động trong thời gian còn lại vì không có nơi nào để tải dữ liệu nén lên. Đĩa tải lên dữ liệu (Đĩa 0) gần như đã được tải đầy đủ. Tốc độ đọc dữ liệu (Đĩa 1) rất khác nhau, nhưng trung bình hơn 200 MegaBytes/giây.

Tốc độ của máy nén bị hạn chế trong trường hợp này bởi khả năng ghi dữ liệu nén vào Đĩa 0.

Bây giờ tỷ lệ nén của kho lưu trữ kết quả:

Nén an toàn tốc độ cao (Tiếp theo)

Nén an toàn tốc độ cao (Tiếp theo)

Nén an toàn tốc độ cao (Tiếp theo)

Có thể thấy rằng máy nén RTT-Mid đã thực hiện công việc nén tốt nhất; kho lưu trữ mà nó tạo ra nhỏ hơn 1,3 GigaBytes so với kho lưu trữ WinRar và nhỏ hơn 2,1 GigaBytes so với kho lưu trữ 7z.

Thời gian dành cho việc tạo kho lưu trữ:

  • 7-zip – 26 phút 10 giây;
  • WinRar – 17 phút 40 giây;
  • RTT-Mid – 7 phút 30 giây.

Do đó, ngay cả một chương trình thử nghiệm, không được tối ưu hóa, sử dụng thuật toán RTT-Mid, cũng có thể tạo một kho lưu trữ nhanh hơn hai lần rưỡi, trong khi kho lưu trữ hóa ra lại nhỏ hơn đáng kể so với các đối thủ cạnh tranh...

Những người không tin vào ảnh chụp màn hình có thể tự kiểm tra tính xác thực của chúng. Chương trình thử nghiệm có sẵn tại liên kết, tải về và kiểm tra.

Nhưng chỉ trên các bộ xử lý có hỗ trợ AVX-2, không hỗ trợ các hướng dẫn này, máy nén không hoạt động và không kiểm tra thuật toán trên các bộ xử lý AMD cũ hơn, chúng thực hiện các lệnh AVX chậm...

Phương pháp nén được sử dụng

Thuật toán sử dụng phương pháp lập chỉ mục các đoạn văn bản lặp lại theo độ chi tiết byte. Phương pháp nén này đã được biết đến từ lâu nhưng không được sử dụng vì thao tác so khớp rất tốn kém về tài nguyên cần thiết và tốn nhiều thời gian hơn so với việc xây dựng từ điển. Vì vậy, thuật toán RTT-Mid là một ví dụ điển hình về việc chuyển “quay lại tương lai”...

Trình nén PTT sử dụng máy quét tìm kiếm kết hợp tốc độ cao độc đáo, cho phép chúng tôi tăng tốc quá trình nén. Máy scan tự chế, đây là “sự quyến rũ của tôi…”, “nó khá đắt, vì nó hoàn toàn thủ công” (viết bằng hợp ngữ).

Trình quét tìm kiếm trận đấu được thực hiện theo sơ đồ xác suất hai cấp độ: đầu tiên, sự hiện diện của “dấu hiệu” của trận đấu được quét và chỉ sau khi xác định được “dấu hiệu” ở nơi này, quy trình phát hiện trận đấu thực sự được bắt đầu.

Cửa sổ tìm kiếm trận đấu có kích thước không thể đoán trước, tùy thuộc vào mức độ entropy trong khối dữ liệu được xử lý. Đối với dữ liệu hoàn toàn ngẫu nhiên (không thể nén), nó có kích thước megabyte, đối với dữ liệu có số lần lặp lại, nó luôn lớn hơn một megabyte.

Nhưng nhiều định dạng dữ liệu hiện đại không thể nén được và việc chạy một máy quét tiêu tốn nhiều tài nguyên thông qua chúng là vô ích và lãng phí, vì vậy máy quét sử dụng hai chế độ hoạt động. Đầu tiên, các phần của văn bản nguồn có thể lặp lại sẽ được tìm kiếm; thao tác này cũng được thực hiện bằng phương pháp xác suất và được thực hiện rất nhanh (với tốc độ 4-6 GigaBytes/giây). Sau đó, các khu vực có thể khớp sẽ được xử lý bằng máy quét chính.

Nén chỉ mục không hiệu quả lắm, bạn phải thay thế các đoạn trùng lặp bằng chỉ mục và mảng chỉ mục làm giảm đáng kể tỷ lệ nén.

Để tăng tỷ lệ nén, không chỉ các kết quả khớp hoàn chỉnh của chuỗi byte được lập chỉ mục mà còn cả các kết quả một phần khi chuỗi chứa các byte khớp và không khớp. Để thực hiện điều này, định dạng chỉ mục bao gồm trường mặt nạ so khớp cho biết các byte trùng khớp của hai khối. Để nén thậm chí còn lớn hơn, việc lập chỉ mục được sử dụng để xếp chồng một số khối khớp một phần lên khối hiện tại.

Tất cả điều này giúp có thể đạt được tỷ lệ nén trong máy nén PTT-Mid tương đương với các máy nén được chế tạo bằng phương pháp từ điển nhưng hoạt động nhanh hơn nhiều.

Tốc độ của thuật toán nén mới

Nếu máy nén hoạt động với việc sử dụng độc quyền bộ nhớ đệm (cần 4 Megabyte cho mỗi luồng), thì tốc độ hoạt động dao động từ 700-2000 Megabyte/giây. trên mỗi lõi bộ xử lý, tùy thuộc vào loại dữ liệu được nén và phụ thuộc ít vào tần số hoạt động của bộ xử lý.

Với việc triển khai máy nén đa luồng, khả năng mở rộng hiệu quả được xác định bởi kích thước của bộ đệm cấp ba. Ví dụ: có 9 MegaByte bộ nhớ đệm “trên bo mạch”, sẽ chẳng ích gì khi khởi chạy nhiều hơn hai luồng nén; tốc độ sẽ không tăng lên từ điều này. Nhưng với bộ đệm 20 Megabyte, bạn đã có thể chạy năm luồng nén.

Ngoài ra, độ trễ của RAM trở thành một thông số quan trọng quyết định tốc độ của máy nén. Thuật toán sử dụng quyền truy cập ngẫu nhiên vào OP, một số trong đó không vào được bộ nhớ đệm (khoảng 10%) và phải ở chế độ chờ, chờ dữ liệu từ OP, làm giảm tốc độ hoạt động.

Ảnh hưởng đáng kể đến tốc độ của máy nén và hoạt động của hệ thống đầu vào/đầu ra dữ liệu. Yêu cầu tới OP từ khối I/O yêu cầu dữ liệu từ CPU, điều này cũng làm giảm tốc độ nén. Vấn đề này rất quan trọng đối với máy tính xách tay và máy tính để bàn; đối với máy chủ, vấn đề này ít nghiêm trọng hơn do bộ điều khiển truy cập bus hệ thống tiên tiến hơn và RAM đa kênh.

Trong suốt nội dung của bài viết, chúng tôi nói về việc nén; việc giải nén vẫn nằm ngoài phạm vi của bài viết này vì “mọi thứ đều được bao phủ trong sô cô la”. Quá trình giải nén nhanh hơn nhiều và bị giới hạn bởi tốc độ I/O. Một lõi vật lý trong một luồng dễ dàng cung cấp tốc độ giải nén 3-4 GB/giây.

Это связано с отсутствием в процессе распаковки операции поиска совпадений, которая «сжирает» основные ресурсы процессора и кеш-памяти при компрессии.

Độ tin cậy của việc lưu trữ dữ liệu nén

Như tên của toàn bộ loại phần mềm sử dụng tính năng nén dữ liệu (trình lưu trữ) gợi ý, chúng được thiết kế để lưu trữ thông tin lâu dài, không phải trong nhiều năm mà trong nhiều thế kỷ và thiên niên kỷ...

Trong quá trình lưu trữ, phương tiện lưu trữ sẽ mất một số dữ liệu, đây là ví dụ:

Nén an toàn tốc độ cao (Tiếp theo)

Этому «аналоговому» носителю информации тысяча лет, некоторые фрагменты утеряны, но в целом информация «читаема»…

Không có nhà sản xuất chịu trách nhiệm nào về hệ thống lưu trữ dữ liệu kỹ thuật số hiện đại và phương tiện kỹ thuật số cung cấp cho họ sự đảm bảo về an toàn dữ liệu hoàn toàn trong hơn 75 năm.
Và đây là một vấn đề, nhưng là một vấn đề bị trì hoãn, con cháu chúng ta sẽ giải quyết nó…

Hệ thống lưu trữ dữ liệu số có thể mất dữ liệu không chỉ sau 75 năm, các lỗi trong dữ liệu có thể xuất hiện bất cứ lúc nào, ngay cả trong quá trình ghi, họ cố gắng giảm thiểu những biến dạng này bằng cách sử dụng tính năng dự phòng và sửa chúng bằng hệ thống sửa lỗi. Các hệ thống dự phòng và chỉnh sửa không phải lúc nào cũng có thể khôi phục được thông tin bị mất và nếu có thì không có gì đảm bảo rằng hoạt động khôi phục đã được hoàn thành chính xác.

Và đây cũng là một vấn đề lớn, nhưng không phải vấn đề trì hoãn mà là vấn đề hiện tại.

Các máy nén hiện đại được sử dụng để lưu trữ dữ liệu số được xây dựng dựa trên nhiều sửa đổi khác nhau của phương pháp từ điển và đối với các kho lưu trữ như vậy, việc mất một phần thông tin sẽ là một sự kiện nghiêm trọng; thậm chí còn có một thuật ngữ được thiết lập cho tình huống như vậy - một kho lưu trữ "bị hỏng" ...

Độ tin cậy thấp của việc lưu trữ thông tin trong kho lưu trữ bằng cách nén từ điển có liên quan đến cấu trúc của dữ liệu nén. Thông tin trong kho lưu trữ như vậy không chứa văn bản nguồn, số lượng mục trong từ điển được lưu trữ ở đó và bản thân từ điển được sửa đổi linh hoạt bởi văn bản nén hiện tại. Nếu một đoạn lưu trữ bị mất hoặc bị hỏng, tất cả các mục lưu trữ tiếp theo sẽ không thể được xác định bằng nội dung hoặc độ dài của mục trong từ điển, vì không rõ số mục từ điển tương ứng với số nào.

Không thể khôi phục thông tin từ kho lưu trữ “bị hỏng” như vậy.

Thuật toán RTT dựa trên phương pháp lưu trữ dữ liệu nén đáng tin cậy hơn. Nó sử dụng phương pháp chỉ mục để tính toán các đoạn lặp lại. Cách tiếp cận nén này cho phép bạn giảm thiểu hậu quả của việc bóp méo thông tin trên phương tiện lưu trữ và trong nhiều trường hợp, tự động sửa các biến dạng phát sinh trong quá trình lưu trữ thông tin.
Điều này là do tệp lưu trữ trong trường hợp nén chỉ mục có chứa hai trường:

  • một trường văn bản nguồn có các phần lặp lại bị loại bỏ khỏi nó;
  • поле индексов.

Критически важное для восстановления информации поле индексов, не велико по размеру и его можно дублировать для надежности хранения данных. Поэтому даже если будет утерян фрагмент исходного текста или индексного массива, то вся остальная информация будет восстанавливаться без проблем, как на картинке с «аналоговым» носителем информации.

Nhược điểm của thuật toán

Không có ưu điểm nào mà không có nhược điểm. Phương pháp nén chỉ mục không nén các chuỗi lặp lại ngắn. Điều này là do những hạn chế của phương pháp chỉ mục. Các chỉ mục có kích thước tối thiểu là 3 byte và có thể có kích thước lên tới 12 byte. Nếu một sự lặp lại có kích thước nhỏ hơn chỉ mục mô tả nó thì nó sẽ không được tính đến, bất kể tần suất lặp lại như vậy được phát hiện trong tệp nén.

Phương pháp nén từ điển truyền thống nén hiệu quả nhiều lần lặp lại có độ dài ngắn và do đó đạt được tỷ lệ nén cao hơn nén chỉ mục. Đúng, điều này đạt được là do tải trọng cao trên bộ xử lý trung tâm; để phương pháp từ điển bắt đầu nén dữ liệu hiệu quả hơn phương pháp chỉ mục, nó phải giảm tốc độ xử lý dữ liệu xuống 10-20 megabyte mỗi giây trên thực tế. cài đặt máy tính với tải CPU đầy đủ.

Такие низкие скорости неприемлемы для современных систем хранения данных и представляют больше «академический» интерес, нежели практический.

Mức độ nén thông tin sẽ được tăng lên đáng kể trong lần sửa đổi tiếp theo của thuật toán RTT (RTT-Max), thuật toán đang được phát triển.

Так что как всегда, продолжение следует…

Nguồn: www.habr.com

Thêm một lời nhận xét