ทำไมหอยโข่งจึงช้า


19

ฉันสงสัยว่าทำไม Nautilus ช้ามากเมื่อเปิดไดเรกทอรีที่มีไฟล์จำนวนมาก ตัวอย่างเช่น / usr / lib ของฉันมีไฟล์ 1900 ไฟล์และใช้เวลาประมาณ 5+ วินาทีในการแสดงทุกอย่าง มันเป็นแบบนี้ตั้งแต่ฉันติดตั้ง Ubuntu เมื่อไม่กี่เดือนที่ผ่านมาและบางครั้งก็น่ารำคาญจริงๆ ฉันไม่มีฮาร์ดแวร์ที่ทรงพลัง แต่ฉันรู้ว่า Windows Explorer เร็วกว่านี้มาก

มีอะไรที่สามารถทำได้เพื่อเร่งความเร็วหรือไม่?

Ubuntu 10.04


1
ฉันเดาว่า Nautilus จะใช้ ls เพื่อสร้างรายการในขณะที่ Explorer มีแคช
digitxp

มันเป็นระบบอะไร ฉันคิดว่านี่เป็นปัจจัยใหญ่ มันจะ "ช้า" บนเน็ตบุ๊กของฉัน แต่ไม่มากใน i7 ที่มี RAM 4+ GB
คริส

ที่เกี่ยวข้องในอูบุนตู Ask: Nautilus ช้ามาก
slhck

คำตอบ:


27

การติดตามการดำเนินการnautilusแสดงให้เห็นว่าความช้าเกิดจากการรวมกันของสองปัจจัย:

  • มันฉลาดเกี่ยวกับการแสดงข้อมูลที่เป็นประโยชน์เกี่ยวกับแต่ละไฟล์ มันจะดูภายในเนื้อหาของไฟล์เพื่อกำหนดไอคอนที่จะใช้และอาจแสดงตัวอย่าง สิ่งนี้สามารถลดลงได้ด้วยการปิดการแสดงตัวอย่างในการตั้งค่า

  • มันทำงานได้อย่างไร้ประโยชน์มาก (เช่นการส่งstatแต่ละไฟล์หลาย ๆ ครั้งและตรวจสอบ/proc/filesystemsแม้กระทั่งที่ไม่ใช่ไดเรกทอรี) สิ่งที่คุณสามารถทำได้คือเรียนรู้การเขียนโปรแกรมปรับปรุงโปรแกรมและส่งแพตช์ หรืออย่างน้อยก็ส่งคำขอคุณสมบัติผู้เขียน (โปรดทำให้เร็วขึ้น)

  • มันเรียกกระบวนการภายนอกหลายอย่างสำหรับแต่ละไดเรกทอรีฉันไม่ได้สำรวจสิ่งที่พวกเขาทำ


คำตอบที่ดี: D! +1 สำหรับการปะ + featurerequestrequest: D
BloodPhilia

ฉันเป็นโปรแกรมเมอร์ แต่ยังไม่ดีพอที่จะมีส่วนร่วม แค่อยากรู้อยากเห็นคุณจะติดตามได้อย่างไร
เขตรหัส

2
@Derek: strace -f -ttt -p1234 -o nautilus.straceที่ 1234 เป็น pid ของหอยโข่ง ฉันไม่ได้วิเคราะห์การติดตามในรายละเอียดเพียงแค่เหลือบมองไปที่สิ่งที่นำขึ้นมา (สิ่งต่างๆมากมายที่เกี่ยวข้องกับกระบวนการย่อย) และเนื้อหาต่อไฟล์ (หลายรายการstatและopenสำหรับบางไฟล์)
Gilles 'หยุดความชั่วร้าย'

1
สถิติจำนวนมากหลายรายการมาจากการโทรผ่านห้องสมุดหลายรายการมาจาก glibc
Tim Post

