19

Мне интересно, почему Наутилус очень медленно открывает каталог, содержащий много файлов. Например, мой каталог /usr /lib dir содержит 1900 файлов, и на его отображение уходит примерно 5 с лишним секунд. Так было с тех пор, как я установил Ubuntu несколько месяцев назад, и иногда это очень раздражает. У меня нет мощного оборудования, но я знаю, что Windows Explorer намного быстрее, чем этот.

Есть ли что-нибудь, что можно сделать, чтобы ускорить это?

Ubuntu 10.04

7 ответов7

27

Отслеживание выполнения nautilus показывает, что медлительность обусловлена сочетанием двух факторов:

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

  • Это делает много бесполезной работу (например, stat ИНГ каждый файл несколько раз, и проверки /proc/filesystems , даже для не-каталогов). Все, что вы можете сделать, это изучить программирование, улучшить программу и отправить патч. Или, по крайней мере, отправьте авторам запрос на добавление функции (пожалуйста, сделайте это быстрее).

  • Он вызывает несколько внешних процессов для каждого каталога, я не изучал, что они делают.

5

На вкладке "Предварительный просмотр" в «Правка -> Настройки» попробуйте переключить все параметры на "Никогда".

Это также очень помогло мне отключить "Вспомогательные технологии". Вы можете сделать это в «Система -> Настройки -> Вспомогательные технологии». Снимите флажок "Включить вспомогательные технологии".

Вам придется выйти и снова войти, чтобы последние изменения вступили в силу.

5

Это напомнило мне о моем разговоре с Александром Ларссоном, ведущим разработчиком Nautilus и других проектов, включая GVFS.

Джайлс в своем ответе, в частности о том, как Наутилус просматривает содержимое файлов, затрагивает основную причину, по которой Наутилус "медленный". Однако Джайлс не объясняет, почему это медленно, что может быть очевидно для некоторых, но не для других. Вот что Алекс должен был сказать:

Скажем, вы начинаете с чистого листа, то есть вы вообще не обращались к файловой системе. Теперь скажите, что вы запустили stat(«/some/dir/file»). Сначала ядро должно найти файл, который в технических терминах называется inode. Он начинается с просмотра суперблока файловой системы, в котором хранится индекс корневого каталога. Затем он открывает корневой каталог, находит «some», открывает его, находит «dir» и т.д., В конце концов, находит индекс для файла.

Затем вы должны фактически прочитать данные inode. После первого чтения это также кешируется в оперативной памяти. Таким образом, только чтение должно произойти один раз.

Думайте о HD как о старом проигрывателе, и, как только вы окажетесь в нужном месте с иглой, вы сможете продолжать читать что-то быстро, пока оно вращается. Однако, когда вам нужно переехать в другое место, называемое «поиск», вы делаете что-то совсем другое. Вам нужно физически переместить руку, затем подождать, пока блюдо начнет вращаться, пока нужное место не окажется под иглой. Этот вид физического движения по своей природе медленный, поэтому время поиска дисков довольно длинное.

Итак, когда мы ищем? Конечно, это зависит от структуры файловой системы. Файловые системы стараются хранить файлы последовательно, чтобы повысить производительность чтения, и, как правило, они также пытаются хранить inode для одного каталога рядом друг с другом, но все это зависит от таких вещей, как, когда файлы записываются, фрагментация файловой системы и т.д. Итак, в худшем В этом случае каждая статистика файла будет вызывать поиск, а затем каждое открытие файла будет вызывать повторный поиск. Так вот почему вещи занимают так много времени, когда ничего не кэшируется.

Некоторые файловые системы лучше других, может помочь дефрагментация. Вы можете делать некоторые вещи в приложениях. Например, GIO сортирует полученные inode от readdir(), прежде чем заявить о них, надеясь, что номер inode имеет какое-то отношение к порядку диска (как правило, имеет), таким образом, минимизируя случайные поиски вперед и назад.

Одна важная вещь заключается в том, чтобы спроектировать хранилище данных и приложения для минимизации поиска. Например, именно поэтому Nautilus читает /usr /bin медленно, потому что файлы там, как правило, не имеют расширения, которое нам нужно для магического сниффинга для каждого. Итак, нам нужно открыть каждый файл => один запрос на файл => slooooow. Другой пример - приложения, которые хранят информацию во множестве небольших файлов, как это обычно делал gconf, что также является плохой идеей. Во всяком случае, на практике я не думаю, что вы можете многое сделать, кроме как пытаться скрыть задержки.

Он закончил со следующей запиской:

Реальное решение для всей этой дилеммы - отойти от вращающихся носителей. Я слышал, что твердотельные накопители Intel потрясающие. Линус клянется ими.

:-)

3

Я наконец понял, что делает наутилус таким медленным: закладки.

Чтобы исправить это, удалите все свои закладки, перезапустите, а затем добавьте обратно те, без которых вы не можете жить.

Используя strace, я понял, что nautilus указывает множество файлов для каждого представления. Даже файлы, которых не было в каталоге, я просматривал во время трассировки. Я думаю, что nautilus пытается предварительно кэшировать эти закладки.

У меня был один сетевой диск в качестве закладки ... это могло быть причиной того, что nautilus загружался несколько секунд.

1

Попробуйте использовать альтернативный файловый менеджер, такой как Thunar. Thunar намного быстрее загружает списки каталогов и более стабилен для копирования файлов с моего жесткого диска USB NTFS в ext4, хотя с большими наборами файлов, похоже, возникают проблемы, такие как Nautilus.

Вот ссылка на скрипт переключения https://help.ubuntu.com/community/DefaultFileManager

1

На вкладке "Предварительный просмотр" в «Правка -> Настройки» попробуйте переключить все параметры на "Никогда".

Это также очень помогло мне отключить "Вспомогательные технологии". Вы можете сделать это в «Система -> Настройки -> Вспомогательные технологии». Снимите флажок "Включить вспомогательные технологии".

Вам придется выйти и снова войти, чтобы последние изменения вступили в силу.

1

Если у вас установлен xfce в системе Gnome и вы никогда его не используете, удалите exo-utils

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .