Tại sao có 'con mèo' hành vi kỳ lạ này?


8

Tôi đang sử dụng catđể chuyển các tệp khác nhau thành một tệp lớn. Số lượng tệp khác nhau khác nhau, từ hai tệp lên đến mười, nhưng tổng kích thước của tất cả các tệp luôn giống nhau (một vài GB).

Vấn đề của tôi: Bất cứ khi nào tôi gặp trường hợp tôi có tổng cộng sáu tệp, thời gian cần thiết để nối các đỉnh của chúng (nghĩa là nhiều hơn đáng kể so với năm hoặc bảy), và tôi không biết tại sao.

Bất cứ ai cũng có một ý tưởng?

Các tập tin (tất cả cùng kích thước)

output
outputTEMP1
outputTEMP2
outputTEMP3
outputTEMP4
outputTEMP5

Chỉ huy

cat outputTEMP* >> output && rm -f outputTEMP*

Hiện tại, Máy phải thực hiện một số tính toán, nhưng tôi sẽ cập nhật sau khi có các phép đo mới.


Dòng lệnh chính xác bạn đang sử dụng là gì?
innaM

Tôi đã thêm dòng lệnh.
brandstaetter

Điều này chắc chắn là kỳ quặc. Tôi không thể cho bạn biết lý do tại sao nó hoạt động theo cách này, nhưng có lẽ bạn nên gửi báo cáo lỗi văn bản đơn giản đến bug-coreutils@gnu.org.
Reynold

Đo lường nó! Và hãy chắc chắn rằng bạn không lưu trữ khi bạn đo lường!
Davide

Câu trả lời:


4

Một cách để gỡ lỗi vấn đề này là sử dụng strace.

strace -tt -e trace=open,close -o /tmp/strace.cat.log cat apt.list authors.txt >/tmp/t.test
cat /tmp/strace.cat.log 

23:12:08.022588 open("apt.list", O_RDONLY|O_LARGEFILE) = 3
23:12:08.023451 close(3)                = 0
23:12:08.023717 open("authors.txt", O_RDONLY|O_LARGEFILE) = 3
23:12:08.025403 close(3)                = 0

Tùy chọn -tt ghi lại dấu thời gian của cuộc gọi hệ thống đến độ phân giải mili giây. -e dấu vết = mở, đóng nhật ký chỉ mở, đóng API. Hãy thử loại bỏ chúng và bạn sẽ thấy một tệp nhật ký rất ồn.


2

Vì vậy, bình luận của Davides là tại chỗ. Chúng tôi cần hai điều ở đây, để đánh giá chính xác:

  1. đảm bảo bộ nhớ đệm không phải là một phần của kịch bản
  2. đo lường thực tế của thời gian nó đang dùng.

Giả sử bạn có không gian đĩa, tôi sẽ mô tả một kịch bản kiểm tra sẽ xác định chính xác hơn nếu đây là sự cố thực sự. Nếu vậy, bằng chứng hỗ trợ từ phương pháp này SILL giúp các nhà phát triển biết nó có thật và có thể tái tạo nó.

Để giúp cách ly vấn đề, chúng ta đừng làm phần rm ở đây. để các tập tin TEMP ngồi xung quanh sau đó. Sau đó, bạn có thể lặp lại các bài kiểm tra làm phần 'rm' sau, nếu bạn muốn.

Đây là kịch bản thử nghiệm:

  • tạo 9 thư mục - một cho mỗi số lượng tệp (2 3 4 5 6 7 8 9 và 10) - nếu bạn không có dung lượng, có thể chỉ cần thực hiện 2, 5, 6, 7 và 10.
  • đảm bảo bạn đang đặt các tệp KHÁC vào mỗi thư mục này; KHÔNG trùng lặp ở bất cứ đâu
  • sử dụng lệnh thời gian như thế này:

    thời gian (cat outputTEMP * >> đầu ra)

Ghi lại số thực, người dùng và số sys được báo cáo cho mỗi bài kiểm tra bạn chạy.

Tôi đồng ý với Reynold; nếu điều này là có thật, bạn chắc chắn nên gửi email chi tiết đến bug-coreutils@gnu.org.


Một suy nghĩ khác: Để đảm bảo bạn sao chép cùng một lượng TOTAL dữ liệu vào tệp đầu ra. Vì vậy, nếu có tổng dung lượng 1 GB, trong thư mục '2', bạn sẽ có các tệp có dung lượng lớn 1/2 GB và trong thư mục '10', bạn sẽ có các tệp có kích thước bằng 1/10 GB, v.v.
pbr
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.