หือนี่เป็นปัญหามานานกว่า 6 ปีแล้ว! ทำไมไม่มีใครยังใช้เวลากับเรื่องนี้? ในการเริ่มต้นควรมีการแสดงตัวอย่าง & สถิติหลังรายการไฟล์ ดังนั้นการแสดงรายการโฟลเดอร์ขนาดใหญ่จะเป็นไปอย่างรวดเร็วlsและสามารถเรียกดูได้ในขณะที่กำลังดูตัวอย่าง Windows Explorer ทำงานเช่นนี้หากฉันจำได้ถูกต้อง เป็นเรื่องที่ไม่น่าเชื่อสำหรับโปรแกรมอูบุนตูที่มีคนใช้สูงเช่นนี้ อย่างไรก็ตามไม่ควรบ่น แต่มีส่วนร่วมแทน
phil294

5

ในแท็บ "ดูตัวอย่าง" ภายใต้ "แก้ไข -> การตั้งค่า" ให้ลองสลับตัวเลือกทั้งหมดเป็น "ไม่เคย"

มันยังช่วยฉันอย่างมากให้ปิด "เทคโนโลยีช่วยเหลือ" คุณสามารถทำได้ใน "ระบบ -> การตั้งค่า -> เทคโนโลยีช่วยเหลือ" ยกเลิกการเลือก "เปิดใช้งานเทคโนโลยีช่วยเหลือ"

คุณจะต้องออกจากระบบและกลับเข้ามาใหม่เพื่อให้การเปลี่ยนแปลงภายหลังมีผล


สิ่งนี้ทำให้ฉันได้รับการปรับปรุงเล็กน้อย การลบบุ๊คมาร์คสร้างความแตกต่างที่ยิ่งใหญ่กว่ามาก
Peter Jenkins

5

สิ่งนี้ทำให้ฉันนึกถึงการพูดคุยกับอเล็กซานเดอร์ลาร์สันผู้พัฒนานำสำหรับ Nautilus และโครงการอื่น ๆ รวมถึง GVFS

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

สมมติว่าคุณเริ่มต้นด้วยกระดานชนวนว่างเปล่านั่นคือคุณยังไม่ได้เข้าถึงระบบไฟล์เลย ตอนนี้ให้คุณเรียกใช้ stat (“ / some / dir / file”) ก่อนอื่นเคอร์เนลต้องค้นหาไฟล์ซึ่งในทางเทคนิคเรียกว่า inode มันเริ่มต้นด้วยการดูในระบบไฟล์ superblock ซึ่งเก็บ inode ของไดเรกทอรีราก จากนั้นจะเปิดไดเรกทอรีรากค้นหา“ บางส่วน” เปิดที่ค้นหา“ dir” และอื่น ๆ ในที่สุดการค้นหา inode สำหรับไฟล์

จากนั้นคุณต้องอ่านข้อมูลไอโหนด หลังจากอ่านครั้งแรกนี้จะถูกเก็บไว้ใน RAM ดังนั้นการอ่านจะต้องเกิดขึ้นเพียงครั้งเดียว

คิดว่า HD เป็นเครื่องเล่นแผ่นเสียงเก่าเมื่อคุณอยู่ในตำแหน่งที่ถูกต้องด้วยเข็มคุณสามารถอ่านสิ่งต่าง ๆ ได้อย่างรวดเร็วในขณะที่มันหมุน อย่างไรก็ตามเมื่อคุณต้องการย้ายไปยังสถานที่อื่นเรียกว่า "การค้นหา" คุณกำลังทำสิ่งที่แตกต่างกันมาก คุณต้องขยับแขนตามร่างกายแล้วรอให้จานหมุนจนกว่าจะวางที่ถูกต้องไว้ใต้เข็ม การเคลื่อนไหวทางกายภาพชนิดนี้ช้ามาก ๆ ดังนั้นเวลาในการค้นหาดิสก์จึงค่อนข้างยาว

