Pull to refresh

Comments 26

Красиво, блин.
Интересно, а что из себя будет представлять граф загрузки Linux?
UFO just landed and posted this here
Ну, август почти полгода назад был; сейчас у меня уже другой дистрибутив :)
Еще было бы неплохо посмотреть на загрузку Windows 8, ведь Microsoft неплохо поработал в этом направлении.
UFO just landed and posted this here
Ох, спасибо. Надо бы провериться у окулиста…
Граф загрузки для чистой ОС Windows 8 Enterprise x64 на живой машине ;)

Статью внимательно читали?
Вы не поверите, но недавно об этом задумывался. Спасибо вам :)
Глядя на картинку я сначала подумал статья будет о сложном реалтайм рендеринге загрузочной анимации.
Хотел сделать, но времени хватило только на картинки.
Microsoft предоставляет профайлер загрузки,
habrahabr.ru/post/106684/

Но сделать свой велосипед всегда увлекательно
Это не профайлер загрузки, даже не близко. И профайлер не даст вам информации о зависимости. Пост не читали =)
Вообще-то это в том числе и профайлер (и sampled, и instrumented). В том числе и загрузки.
Если под «информацией о зависимости» Вы имеете в виду информацию о том, какой процесс загрузил образ, то эта информация доступна.

Ну и чтоб два раза не вставать, пара небольших замечаний (сразу скажу, что несмотря ни на что статья мне понравилась — интересный подход к сбору данных и очень красивая визуализация результата — браво).

1. Сама методология несколько… натянута, что ли. То, что ввод/вывод занимает большую часть времени при загрузке современных ОС (включая Windows) — это в целом правда (по крайней мере на обычном десктопном «железе»), но меппинг секций достаточно слабо корреллирует со вводом/выводом во время загрузки по как минимум двум причинам: a) то, что секция отображена в память ничего не говорит о том, сколько всего страниц будет иметь hardfault (Вы и сами упомянули, что меппинг не означает исполнение кода, но он не означает и то, что хоть одна страница будет фактически прочитана с диска); b) при «правильной» работе ReadyBoot, именно на его долю будет приходится основная часть ввода/вывода при загрузке, а страницы в секции будут впечатываться прямиком из стендбай списка.

2. Выводы по сервисам тоже не совсем верны. svchost — это не SuperFetch, а Service Host Process. Практически все inbox сервисы в Windows находятся в dll-ках, а разные svchost-ы объединяют сервисы с одинаковыми привилегиями внутри одного процесса. На картинке ниже SuperFetch (System Maintenance Service или SysMain) — всего лишь один из множества сервисов, хостящихся не только в svchost-ах, но и конкретно в svchost (1052)

Вообще-то я говорю про свою поделку — это не профайлер, и не предназначен был для каких-то количественных оценок производительности. Мне нужна была последовательность загрузки. Я же ничего нигде не считал. =)

1. Согласен с заметками о том, что файлы не будут полностью прочитаны с диска, только частично. Однако минимум нужно прочитать с диска данные о структуре файла и разобрать PE заголовок.

2. Я и не говорил, что svchost — это SuperFetch, в курсе, что сервисы составные. Но так все эти dllки в графе по радиусу и расставлены.
P.S. Я-то как бы понадеялся, что все в курсе и так, что большая часть виндовых сервисов живет в svchost в виде модулей.
Это то известно всем, я просто уточнил, потому что исходя из написанного Вами можно сделать вывод, что за большую часть модулей, загружаемых svchost-ом, отвественннен SuperFetch, в то время как — это просто три десятка сервисов загружают свои зависимости.
> Вообще способов оказаться загруженным в память у модуля много. Например, достаточно запросить информацию из ресурсов исполняемого файла, в том числе его иконку.

Хм, значит забитый ярлычками «рабочий стол» и меню «пуск» увеличивает время загрузки системы? Всмысле, я всегда это подозревал, но теперь нашёл этому подтверждение =)
Сложно однозначно ответить. Для отображения иконки, например, нужна только секция ресурсов.
еще во времена не NT-шных версий виндоус, когда все любили играться с PE файлами я заметил тот факт, что даже дефективные исполняемые файлы часто отдавали свои ресурсы без каких либо проблем. Думаю ресурсы загружаются без инициализации модуля.
Посмотрите функцию RtlImageNtHeader и её кросс-рефы.
Ну как сказать, не то чтобы прямо, но и совсем не косвенно.
Когда explorer Загружается, он показывает рабочий стол, чтобы показать содержимое рабочего стола, чтобы показать содержимое, опрашивает каждый файл, для бинарников и ярлыков — выдергивает иконку, спрашивает про UAC, для неисполняемых файлов — лезет в реестр, спрашивает где взять иконку, лезет за иконкой. На всё это тратятся циклы процессора и операции дисковой подсистемы, что, есстественно задерживает время до «комп загрузился и можно работать».
Другой вопрос что если файлов немного, то задержка вряд ли осязаема (если сравнить с чистым столом без файлов), но вот если понакидать FullHD видюшек штук 40, пару сотен фоток по 15 Мб каждая, да приказать системе не создавать Thumbs.db, то да, загрузка ощутимо замедлится на генерацию превьюшек.
UFO just landed and posted this here
«Обои-ня» для FullHD разрешения увеличивает время загрузки гораздо больше чем эти ярлычки )
Sign up to leave a comment.