ทำไมแมวถึงมีพฤติกรรมแปลก ๆ


8

ฉันกำลังใช้catไพพ์ไฟล์ต่าง ๆ เป็นไฟล์ขนาดใหญ่ไฟล์เดียว จำนวนไฟล์ที่แตกต่างกันมีตั้งแต่สองไฟล์จนถึงสิบไฟล์ แต่ขนาดทั้งหมดของไฟล์ทั้งหมดจะเท่ากันเสมอ (สอง GB)

ปัญหาของฉัน: เมื่อใดก็ตามที่ฉันไปถึงกรณีที่ฉันมีไฟล์ทั้งหมดหกไฟล์เวลาที่ใช้ในการต่อยอดไฟล์เหล่านั้น(เช่นมีความสำคัญมากกว่ากับห้าหรือเจ็ด) และฉันก็ไม่รู้ว่าทำไม

ใครมีความคิด?

ไฟล์ (ขนาดเดียวกันทั้งหมด)

output
outputTEMP1
outputTEMP2
outputTEMP3
outputTEMP4
outputTEMP5

คำสั่ง

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

ปัจจุบันเครื่องต้องทำการคำนวณบางอย่าง แต่ฉันจะอัปเดตในภายหลังเมื่อการวัดใหม่พร้อมใช้งาน


บรรทัดคำสั่งที่แน่นอนที่คุณใช้คืออะไร
innaM

ฉันเพิ่มบรรทัดคำสั่ง
brandstaetter

นี่มันแปลกจริงๆ ฉันไม่สามารถบอกคุณได้ว่าทำไมมันถึงทำแบบนี้ แต่บางทีคุณควรยื่นรายงานบั๊กแบบข้อความธรรมดาไปที่ bug-coreutils@gnu.org
Reynolds

วัดมัน! และให้แน่ใจว่าคุณไม่ได้แคชเมื่อคุณวัด!
Davide

คำตอบ:


4

วิธีหนึ่งในการแก้ไขปัญหานี้คือใช้ 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

ตัวเลือก -tt บันทึกการประทับเวลาของการเรียกระบบเพื่อความละเอียดมิลลิวินาที -e trace = open, ปิดบันทึกเท่านั้นเปิด, ปิด API ลองลบออกแล้วคุณจะเห็นไฟล์บันทึกที่มีเสียงดังมาก


2

ดังนั้นความคิดเห็นของดาวิเดสจึงเป็นจุดสนใจ เราต้องการสองสิ่งที่นี่เพื่อทำการประเมินที่ถูกต้อง:

  1. แคชการประกันไม่ได้เป็นส่วนหนึ่งของสถานการณ์
  2. การวัดจริงของเวลาที่ใช้

สมมติว่าคุณมีพื้นที่ว่างในดิสก์ฉันจะอธิบายสถานการณ์จำลองการทดสอบที่แม่นยำยิ่งขึ้นว่านี่เป็นปัญหาจริงหรือไม่ ถ้าเป็นเช่นนั้นหลักฐานสนับสนุนจากวิธีนี้จะช่วยให้นักพัฒนาทราบว่าเป็นของจริงและสามารถทำซ้ำได้

เพื่อช่วยในการแยกปัญหาอย่าทำส่วน rm ที่นี่เลย ปล่อยให้ไฟล์ TEMP นั่งรอหลังจากนั้น จากนั้นคุณสามารถทำซ้ำการทดสอบเพื่อทำส่วน 'rm' ในภายหลังได้หากต้องการ

นี่คือสถานการณ์ทดสอบ:

  • ทำ 9 ไดเรกทอรี - หนึ่งไฟล์สำหรับแต่ละปริมาณไฟล์ (2 3 4 5 6 7 8 9 และ 10) - ถ้าคุณไม่มีที่ว่างก็แค่ทำ 2, 5, 6, 7 และ 10
  • ให้แน่ใจว่าคุณกำลังวางไฟล์ที่แตกต่างในแต่ละไดเรกทอรีเหล่านี้; ไม่ซ้ำกันทุกที่
  • ใช้คำสั่ง time ดังนี้:

    เวลา (เอาท์พุท catTEMP * >> เอาต์พุต)

บันทึกหมายเลขจริงผู้ใช้และ sys ที่รายงานสำหรับการทดสอบแต่ละครั้งที่คุณเรียกใช้

ฉันเห็นด้วยกับ Reynolds หากเป็นจริงคุณควรส่งรายละเอียดอีเมลไปที่ bug-coreutils@gnu.org


ความคิดอื่น: เพื่อให้แน่ใจว่าคุณกำลังคัดลอกข้อมูล TOTAL จำนวนเดียวกันไปยังไฟล์เอาต์พุต ดังนั้นถ้ารวม 1GB ในไดเรกทอรี '2' คุณจะมีไฟล์ที่มีขนาดใหญ่กว่า 1/2 GB และในไดเรกทอรี '10' คุณจะมีไฟล์ที่มีขนาด 1 / 10th ของ GB ขนาดใหญ่เป็นต้น
pbr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.