ดังนั้นเราจะหาเมื่อไหร่ ขึ้นอยู่กับรูปแบบของระบบไฟล์แน่นอน ระบบไฟล์พยายามจัดเก็บไฟล์อย่างต่อเนื่องเพื่อเพิ่มประสิทธิภาพการอ่านและโดยทั่วไปแล้วพวกเขายังพยายามจัดเก็บ inodes สำหรับไดเรกทอรีเดียวใกล้ ๆ กัน แต่ทุกอย่างขึ้นอยู่กับสิ่งต่าง ๆ เช่นเมื่อไฟล์ถูกเขียนการแตกแฟรกเมนต์ของระบบเป็นต้น กรณีสถิติของไฟล์แต่ละไฟล์จะทำให้เกิดการค้นหาและจากนั้นแต่ละไฟล์ที่เปิดจะทำให้เกิดการแสวงหาที่สอง ดังนั้นสิ่งต่าง ๆ จึงใช้เวลานานเช่นนี้เมื่อไม่มีอะไรถูกแคช

ระบบไฟล์บางระบบดีกว่าระบบอื่นการจัดเรียงข้อมูลอาจช่วยได้ คุณสามารถทำบางสิ่งในแอพ ตัวอย่างเช่น GIO จะเรียงลำดับ inodes ที่ได้รับจาก readdir () ก่อนที่จะระบุว่าหวังว่าหมายเลข inode นั้นมีความสัมพันธ์กับลำดับของดิสก์ (โดยทั่วไปจะมี) ดังนั้นจึงเป็นการลดการค้นหาแบบสุ่มไปมา

สิ่งสำคัญอย่างหนึ่งคือการออกแบบที่เก็บข้อมูลและแอพของคุณเพื่อลดการค้นหา ตัวอย่างเช่นนี่คือสาเหตุที่ Nautilus การอ่าน / usr / bin ช้าเพราะไฟล์ในนั้นไม่มีส่วนขยายที่เราต้องใช้ในการดมเวทมนตร์ ดังนั้นเราจำเป็นต้องเปิดแต่ละไฟล์ => หนึ่งค้นหาต่อไฟล์ => slooooow อีกตัวอย่างหนึ่งคือแอปที่เก็บข้อมูลในไฟล์ขนาดเล็กจำนวนมากเช่น gconf ที่เคยทำและเป็นความคิดที่ไม่ดีเช่นกัน อย่างไรก็ตามในทางปฏิบัติฉันไม่คิดว่าจะมีอะไรมากมายที่คุณทำได้ยกเว้นพยายามซ่อนเวลาแฝง

เขาจบลงด้วยหมายเหตุต่อไปนี้:

การแก้ไขที่แท้จริงสำหรับภาวะที่กลืนไม่เข้าคายไม่ออกนี้คือการย้ายออกจากสื่อที่หมุน ฉันได้ยินว่า Intel SSD นั้นยอดเยี่ยม ไลนัสสาบานต่อพวกเขา

:-)


3
สิ่งที่น่าสนใจ :) อย่างไรก็ตามหากการค้นหานั้นเป็นต้นเหตุของความเชื่องช้าฉันก็ยังสงสัยว่าทำไม Windows Explorer ถึงเร็วกว่านี้มาก? ไม่แน่นอนเนื่องจากฮาร์ดแวร์
เขตรหัส

4
ถ้าฉันต้องเดาฉันจะบอกว่ามันไม่ได้ทำการดมกลิ่นอย่างวิเศษ แต่ทำการตรวจจับไฟล์ตามส่วนขยาย (ฉันสามารถยืนยันได้สำหรับ Windows XP)
Bruce van der Kooij

2
เผง Explorer (ส่วนใหญ่) ไม่ได้ทำการดมกลิ่นไฟล์ใด ๆ มันแค่ใช้ส่วนขยาย หากต้องการแสดงตัวอย่างหรืออ่านไอคอนก็ต้องเปิดไฟล์ คุณสามารถเห็นสิ่งนี้หากคุณเปิดโฟลเดอร์ขนาดใหญ่ที่เต็มไปด้วยไฟล์. exe ส่วนขยายของเชลล์สามารถบังคับให้ Explorer เปิดไฟล์เพื่อทำการดมกลิ่นได้เช่นกัน ตัวอย่างเช่นโปรแกรมอรรถประโยชน์การเก็บถาวรบางอย่างจะตรวจสอบไฟล์. exe เพื่อดูว่าเป็นไฟล์เก็บถาวรของ SFX หรือไม่ MS ได้ใช้ความพยายามอย่างมากในการทำสิ่งต่าง ๆ เพื่อเร่งความเร็ว Explorer ทั้งในความเร็วจริงและความเร็วที่ชัดเจน
afrazier

