The Case of the Intermittent Windows Freezes


    Я, конечно, ожидал, что предыдущий пост понравится людям, но я даже представить не мог, насколько. Данный пост, на мой взгляд, одновременно и более и менее интересный, чем предыдущий. В то время, как в прошлый раз это было увлекательная казуальная игра — совершенно бессмысленная и отнимающая кучу времени, но доставляющая удовольствие своим необычным геймплеем и, самое главное, интерактивная и доступная каждому желающему, то сейчас речь скорее о детективном рассказе — позволяющем сопереживать и пытаться угадать дальнейшее развитие сюжета, но не оставляющем места интерактивности. С другой стороны, «детектив» «основан на реальных событиях», что добавляет происходящему особого шарма.


    А началось все с вопроса в Q&A.
    Для тех, кому лень ходить по ссылкам, позволю себе процитировать сам вопрос:

    Собственно, иногда при открытии «Мой компьютер» со списком дисков или при вставке флешки/DVD компьютер просто намертво замирает (мышка не двигается, клавиатура не реагирует на NumLock), т.е. полное отсутствие реакции на внешние раздражители. Спустя секунд 10-30 комп сам отмирает, как будто ничего и не было. Вопрос собственно в том, как определить причину такого подвисания системы и как с этим бороться.

    Ну и дополнительная информация: аппаратный RAID 4x640 (зависть), обновление дров не помогает, SMART молчит, тесты тоже.

    Как писал один очень хороший человек: «Местные избегают ездить в пустыню летом по трём причинам. Гремучие змеи, клещи и скорпионы. Идея! – подумал я. У меня же как раз есть палатка.»

    Первая идея: кто-то принимает прерывание и решает «передохнуть» в ISR. Также возможно, что этот кто-то просто задирает IRQL до непотребного уровня и все так же решает «передохнуть». Ловить будем при помощи все того же xperf.

    xperf -on latency -stackwalk profile -maxfile 128 -filemode circular

    Пояснения:
    Включаем latency — что ж еще нам включать для отлова задержек. Как говорит нам «xperf -providers K»:
    Latency: PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PROFILE

    Другими словами, к обязательным PROC_THREAD+LOADER, необходимым для того привязки происходящего к собственно бинарникам, добавляются DISK_IO+HARD_FAULTS, которые в моем личном топе занимают первое место по убиванию производительности любой системы (похоже в Microsoft со мной солидарны), DPC+INTERRUPT — доставляют проблемы нечасто, но уж если доставляют, то «с душой», CSWITCH — context switch — для отслеживания дедлоков и неправильных приоритетов, ну и PROFILE — события profile interrupt (по умолчанию каждую миллисекунду)
    Есть все основания полагать, что профайл прерывание все еще будет доставляться даже если все остальное в системе не подает признаков жизни. Вот список предопределенных IRQL в винде:
    #define PASSIVE_LEVEL                      0
    #define LOW_LEVEL                          0
    #define APC_LEVEL                          1
    #define DISPATCH_LEVEL                     2
    #define PROFILE_LEVEL                     27
    #define CLOCK1_LEVEL                      28
    #define CLOCK2_LEVEL                      28
    #define IPI_LEVEL                         29
    #define POWER_LEVEL                       30
    #define HIGH_LEVEL                        31


    Выше profile только часы, межпроцессорные прерывания и прерывания электропитания. Ни одно из этих прерываний не отдается на откуп third-party драйверам, соответственно, если profile interrupt окажется замаскированным — это тоже сильно сузит пространство поиска.

    "-stackwalk profile" означает, что для каждого события PROFILE будет сниматься еще и полный стектрейс. Кто хоть раз пользовался sampled profiler-ами сразу оценит эту возможность: ну и что, что 90% времени мы провели в каком нибудь спинлоке — нам важно знать, КТО дернул этот спинлок.

    "-maxfile 128 -filemode circular" — знакомая любому программисту идея циклических буферов. Так как зависания происходят раз в день-два, а информации каждую секунду генерируется около мегабайта, то собирать полный лог за это время места может и хватит (4x640, чо), но вот открыть (или тем более переслать) для анализа будет уже труднее.

    Силки расставлены — ждем. Первая жертва попалась через 4 дня:


    И выглядело это так:


    Более того, по странному совпадению




    Добегался, подумал я и полез в поиск

    Воображение живо нарисовало картину, в которой прерывание для каких то там целей сериализуется и доставляется на обработку в пользовательский процесс (такое в принципе можно реализовать на многопроцессорных системах, что же до идиотизма подобного решения — ну люди они такие — любят писать всякое непотребство). К чести пользователя Mear, он не стал сразу же сносить NIS и тут я заметил одну деталь с самого первого скриншота: 1.2 миллиона потерянных событий. Разрыв в графиках — это не отсутствие активности, а переполнение буферов и затирание их новыми данными при отсутствии возможности сбросить буферы на диск (может кто то задержался в прерывании от диска или каким то образом заблокировал I/O manager).

    Ну что ж, раз система в конце концов «отмирает» — наша задача складывать все в память до тех, пока не появится возможность сбросить все на диск:
    xperf -on latency -stackwalk profile -maxfile 256 -filemode circular -buffersize 1024 -minbuffers 256
    Добавляем размер буфера и минимальное количество буферов. Ждем. Через день получаем красивый лог без потерь:


    К сожалению «мои глаза и руки» на той стороне замешкались с остановкой трейса и начали просматривать не останавливая и чуть не потеряли собственно сам проблемный момент. Но к счастью, информации оказалось достаточно (на графике видно постепенно выходящий за пределы циклического буфера всплеск обработчиков DPC)


    Ну что ж, делаем zoom на проблемную область и начинаем исследование.
    Прежде всего видим ISR, занявшую 12 секунд


    И DPC, занявшую 10


    К сожалению, по проблемному адресу не получается найти модуль, но я же не зря в самом начале расписывал прелести stackwalk-а:


    Здесь на самом дне стека видим «unknown» адрес-заглушку, которая вызывает spcl.sys, который в свою очередь вызывает уже непосредственно scsiport. Разворачиваем стек дальше:


    Еще раз заходим в spcl.sys, оттуда попадаем в mv61xx.sys, который зовет KeStallExecutionProcessor (SRSLY? В ОБРАБОТЧИКЕ ПРЕРЫВАНИЯ?). По другому пути мы проводим на один вызов больше в mv61xx и все так же начинаем отдыхать.

    Аналогичная картина выходит и при обработке DPC (хотя это уже не так критично для многопроцессорной системы):


    Пара минут поиска выводит нас на авторов spcl и mv61xx — это SPTD (использующийся в Daemon Tools и Alcohol xxx%) и драйвер Marvell-овской железки. Вот эти:


    Для начала апдейт драйвера железки и выключение sptd — проблемы прекратились. Осторожно включаем sptd обратно: две недели — полет нормальный.

    PS: Данный пост был бы невозможен без Mear. Он предоставил проблемную систему для бесчеловечных экспериментов и всячески помогал мне в нахождении этой проблемы.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 113

    • НЛО прилетело и опубликовало эту надпись здесь
        +43
        Ага, чуть меньше 8 лет опыта в виндовых драйверах. И за некоторые из них мне до сих пор стыдно :-)
          0
          А я все думаю, откуда мне знаком этот ник?
        –9
        МЯСО!
          +15
          Второй раз «МЯСО!» вряд ли наберет 200 плюсов, так что вы это зря)
            +9
            Хотя мне кажется, что этот пост — куда большее мясо, чем первый.
              0
              Ну, просто это не инструкция «нажми туда, потом сюда, теперь вот так». Наверное, оттого и впечатление такое)
              +3
              Это не мясо, это десерт. Если точнее, это ТОРТ!
                0
                Пакет печенек с темной стороны Windows. :)
            • НЛО прилетело и опубликовало эту надпись здесь
                –1
                хватит «мясо-мясо». Так как «на мой взгляд, одновременно и более и менее интересный, чем предыдущий.» пост, то это можно назвать САЛО, НЕ РЫБА НЕ МЯСО!
                  –4
                  ЖИР!
                +2
                На всякий случай — KeStallExecutionProcessor — в каком-то роде аналог Sleep(), только выполняется в ядре (стопорит многозадачность), да к тому же ещё и в обработчике прерываний (т.е. в «коллбэке» от устройства).
                  +4
                  Кстати да, на всякий случай надо пояснить этот момент. Вот документация. Если ждать надо меньше тика таймера, то единственным вариантом будет крутить пустой цикл до тех, пор пока не придет время выходить. И марвеловский драйвер делает это в обработчике прерывания. Здесь нужно еще одно пояснение: после вызова обработчика прерывания это и все прерывания ниже этого оказываются замаскированы на этом процессоре. То есть на подобные «мелочи» процессор прерываться уже не будет, пока не выйдет из обработчика. Ну собственно, единожды застряв в обработчике прерывания от диска — любые последующие операции чтения/записи уже невозможны. Особенно, если прерывания «сродственны» (affinitized) этому процессору.
                  +5
                  Самая «хабровая» статья за последнюю неделю.
                    +14
                    степень хабровости статьи зашкаливает over 100%
                    –4
                    предыдущий пост потому так понравился людям, что они внезапно обнаружили что windows 7 это не магический черный ящик а вполне себе «windows xp в которую можно залезть по плечи и поковыряться».
                    то есть хрюша была чем то понятным а win7 это магическая черная коробка)
                      +12
                      Кстати, мой опыт подсказывает, что для «ковыряния» нужны не столько исходники (хотя они сильно помогают), сколько мощная документация и время на то, чтоб прочитанная информация переварилась и усвоилась. И вот здесь как то внезапно оказывается, что возможностей поковыряться в винде иногда даже больше, чем в том же линуксе.

                      А посыл обоих постов (в особенности первого): если лезешь ковыряться — для начала разберись.
                        0
                        а вы не могли бы подсказать какую-нибудь литературу для этого(для того, чтобы разобраться), или с чего начинать? Спасибо.
                          +1
                          У Соломона/Руссиновича/Ионеску поразительно доступно все расписано, но без бекраунда вчитываться все равно придется долго. И начального уровня — взять тот же драйвер тостера из WDK и поковырять. Благо сейчас не надо запускать тестовые драйвера на живой машине — можно при желании пустить одновременно с десяток виртуалок.

                          Если есть навыки отладки, ОЧЕНЬ рекомендую WRK — компилируете, заменяете ядро и ходите по ядру дебаггером с просмотром всех вызовов.
                          –9
                          > И вот здесь как то внезапно оказывается, что возможностей поковыряться в винде иногда даже больше, чем в том же линуксе.

                          Мммм. Наверное вы ошиблись в формулировке. Тут какая-то неправда написана.
                            +15
                            Да нет, мой опыт может быть и нерепрезентативным, но книг уровня Windows Internals для линукс просто нет (LDD не только устарела, но и по сути похожа скорее на «Writing WDM» Oney, а не на Windows Internals).
                            Документации подобной MSDN тоже нет — какие то разрозненные howto-шки, советы в форумах и пр… Я может и ошибаюсь, но СВОЮ мысль сформулировал совершенно точно. В винде ковыряться легче, чем в линуксе
                              –4
                              Выходит, что ваша фраза была многозначна, и до того смысла, который вы в него оказывается вложили, я не догадался. Даже не подозревал, что «возможность поковыряться» === «наличие качественной литературы и документации». Оригинально :)

                              То, что мне пришло в голову после первого (да и второго и последующих) прочтений вашего высказывания, трудно назвать правдой. Мне показалось, что вы хотели сказать, что умеючи и при наличии специальных утилит можно отладить win7 так, как нельзя отладить linux (даже при наличии исходников).
                                +6
                                Я имел в виду, что при наличии хорошей документации и хорошего дизайна системы (open/closed principle помните?) расширять систему проще, чем при наличии пары десятков миллионов строк исходников с плохим дизайном и практически полном отсутствии документации.
                                  –5
                                  Отлично :) Теперь оказывается вместо «возможностей больше» надо было читать «проще». Это же совсем не синонимы, не находите?
                                    +3
                                    В данном случае да. Если Вы записываете на счет Linux ПОТЕНЦИАЛЬНУЮ возможность разобраться в нескольких десятках миллионов строк без документации, внятных комментариев и нормального дизайна, то запишите, пожалуйста, на счет Windows ПОТЕНЦИАЛЬНУЮ возможность трудоустроиться в Microsoft — это опять таки будет проще.
                              +3
                              Да, я ковырялся в обоих. Более того, два года был убежденным линуксоидом
                          0
                          Сталкивался с похожей проблемой на ноутбуке Asus: windows 7 x64 в случайный момент времени могла зависнуть на 2-3 минуты, потом продолжить работу как ни в чем ни бывало.
                          Грешил практически на все, закончилось переустановкой с x64 на x86.

                          В «чистом» состоянии работала нормально. Постепенная установка драйверов показала, что зависание вызывает драйвер Intel Rapid Storage Technology. После его установки многоминутные зависания снова появились, после удаления — исчезли.

                          Вроде все прекрасно, но раз-два в неделю ноут стал уходить в синий экран смерти по исключению «ядро не получило сигнал за требуемый промежуток времени», а жесткий диск нет-нет да щелкнет как-то подозрительно.
                          Даже не знаю, в какую сторону копать дальше.
                          +14
                          Пара ваших статей, стоят десятка рекламок от местных евангелистов типа XaosCPS.
                            +4
                            А мне нравятся его посты. И, кстати, Technology evangelist:
                            A technical or technology evangelist is a person who attempts to build a critical mass of support for a given technology in order to establish it as a technical standard in a market that is subject to network effects.[citation needed] Professional technology evangelists are often employed by firms which seek to establish their proprietary technologies as de facto standards or to participate in setting non-proprietary open standards. Non-professional technology evangelists may act out of altruism or self-interest (e.g., to gain the benefits of early adoption or the network effect).

                            В случае MS это подходит разве что к сильверлайту и WP7, но я не замечал у XaosCPS особой любви конкретно к нераспространенным («ну это пока» :-) ) технологиям МС.
                              0
                              О, и бингу еще
                              Заметили, в какой поиск я лазил по поводу NIS? То то же :-)
                            0
                            У меня такая же проблема иногда проявляется в Task Scheduler при открытии диалога создания новой задачи и (что самое странное) добавления нового триггера в задачу.
                              –6
                              Жаль кармы маловато, обязательно плюсанул бы. Приятная статья, показывает что винда хоть и красивая, но всегда можно открыть капот и залезть по самые дебри :)
                                +6
                                Про «под юбку», тьфу, «под капот» винды я еще собираюсь написать. Конкретно в ближайших планах Memory Manager (с небольшими вылазками в Cache Controller и I/O Manager). Просто потому, что мне больно видеть всякие советы по отключению свопфайла и «экспертные» мнения по поводу swappiness в Linux. :-)
                                А так раз постарался — написал и потом можно просто давать ссылку
                                  +1
                                  Ну даже такого уровня статьи, раскрывающие возможности ОС даже далеко не для гуру — весьма интересны… хотел бы я так разбираться :)
                                    0
                                    ну реально, зачем своп если памяти завались?
                                      –1
                                      Дело даже не в том, что не нужен, а втом, что если его не прибить, винда же его будет использовать при интенсивном io, забивая ОП кешем для диска, а на диск сбрасывая всю память приложений.
                                        0
                                        а пример такого интенсивного ио для которого нужна вся оперативка в качестве кэша?
                                          +3
                                          Копирование больших файлов, скачивание и раздача торрентов. Вся оперативка не нужна, это понятно все кроме винды, и она вытесняет приложения. Если, конечно вы не работаете с этими приложениями интенсивно и не даете их вытеснить.

                                          Отдельная история при использовании свопа — спящий режим. Складывается впечатление, что винда в угоду быстрого засыпания, страницы, копии которых есть и в свопе и в ОП, не сбрасывает на диск повторно. От этого, вместо быстрого восстановления из линейно расположенного файла, винда часть программ достает из сильно фрагментированного файла подкачки. Если запущенно много приложений, после выхода из спящего режима она еще пару минут тупит. А без свопа готова к работе почти сразу.

                                          Мне бы было интересно узнать, отчего amirul больно видеть, как компьютеры начинают работать быстрее при отключении свопа.
                                            0
                                            Копирование больших файлов

                                            Делаю это постоянно, ничего подобного не замечал.

                                            скачивание и раздача торрентов

                                            А вот это уже проблемы торрент-клиентов. Если они говорят, что их операции имеют такой же приоритет памяти, как и все остальное в системе — система совершенно логично выгружает на фиг «все остальное» и оставляет наиболее часто используемый кеш раздаваемых файлов. Более того, это можно обойти понизив PagePriority у потоков торрент-клиента.

                                            Отдельная история при использовании свопа — спящий режим. Складывается впечатление, что винда в угоду быстрого засыпания, страницы, копии которых есть и в свопе и в ОП, не сбрасывает на диск повторно

                                            Все, что в Modified списке — сбрасывается в соответствующие файлы, все что в Private (Working Set-ы) пакуется и сбрасывается в hiberfil.sys. Со Standby списками чуть сложнее, высокие уровни (6 и 7), насколько я знаю, тоже сбрасываются в hiberfil, низкие — просто выбрасываются и перезаполняются после просыпания.

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

                                            А здесь Вы совершили сразу несколько ошибок. Во-первых, пейджфайл обычно не более фрагментирован, чем хиберфайл. Во-вторых не вся дисковая активность связана с пейджфайлом (более того, когда памяти много — пейджфайл практически не используется). В-третьих, обычно, то что не оказалось в standby списке на момент «засыпания» использовалось незадолго до этого, а следовательно все необходимое для нормальной работы должно находиться в Working Set-ах процессов и подлежит сбросу на диск и восстановлению. Ну а кеш чаще всего перезаполняется Superfetch-ем, который практически никак не мешает работе кроме как миганием лампочки, которое очень отвлекает некоторых людей.
                                              +1
                                              Во-первых, пейджфайл обычно не более фрагментирован, чем хиберфайл.
                                              Да ну? Хиберфайл — слепок памяти, читается и пишется преимущественно линейно. Подкачка много раз переписывается по мере работы, отчего и фрагментируется. И да, я естественно говорю о внутренней фрагментации внутри файла. Вы же не подумали, что я о расположении блоков на диске?
                                                0
                                                > Вы же не подумали, что я о расположении блоков на диске?
                                                Признаться, я именно об этом и подумал
                                                Ну, данный момент присутствует, хотя винда и кластеризует страницы, лежащие в памяти рядом при сбросе на диск. На самом же деле, можете посмотреть сколько занимает чтение пейджфайла при просыпании — 2-3 секунды даже на медленных дисках.
                                                Вот пример (синее — это low priority i/o, которое ничем, кроме мигания лампочки не мешает):

                                                  +1
                                                  Ваш пример ни о чем не говорит, вы ничего не уточнили о загрузке системы. Я говорю о рабочем состоянии, когда винда по неделе и больше не перезагружается, только уводится в спящий режим. Хотя при определенной нагрузке это проявляется занчительно раньше.
                                                    0
                                                    Я тоже так работаю. Более того, активно использую hibernate еще с Win2k — никогда не замечал подобных проблем.
                                                +1
                                                Во-вторых не вся дисковая активность связана с пейджфайлом (более того, когда памяти много — пейджфайл практически не используется).
                                                Эта дисковая активность связана с пейдж файлом, потому что пропадает от выключения его (Капитан, же!).

                                                не мешает работе кроме как миганием лампочки,
                                                Конкретно эта активность мешает. Пока пару минут не прогрузится, работать не будет.
                                                  0
                                                  > Конкретно эта активность мешает. Пока пару минут не прогрузится, работать не будет.
                                                  Пару минут? Ну сделайте уже xbootmgr -trace hibernate и покажите мне эту пару минут обращений к пейджфайлу.
                                                  У Вас что-то серьезно поломано, и вместо того, чтоб винить безобидный пейджфайл — нужно найти причину неисправности
                                                    +1
                                                    Ага, как только включаю подкачку, так сразу ломается, только отключаю — чинится :) И не у меня вообще-то, а у всех. По крайней мере за XP могу поручиться.
                                                      0
                                                      И не вообще у всех, а только у Вас. Ни у меня ни у кого у моих знакомых не ломается. Я склонен верить собственному опыту. Но найти причину поломки мне интересно, поэтому соберите все таки hibernate trace.
                                                        +1
                                                        И не только у меня, а вообще у всех.
                                                        Собрать не могу. Дома с недавних пор Мак, на работе, сами понимаете, заниматься этим не стану. Мой опыт идентичен опыту моих знакомых — производительность с подкачкой и без — небо и земля.
                                                          0
                                                          еще за долго хауса я выработал для себя принцип: не верь пользователям. все лгут.
                                                          пока нет примера, ваши слова ничего не значат.
                                                            0
                                                            пока нет примера, ваши слова ничего не значат.
                                                            Вот вы и врете.
                                                              0
                                                              Ну так а где пример то?
                                                              Hint: слова не являются примером.

                                                              У меня создается странное ощущение, что я хочу разобраться в Вашей проблеме больше, чем Вы сами
                                                                +1
                                                                Я же сказал, у меня нет технической возможности предоставить вам пример, кроме моих слов и слов других людей. И в своей проблеме я разобрался — отключил подкачку.
                                                                  0
                                                                  Ну тогда да, я конечно же забуду собственный опыт (и теоретические знания, хехе) и поверю Вам на слово.
                                                                    +1
                                                                    А, кстати, расскажите о своем опыте работы без подкачки. Как долго не пользовались, в какой момент поняли, что разницы в производительности нет?
                                                                      0
                                                                      Первый раз отключил подкачку, когда проапгрейдился со 128Мб до ЦЕЛЫХ 512. Жил так года полтора. Разница в некоторых приложениях была, так как икспи не имеет приоретизации памяти. Включил обратно, когда игра Freelancer2 стала вылетать от нехватки памяти. Уже в висте пытался отключать с 3 Гб памяти — имел много проблем с заканчивающейся памятью. Включил своп и не заметил особой разницы. С тех пор никогда не выключал и даже не ограничивал пейджфайл — дефолтные настройки отлично работают.

                                                                      Сейчас на всех машинах по 8 гиг памяти, периодически смотрю на профиль использования пейджфайла — активность 2-3 страницы в час (если вообще есть).
                                                                      Пока есть Zeroed/Free память, рабочие наборы не трогаются (даже если подрезаются — приложение может сделать быстрый softfault страницы обратно себе рабочий набор), а когда zero/free страницы заканчиваются — начинается обычный MRU алгоритм, призванный уменьшать не количество обращений к свопу, а количество обращений к диску вообще
                                                                        +1
                                                                        > Разница в некоторых приложениях была, так как икспи не имеет приоретизации памяти.

                                                                        Думаю, тут можно и закончить наш спор.
                                                                          0
                                                                          Так это почти 10 лет назад было. Надо не свопфайл отключать, а XP
                                              0
                                              Когда есть, что кешировать память ВСЕГДА будет практически под завязку забита данными с диска.
                                              Как то так (синенькое — СВОБОДНАЯ память, содержащая данные с диска):


                                              Другое дело, что к сожалению homm рассуждает о вещах, в которых, очевидно, не разбирается.
                                                +1
                                                Другое дело, что к сожалению homm рассуждает о вещах, в которых, очевидно, не разбирается.
                                                Уважаемый. Я не первый день за компьютером, что такое виртуальная память знаю. Все ваши теоретические выкладки меркнут перед одним фактом — с выключенной подкачкой виндовс работает намного отзывчевее. Ощущения можно сравнить с переходом от одного ядра к двум.
                                                  0
                                                  > Все ваши теоретические выкладки меркнут перед одним фактом — с выключенной подкачкой виндовс работает намного отзывчевее.
                                                  О, да. Я конечно же сухой теоретик и ни разу в глаза не видел «живую» винду. Все Ваши теоретические выкладки меркнут перед фактом: pagefile практически не влияет на нормальную работу, но при этом увеличивает Commit Limit (что позволяет запускать больше всяких разных интересных программ) и освобождает память для более акнутальных данных с диска
                                                    0
                                                    Я конечно же сухой теоретик и ни разу в глаза не видел «живую» винду.
                                                    судя по тому, что вы пишете — так оно и есть.
                                                      0
                                                      И что же конкретно Вас смущает?
                                                        +1
                                                        То, что ваши слова о незначительном влиянии подкачки на производительность ни разу не подтверждаются моим опытом.
                                            –1
                                            Вот здесь есть длинный флейм по поводу swappiness в Linux
                                            Вот в частности слова оригинального автора этой самой «swappiness» Andrew Morton:
                                            «Swapout is good. It frees up unused memory. I run my desktop machines at swappiness=100.»

                                            Когда «памяти завались» винда и не использует своп, а вот когда надо решать какие страницы оставить в памяти, а какие сбросить на диск — разницы между дисковым кешем, memory-mapped файлами и пейджфайлом фактически нет (хотя страницы и сбрасываются в пейджфайл по особому пути, чтоб исключить дедлоки).
                                              0
                                              когда какой-нибудь торрент (или что другое столь же аппетитное) насилует мой винч мне глубоко наплевать скачает он за час или за 59 минут. но когда я переключусь с него например на мессенджер я не хочу ждать ни мгновения, пока его данные поднимутся из свопа. говоря проще, отключая своп я говорю системе: пусть кэш занимает всю память, но ни в коем случае не в ущерб приложениям, находящимся в памяти, которые мне могут понадобиться в любой момент независимо от того, как давно я их активировал в последний раз.
                                                0
                                                Физическая память — такой же ресурс, как, например, процессорное время. Если какой нибудь кривой процесс будет «насиловать процессор» не давая исполняться остальным — будет сразу понятно, что проблема с этим процессом, если же подобное происходит с памятью — все почему то считают, что дело в свопфайле.
                                                  +1
                                                  если бы процессор умел «свопиться» в облако — была бы такая же проблема. и наоборот, почему-то никого не смущает, что если не хватает процессора, то система подтормаживает, но многих устраивает, что когда не хватает памяти, то ради незначительного выигрыша 1 программе другие начинают безбожно тормозить
                                                    0
                                                    Конечный ресурс «процессор» разделяется между желающими на основе их приоритетов. Конечный ресурс «физическая память» тоже разделяется между желающими на основе приоритетов. Если кто то (торрент-клиент) говорит, что те тонны файлов, которые он читает не менее важны, чем, скажем, системные файлы — система будет выгружать системные файлы. Здесь дело в приложении, неправильно оценивающем важность производимых операций.
                                                      0
                                                      а как приложение без оглядки на другие приложения сможет правильно оценить важность? важность может оценить только пользователь. но у него нет ручек вида «не выгружать данные этого приложения в своп» или «это приложение реального времени»
                                                        +1
                                                        В случае с мюторрентом все просто: background priority (как он, собственно и выполняется). Означает «Используй сколько хочешь ресурсов, но не мешай работать пользователю».
                                                          0
                                                          угу, и каждое толковое приложение использует этот приоритет, когда находится в фоне и благополучно улетает в своп при первом же удобном случае…
                                                            +1
                                                            Нет, во первых только операции, которые оно будет выполнять в этом режиме будут иметь этот приоритет. Весь кеш накопленный до этого будет с нормальным приоритетом. Во вторых, если приложение производит мало операций ввода/вывода — ему нечего волноваться о приоритета ввода/вывода и памяти.
                                                              0
                                                              гм… ну тогда мне нечего возразить, хотя, это всё-равно кривой способ разруливания…
                                                                +1
                                                                Приоритеты (в том числе динамические и эвристические) используются для разруливания доступа ко всем конечным ресурсам: процессор, диск, память, сеть и пр… Это пока что лучшее, что придумано.

                                                                Без всякого сарказма: я бы с удовольствием посмотрел на более совершенный подход.
                                                                  0
                                                                  я не против приоритетов, я против свопа, пока в нём нет острой необходимости.
                                        +2
                                        Вы молодец! Если бы каждый разбирался в своей области так же хорошо, как Вы в своей, мир был бы намного лучше. Спасибо, что делитесь своими знаниями и опытом с сообществом.
                                          +2
                                          Судя по названию топика, автор читал (и уважает) либо Гарднера, либо Русиновича (а может и обоих сразу).
                                            +4
                                            Руссиновича. И очень приятно, что не один я
                                              0
                                              Взаимно!
                                              Еще советую почитать Гарднера, он хоть к хабру отношения не имеет, но у него много «The case of» :)
                                                0
                                                Спасибо — обязательно почитаю
                                                0
                                                Руссинович — это таки да
                                              –1
                                              Сколько сталкиваюсь с Марвеллом — всё время какие-то проблемы. То драйверы кривые в течение нескольких версий подряд, то чипы тормозят и глючат в роутерах, то ещё что-нибудь… Насторожённо отношусь я к Марвеллу, и, видимо, не зря )
                                                0
                                                Черт побери, Windows — это не просто!
                                                  –1
                                                  Не только полезно, но и познавательно. Как хорошо, что Вам в голову пришла идея написать статьи на Хабре :)

                                                  BTW, может быть Вы еще знаете как ускорить скорость закрытия Visual Studio после продолжительного рабочего дня?
                                                    +4
                                                    Надо смотреть что конкретно ее держит. Но лично я вообще никогда VS не закрываю :-)
                                                    +3
                                                    что-то я себя неприятно чувствую, осознавая, что нет навыков так глубоко копать
                                                      0
                                                      ну вот, второй раз за последние семь дней я чувствую себя ламером))
                                                      amirul, у меня вопрос не по теме несколько, какую литературу вы читали для своего развития?) надо и мне что-нить приобрести…

                                                        0
                                                        Кстати, вы не знаете почему в Windows XP Process Monitor так долго отключается от ETW, а в Vista\7 таких проблем нет?
                                                          +2
                                                          Статью перечитывать на ночь до полного просветления
                                                            –1
                                                            Хочу еще раз сказать огромное спасибо amirul за помощь в разборе и решении проблемы ))) Успехов Вам в Вашей работе и профессиональном росте!
                                                              –1
                                                              Очень помогла первая статья. Эта больше познавательна, чем полезна, но всё равно жирный плюс!!!

                                                              amiurl, очень надеюсь, что у Вас очень большая зарплата! Такой опыт и знания надо поощрять.
                                                                –1
                                                                Извините, опечатался — amirul конечно
                                                                –1
                                                                Напомнило похожие детективные истории от Руссиновича. Второй раз спасибо — мало таких статей (и тем более, комментов), когда явно осознаешь, что время, затраченное на прочтение, потрачено не зря.
                                                                  –1
                                                                  Обожаю такие расследования. «Ничего не понял», но захватывающе!
                                                                    –1
                                                                    Снимаю шляпу, все эти проблемы есть у меня: долгий старт винды, зависания (на двух компах). Еще есть такая: разрастание одного из svchost.exe до неприличных размеров после нескольких дней работы без перезагрузки. Может быть об этом тоже расскажите?
                                                                    P.S. скоро праздники, попробую все ваши советы.
                                                                      –1
                                                                      svchost разрастается в связи с тем, что никому другому эта память в данный момент не нужна :-)
                                                                      Task Manager — вообще одна из самых обманчивых утилит в винде. Попробуйте скачать RamMap и сделать «Empty->Empty Working Sets» и «Empty->Empty System Working Set»

                                                                      Суть в том, что Private Working Set Size (который показывается в колонке Memory в Task Manager) может меняться системой независимо от приложения
                                                                        –1
                                                                        А если подробнее, сервис этот скорее всего SysMain (тот самый Superfetch). Память ему нужна для того, чтобы проанализировать всю историю обращений к файлам и построить план дальнейших действий. Запускает он эти вычисления когда видит, что система в Idle режиме (ресурсы практически не используются), а после того как заканчивает — ресурсы освобождаются.
                                                                        0
                                                                        дело в том, что на моем буке 1.5 памяти, стоит вин 7. и про нехватку памяти говорит сама винда. я убиваю этот процесс (он забирает до 800 мб) и вроде бы все нормально, но отваливается вайфай.
                                                                        те не то что мне кажется что много, он реально забирает всю память.
                                                                          –1
                                                                          «Нехватку памяти»? В смысле pagefile отключен при полутора гигабайтах памяти? Это зря.
                                                                            0
                                                                            pagefile есть, всплывает окошко с сообщением: windows недостаточно памяти
                                                                              –1
                                                                              Насколько я помню, оно всплывает когда система вплотную приближается к Commit Limit (приблизительно суммарный размер физической памяти и пейджфайла).
                                                                              Что у Вас вот здесь:
                                                                                0
                                                                                в данный момент 1800/2550. но аптайм небольшой, 16 часов.
                                                                                  –1
                                                                                  Ну 2.5 гига должно быть достаточно для большинства простейших задач, но применять в фотошопе тяжелые фильтры не стоит :-)
                                                                                  Зависит оно в основном не от аптайма, а от того, какие приложения запущены.
                                                                                  Можно увеличить размер пейджфайла, но при малом количестве физической памяти и высоком Commit Charge (сколько коммитят отдельные приложения можно посмотреть в колонке Memory — Commit Size в таск менеджере) будет очень много своппинга, зато все по крайней мере будет работать.

                                                                                  Вопрос не по существу: не думали над покупкой дополнительной памяти?
                                                                                    0
                                                                                    никакого фотошопа, мой старичек при большой нагрузке греется и выключается.
                                                                                    все что на нем есть это постоянная раздача торрентов, браузер хром (я его закрываю, он работает не всегда), удаленный рабочий стол. Иногда смотрю фильмы (не хд).
                                                                                    Вначале вин 7 работала на 512 метрах (тормоза были только при открытии 5-6 окон), потом добавил гиг (к сожалению больше 2 гигов мой бук не потянет)
                                                                                    Винда поломанная, я вообще грешу на это. а больше даже не на винду а на сам кряк.

                                                                                    Итого: список моих задач — постоянно крутится торрент клиент, периодически серфинг, фильмы, удаленный рабочий стол. после аптайма в несколько дней разрастается один из системных процессов. никакой дополнительной нагрузки нет.

                                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                        Самое читаемое