Làm thế nào để song song dd?


10

Tôi hiện đang gặp sự cố với việc ddđược gọi với một tệp thưa thớt là input ( if) và một tệp là output ( of) với conv=sparse. dddường như chỉ sử dụng một lõi của CPU ( Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz4 lõi + 4 Intel Hyperthread) (100% của 1 lõi), vì vậy tôi đã tự hỏi liệu có thể song song hóa được không dd. Tôi đã từng

  • Nhìn vào info ddman dddường như có chức năng tích hợp trong phiên bản corutils 8.23
  • kiểm tra sgp_ddtừ sg3-utilsgói (không hiểu liệu nó có phù hợp với nhu cầu của tôi không), nhưng dường như không thể xử lý các tệp thưa thớt
  • dcfldd dường như không có khả năng song song

AFAIK

  • một phiên bản / ngã ba nâng cao với việc xử lý nội bộ các phần chương trình trong nhiều luồng (tránh thay đổi bối cảnh giết chết hiệu năng I / O) được ưu tiên hơn
  • một giải pháp với GNU parallelchạy cục bộ được ưa thích hơn
  • một sniplet mã tùy chỉnh (có thể chưa được kiểm tra)

Làm thế nào để tránh CPU là nút cổ chai của hoạt động chuyên sâu I / O? Tôi muốn chạy lệnh trên Ubuntu 14.04 với Linux 3.13 và xử lý hình ảnh đĩa tệp thưa với nó trên bất kỳ hệ thống tệp nào hỗ trợ tệp thưa thớt (ít nhất là giải pháp không nên bị ràng buộc với một hệ thống tệp cụ thể).

Bối cảnh: Tôi đang cố gắng tạo một bản sao của tệp thưa 11TB (chứa khoảng 2TB dữ liệu) trên zfs (phiên bản không ổn định của zfsonlinux 0.6.4, có thể là lỗi và nguyên nhân gây ra tắc nghẽn CPU (cuối cùng là tìm kiếm lỗ chậm). Điều đó không nên thay đổi bất cứ điều gì cho câu hỏi làm thế nào để song song hóa dd (theo cách rất chung chung).


Tôi không thấy những gì bạn có thể đạt được từ việc này, vì thao tác này bị ràng buộc I / O trừ những trường hợp cực đoan. Theo tôi, lựa chọn tốt nhất sẽ là một chương trình nhận thức thưa thớt, ví dụ như một cái gì đó như xfs_copy . Trang man của nó đề cập: "Tuy nhiên, nếu tệp được tạo trên hệ thống tệp XFS, tệp sẽ tiêu tốn khoảng không gian thực sự được sử dụng trong hệ thống tệp nguồn bởi hệ thống tệp và nhật ký XFS. Tiết kiệm không gian là do xfs_copy tìm kiếm trên các khối miễn phí thay vì sao chép chúng và hệ thống tệp XFS hỗ trợ các tệp thưa thớt một cách hiệu quả. ".
Cristian Ciupitu

@mikeerv Tôi không hiểu bình luận của bạn ...
Karl Richter

@CristianCiupitu Trong trường hợp của tôi, CPU là nút cổ chai - đừng hỏi tôi tại sao, vì tôi không biết. Câu trả lời của bạn khiến tôi nhận ra rằng giải pháp nên hỗ trợ nhiều hệ thống tệp (có thể xử lý các tệp thưa thớt) (đã chỉnh sửa)
Karl Richter

CPU và hệ thống tập tin nào bạn có? Làm thế nào lớn là tập tin (chiều dài và khối)?
Cristian Ciupitu

4
ddhog CPU theo mặc định do kích thước khối nhỏ. làm cho nó lớn hơn, giống như bs=1M.
frostschutz

Câu trả lời:


4

Đã thử nghiệm ở Bash:

INFILE=in
seq 0 1000 $((`stat --format %s $INFILE` /100000 )) |
  parallel -k dd if=$INFILE bs=100000 skip={} conv=sparse seek={} count=1000 of=out

Bạn có thể cần phải điều chỉnh 1000.


2

Một sniplet mã chưa được kiểm tra sắp tới:

dd if=oldf conv=sparse bs=1k                 count=3000000000                 of=newf &
dd if=oldf conv=sparse bs=1k skip=3000000000 count=3000000000 seek=3000000000 of=newf &
dd if=oldf conv=sparse bs=1k skip=6000000000 count=3000000000 seek=6000000000 of=newf &
dd if=oldf conv=sparse bs=1k skip=9000000000 count=3000000000 seek=9000000000 of=newf &
wait

Điều này sẽ phân vùng logic tệp thành bốn khối 3TB và xử lý chúng song song. ( skip=bỏ qua các khối đầu vào; seek=tìm kiếm các khối đầu ra.) Tất nhiên, lệnh thứ tư sẽ đọc đến cuối tập tin cũ, vì vậy count=tham số không thực sự cần thiết.


Tôi cũng nghĩ về một số điều tương tự, nhưng không thể hiểu làm thế nào để biến nó thành một giải pháp chung cho các tệp có kích thước tùy ý (nền tảng của câu hỏi không nên ảnh hưởng đến yêu cầu của tôi về một giải pháp chung)
Karl Richter

Tôi không hiểu bạn đang nói gì. Tôi chỉ lấy kích thước đã nêu của tập tin của bạn và chia cho số lượng lõi. Điều đó có thể được thực hiện bằng một kịch bản.
G-Man nói 'Phục hồi Monica'

3
có lẽ cũng cầnconv=notrunc
frostschutz

@frostschutz: Có lẽ chỉ có cái đầu tiên. Mặc dù tôi không thể tìm thấy tài liệu này, thử nghiệm của tôi cho thấy điều đó conv=notruncđược ngụ ý bởi seek=một giá trị dương.
G-Man nói 'Phục hồi Monica'

1
không, tìm kiếm không ngụ ý notrunc.
frostschutz
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.