3

ในที่สุดฉันก็พบสิ่งที่ทำให้หอยโข่งช้ามาก: ที่คั่นหนังสือ

หากต้องการแก้ไขให้ลบบุ๊กมาร์กทั้งหมดของคุณให้รีสตาร์ทแล้วเพิ่มที่อยู่ที่คุณขาดไม่ได้

ใช้ strace ฉันรู้ว่า nautilus กำลังระบุไฟล์จำนวนมากสำหรับทุกมุมมอง แม้กระทั่งไฟล์ที่ไม่ได้อยู่ในไดเรกทอรีฉันก็ท่องเว็บในระหว่างการสืบค้นกลับ ฉันคิดว่าหอยโข่งพยายามที่จะแคชบุ๊กมาร์กเหล่านี้ไว้ล่วงหน้า

ฉันมีไดรฟ์เครือข่ายหนึ่งตัวเป็นที่คั่นหน้า ... นี่อาจเป็นเหตุผลว่าทำไมหอยโข่งจึงใช้เวลาโหลดหลายวินาที


1

ลองใช้ตัวจัดการไฟล์อื่นเช่น Thunar Thunar นั้นเร็วกว่าในการโหลดรายชื่อไดเรกทอรีและมีเสถียรภาพมากขึ้นสำหรับการคัดลอกไฟล์จากฮาร์ดไดรฟ์ USB NTFS ของฉันไปยัง ext4 แม้ว่าจะมีไฟล์จำนวนมากดูเหมือนว่าจะมีปัญหาเช่น Nautilus

นี่คือลิงค์สำหรับสวิทช์สคริปต์ https://help.ubuntu.com/community/DefaultFileManager


วิธีแก้ปัญหาที่ยอดเยี่ยม! ฉันชอบ "sudo apt-get install thunar" และ "exo-Preferred-applications" จากนั้นเลือก Thunar ใน (ยูทิลิตี้> เครื่องมือจัดการไฟล์)
Doud

1

หากคุณมี xfce ติดตั้งในระบบ Gnome และคุณไม่เคยใช้มันให้ลบ exo-utils

มันแก้ไขปัญหาของฉันพร้อมกับปัญหาที่ Chrome ไม่สามารถเปิดไฟล์ได้อย่างถูกต้องหลังจากที่พวกเขาดาวน์โหลด


ไม่ได้ช่วยอะไรฉัน ต้องใช้ exo-utils ด้วยแพ็คเกจจำนวนมากรวมถึงแพ็คเกจ xfdesktop4 ดังนั้นจึงค่อนข้างยากที่จะลบ: sudo dpkg -r --ignore-depend = xfce4-terminal, thunar-volman, บีบ, thunar, xfce4-verve -plugin, xfdesktop4 exo-utils
Peter Jenkins

1

ในแท็บ "ดูตัวอย่าง" ภายใต้ "แก้ไข -> การตั้งค่า" ให้ลองสลับตัวเลือกทั้งหมดเป็น "ไม่เคย"

มันยังช่วยฉันอย่างมากให้ปิด "เทคโนโลยีช่วยเหลือ" คุณสามารถทำได้ใน "ระบบ -> การตั้งค่า -> เทคโนโลยีช่วยเหลือ" ยกเลิกการเลือก "เปิดใช้งานเทคโนโลยีช่วยเหลือ"

คุณจะต้องออกจากระบบและกลับเข้ามาใหม่เพื่อให้การเปลี่ยนแปลงภายหลังมีผล


1
เวลาในการเปิดโฟลเดอร์ขนาดใหญ่ลดลงจากประมาณ 30 วินาทีเป็นสองวินาที ความเศร้าโศกที่ดี
wsmart

โพสต์ของฉันถูกลบโดยผู้ใช้รายอื่นที่นี่ เด่นชัด อยากพูดขอบคุณเจย์สำหรับโพสต์ของเขาเพราะมันสร้างความแตกต่างอย่างมากสำหรับปัญหาช้าของ Nautius เป็นจริงมีสติ
wsmart
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.