Мой супер-быстрый компьютер (ваш такой же?)

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение iGrok » 03.04.2014 (Чт) 23:31

FireFenix писал(а):я ещё не встретил

FireFenix писал(а):даже у моего кореша


Итого двое не сталкивались, трое (я, товарищ, Хакер) сталкивались. Перевес в нашу пользу. :)

FireFenix писал(а):просто глупо используете ресурсы

Ну, у товарища расчётная задача съедает столько памяти, сколько ей дают. Дадут 256Гб - съест 256Гб. Дадут больше - съест больше. На меньшем объёме памяти просто считается маленькими кусками и существенно дольше. Что-то около терабайта ей бы, пожалуй, хватило. Но ты же понимаешь...

У меня попроще, но да, мне действительно нужно 5 одновременно запущенных виртуалок, среди них макось (4Гб) и win8 (1Гб), остальные три по 256-512. IDEA с парой проектов (жрёт до 2Гб, больше ей в принципе не дать, хотя на что ей столько и куда она её девает, я не понимаю). Опера с 30-40 вкладками (1.5Гб), FF с 15-20 вкладками (ещё около 1Гб). Файловый кэш (совсем мало, т.к. SSD, а вот раньше было прилично за счёт образов тех же виртуалок). Остальное мелочи. Сейчас свободно около 4Гб из 16.
Часть мелочи можно позавершать, стартует она, благодаря ссд, моментально. Но погоды это не сделает. Сейчас даже пару виртуалок можно вырубить, т.к. с ssd они тоже грузятся разумно быстро. Но когда был hdd старт/стоп виртуалки съедал по 5-10 минут работы в зависимости от загруженности памяти и диска.
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение Хакер » 04.04.2014 (Пт) 10:37

iGrok писал(а):
Хакер писал(а):если человек пишет на чём-то высокоуровневом

Ну, это да. Но, скажем, браузеры-то пока ещё пишут на плюсах. Да и множество другого софта тоже. А проблемы там ровно те же.

Дело в том, что «плюсы» — это уже «что-то высокоуровневое».
Потому что программисты используют Boost, Qt и т.п. вещи. И в коде, опять же, не оказывается места для VirtualLock.

Вот например Google Chrome. Не раз видел в его рекламе слоган «Быстрый». Посмотрим:

google_chrom_kernel_imports_near_virtual.png
google_chrom_kernel_imports_near_virtual.png (23.11 Кб) Просмотров: 5901

— VirtualLock? — Не, не слышал!

Хотя написан на С++ и, говорят, частично даже на ассемблере.

FireFenix писал(а):Если я правильно помню, VirtualLock не даёт выгрузить в своп.
А теперь вопрос, нафига держать программы в фоне с большим потреблением ОЗУ?


FireFenix, меня бесят до состояния осатанения люди, которые говорят мне, что я неправильно пользуюсь системой и софтом, и что это я должен подстраиваться под криво написанный софт и не запускать больше двух программ одновременно, а не тупые наивные разработчики должны подстраиваться под моё желание запускать 300 процессов одновременно.

Это всё равно, что купить Феррари, а на следующий день она сломается, и в сервисе тебе скажут «а, ну что же вы, дорогой, хотите, ведь вы ездили на ней со скоростью больше 100 км/ч; вот если бы ездили со скоростью 40 км/ч — она бы вам 15 лет без проблем прослужила». Это надувательство. Спасибо, но у нас уже были времена DOS с однозадачностью. Теперь у нас времена многозадачности. Теперь у меня есть процессор с 8 ядрами, чтобы в 8 раз быстрее обрабатывать сотни конкурирующих потоков.

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

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

Google Chrome быстр только тогда, когда он — единственный прикладной процесс.

Горькая правда в том, что все эти горе-программисты и проектируют, и пишут, и тестируют свой жалкий софт с убеждённостью, что их программа будет единственной, которая будет работать на компьютере. Тогда им действительно не нужен VirtualLock. Тогда их программа действительна быстра, как дьявол.

Кстати ещё один момент тупости: как проимплементирована реакция на WM_SIZE. Проблема в том, что WM_SIZE как правило запускает целый каскад перемасштабирования дочерних окон/контролов, у некоторых из которых тоже есть какие-то дочерние элементы. Всё это требует кучи пересчётов и перемещений элементов. Как программист проверяет, что всё это реализовано хорошо? Он просто пробует ресайзить окно мышкой. И оно ресайзится очень быстро без каких-либо лагов. Вывод — оптимизация не нужна, зачем тратить время. К тому же, наверняка, ресайз главного окна вызывает ресайз контролов, а контролы чужие и код ресайза в них вообще не переделать. Но ведь всё работает быстро. Прекрасно. Теперь, когда открыто 100 окон, попробуйте ресайзнуть панель задач (или скрыть/показать приложение, прилепляющееся к границе экрана). Эти сто окон помимо WM_SETTINGCHANGE (из-за изменения workarea) получат ещё и WM_SIZE. После этого можно отойти от компьютера, налить себе кофе, выпить его, потому что всё намертво зависнет на пару минут. Ибо время, за которое сто окон обработают одновременно пришедшее WM_SIZE, не равно сумме времён, за которые каждое окно из сотни обработает это сообщение. А на порядок или два — больше этой суммы. Поэтому реакцию на WM_SIZE нужно жестко оптимизировать. Но никто не делает.

Если Google Chrome был свёрнут 4 часа назад и с тех пор не разворачивался, но зато с тех пор запускался фотошоп, несколько виртуальных машин, делался рендер видео в Vegas-е, и теперь вдруг мне захотелось развернуть Chrome — то он развернётся не мгновенно, а через секунды 3—4.

Но если ренден видео в Вегасе идёт прямо сейчас, то он развернётся через 40 секунд.

Или вот типичный сценарий: браузер давно лежат свёрнутым, а тут я его развернул и читал текст из вкладки. Прочитал. Слава гуглу! Теперь я кликаю на корешок вкладки, которая вообще пустая. В этой вкладки не открытка никакая страница.

Хром виснет на 6 секунд. Харды делают протяжное хррр-р-р-ррр-рр.

Последующие переключения между вкладками быстры как никогда. Но певая попытка перейти на пустую вкладку заняла 6 секунд.

Потому что в из working set-а были исключены страницы, которые оказались нужны, чтобы обработать переключение.

Это может быть 5 страниц, но они могут лежать в разных местах виртуального АП, и это будет 5 отдельных page-fault-ов, и это будет 5 отдельных page-in-ов, то есть 5 чтений с диска, и это могут быть разные места файла подкачки, и с учётом того, что Chrome — не единственный процесс, которому нужно что-то читать с диска, это и занимает те 6 секунд.

Так вот, такие вещи, как таблица дескрипторов браузерных вкладок — должны быть локнуты. Это значит, что пустая вкладка откроется мгновенно, а вкладка с огромным документом откроется за 3 секунды. Я недоволен, но меня устраивает ситуация, когда пустая вкладка откроется мгновенная, в вкладка с большим документом — за 3 секунды, и когда время открытия вкладки будет пропорционально размеру документа. Но меня абсолютно не устраивает, когда даже открытие пустой вкладки вешает процесс на 6 секунд.

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

Другая вещь, для которой VirtualLock ещё более важен — это пробежки по большим цепочкам данных.
Если нужно пробежаться по большому массиву — то значит нужно его локать. Полностью или по частям (в зависимости от размера массива). Если нужно не только пробежаться, но и каждый элемент массива требует обращения к некоторой другой структуре, значит нужно заранее локнуть эту структуру, а потом локать фрагменты большого массива.

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

И вот вам надо опять пробежаться по цепочке страниц. Обращение к первой же страницы из цепочки приводит к page-fault-у. Чтобы загрузить в физическую память первую страницу цепочки, система выкинет в своп конец цепочки.

Подвох понятен?

У менеджера памяти нет искусственного интеллекта. Менеджер памяти понятия не имеет о цепочки. Для него страницы, входящие в цепочку, ничем не лучше какой-нибудь мусорной страницы.

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

Вот это и есть тот самый сценарий, когда данные бесполезно и неэффективно гоняются туда-сюда.

У системы нет дара предвидения, чтобы предугадать, что за обращением к странице X обязательно последует обращение к странице Y. Система не знает, что ради X будет глупо выгружать Y, потому что следом понадобится загрузить Y. Но программист знает. И код знает, что он делает и куда пойдёт обращение.

Поэтому:
Дайте системе подсказку.

Конечно, менеджер памяти написан по умному. И он пытается предсказывать, к каким страницам обращения будут чаще, чем к остальным. И он неплохо справляется. Но не всегда. Иногда он может предсказывать неправильно. Он угадывает, а у программиста есть возможность дать ему знать навеняка. Но программисты слишком ленивы, наивны и тупы, чтобы воспользоваться этим шансом избежать лишнего копирования данных туда-сюда.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.04.2014 (Пт) 12:53

Хакер писал(а):Вот например Google Chrome. Не раз видел в его рекламе слоган «Быстрый». Посмотрим:
— VirtualLock? — Не, не слышал!

Я вот представил, как 189 хромопроцессов захапают себе по куску памяти каждый. И чего же остальным программам останется??? Тут ведь даже лимит на число залоченных процессом страниц не сработает - верно?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение Хакер » 04.04.2014 (Пт) 13:05

Qwertiy писал(а):Я вот представил, как 189 хромопроцессов захапают себе по куску памяти каждый.

Откуда столько? хотя могу предположить, что там по процессу на каждую вкладку. Ну вот этот момент — это тоже глупость.

Во-вторых, пусть хапают. Вызов VirtualLock может обломиться. Но ничего страшного в этом нет, всё просто пойдёт по обычному сценарию, а не по лучшему.

В-третьих, есть разные явления: есть урезание WS одних процессоров ради увеличения WS других, а есть изменение состава WS одного процесса засчёт выкидывания одних страниц и загрузки других. Так вот VirtualLock в первую очередь полезен для второго, но с учётом отягощающих обстоятельств.

Как это обычно происходит? Какой-нибудь Vegas требует увеличения своего WS. Засчёт чего его WS будет увеличен? Правильно, засчёт уменьшения WS других процессов, включая процесс какого-нибудь Хрома. И вот WS хром становится мал и он уже не может уместить все страницы из пресловутой цепочки. Ну или может, но «впритык». Так вот Хром может сказать менеджеру памяти, что надо цепочку держать в WS целиком, в ущерб чему нибудь менее важному. Т.е. VirtualLock-нуть страницы цепочки, пометив их как страницы повышенной важности, чтобы в случае урезания WS первыми вылетели из него страницы пониженной важности. Но Хром этого не делает, поэтому все страницы имеют одинаковую степень важности, и при урезании WS имеют одинаковый порядок вероятности на вылет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.04.2014 (Пт) 14:33

Хакер писал(а):Откуда столько? хотя могу предположить, что там по процессу на каждую вкладку.

Именно. Причём, в некоторых случаях может быть и по несколько...

Хакер писал(а):Ну вот этот момент — это тоже глупость.

Спорный момент. С одной стороны, уйма процессов мне тоже не нравится. А с другой, открытая в одной вкладке флеш-игра не грузит процессор так, что скачивание файла замедляется в 10 раз (да, было такое однажды в Опере). Ну и если вкладка крашится, то это не ведёт к закрытию браузера с потерей всего по остальным вкладкам.

Кстати:
Хакер писал(а):Теперь я кликаю на корешок вкладки, которая вообще пустая. В этой вкладки не открытка никакая страница.
Хром виснет на 6 секунд. Харды делают протяжное хррр-р-р-ррр-рр.
Что значит не открыта? Express-панель - это тоже страница, её даже подебажить можно. И если она была, то она открыта и где-то себе лежит. Причём, переход на неё вызывает межпроцессное взаимодействие. Если речь о создании новой вкладки, то тут вообще сначала новый процесс порождается.

Хакер писал(а):Во-вторых, пусть хапают. Вызов VirtualLock может обломиться. Но ничего страшного в этом нет, всё просто пойдёт по обычному сценарию, а не по лучшему.

Не совсем так. Браузер запущен постоянно и скорее всего он будет открыт раньше других нужных программ, потому что те запускаются по мере необходимости. Выходит, что браузерные процессы себе память залочить успеют, а вот запущенная потом IDE, как и другие программы, будет постоянно свопиться. Как-то не привлекает меня такой вариант - лучше уж пусть браузер немного подтормаживает, чем всё остальное, что мне вздумается запустить...

Хакер писал(а):Засчёт чего его WS будет увеличен? Правильно, засчёт уменьшения WS других процессов, включая процесс какого-нибудь Хрома.

Т. е. он может снять запрет на выгрузку страниц уже запущенного процесса в таком случае? Или всё-таки просто начнёт пихать остальное в своп?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение Хакер » 04.04.2014 (Пт) 14:37

Qwertiy писал(а):Спорный момент. С одной стороны, уйма процессов мне тоже не нравится. А с другой, открытая в одной вкладке флеш-игра не грузит процессор так, что скачивание файла замедляется в 10 раз (да, было такое однажды в Опере). Ну и если вкладка крашится, то это не ведёт к закрытию браузера с потерей всего по остальным вкладкам.

Всё это решается одним потоком на одну вкладку.

Qwertiy писал(а):Выходит, что браузерные процессы себе память залочить успеют, а вот запущенная потом IDE, как и другие программы, будет постоянно свопиться.

Процесс не может локнуть памяти больше, чем его MinWorkingSetSize. А количество страниц в объёме MinWorkingSetSize так или иначе присутствует в памяти. Таким образом, VirtualLock позволяет менять ситуацию от «в ФП всегда присутствует что-попало» до «в ФП всегда присутствует то, что нужно».

Qwertiy писал(а):Т. е. он может снять запрет на выгрузку страниц уже запущенного процесса в таком случае? Или просто начнёт пихать остальное в своп?

Не понял, кто «он» и что значит снять, и что значит «начнёт пихать остальное в своп». Перезадай вопрос.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.04.2014 (Пт) 15:02

Хакер писал(а):Всё это решается одним потоком на одну вкладку.

Думаю, поток на вкладку есть у всех браузеров, тем не менее, почему-то не решили.
Опера падает вся, FF и IE - тоже. Только у хромиумов с отдельным процессом на вкладку падает только вкладка, а всё остальное живо.
Про скачивание файла - есть же лимит нагрузки на процессор для процесса. И если кто-то слишком активно жрёт процессорное время, то другим потокам внутри процесса всё равно достанется меньше. А в случае разных процессов вступает системное регулирование другого уровня. Или я сейчас не прав? Если не прав, то расскажи, как оно на самом деле, пожалуйста.

Хакер писал(а):Процесс не может локнуть памяти больше, чем его MinWorkingSetSize. А количество страниц в объёме MinWorkingSetSize так или иначе присутствует в памяти. Таким образом, VirtualLock позволяет менять ситуацию от «в ФП всегда присутствует что-попало» до «в ФП всегда присутствует то, что нужно».

Хм.. Весьма стоящее уточнение. Не знал. А какого размера стандартный MinWorkingSetSize?

Хакер писал(а):Не понял, кто «он» и что значит снять, и что значит «начнёт пихать остальное в своп». Перезадай вопрос.

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

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение Хакер » 04.04.2014 (Пт) 16:54

Qwertiy писал(а):умаю, поток на вкладку есть у всех браузеров, тем не менее, почему-то не решили.
Опера падает вся, FF и IE - тоже. Только у хромиумов с отдельным процессом на вкладку падает только вкладка, а всё остальное живо.

Потому что руки растут Я не знаю, почему. На самом деле, это сложный политический вопрос. Кто виноват и что делать? Я исхожу из того, что под «падением» ты подразумеваешь смерть процесса от исключения 0xC0000005. Так вот, если не обрабатывать исключения, то тут я думаю понятно, но если обрабатывать исключение, то возникает вопрос: что делать в обработчике?

FireFox в обработчике практически полностью «убивает себя» и показывает окошко «Mozilla Crash Report». Логика обработчика исключения, надо полагать, проста: если в текущем потоке что-то пошло не так, то до того, как поток свалился на исключении, он мог успеть что-то испортить в памяти, поэтому от греха подальше убьём-ка мы весь процесс.

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

Например, взять тот же BSOD. Суть BSOD-а в том, что при малейшем подозрении на то, что «что-то пошло не так», мы останавливаем всю систему. В случае ядра это имеет какой-то смысл, и мы жертвуем потерей несохранённых данных, чтобы защититься от повреждения давно сохранённых. Но на самом деле через BSOD можно просто перешагнуть и продолжить работу:
«Жизнь после BSOD-а» (части: 1, 2, 3, 4, 5, 6, 7, 8, 9)

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

Более того. Возможен трюк, который позволяет делать потоки-песочницы. Т.е. если в обычном случае все потоки одного процесса видят идентичное адресное пространство, а значит один вышедший из под контроля поток может нагадить остальным, то можно с помощью трюка изменить эту ситуацию на противоположенную и ограничить операционное поле деятельности потока. Правда трюк возможно известен только мне, да и то — теоретически, ибо я ни разу не пробовал его провернуть и не уверен, что всё получится именно так, как я хочу. Кстати, надо найти время и поэкспериментировать.

Qwertiy писал(а):есть же лимит нагрузки на процессор для процесса.

Нет такого лимита, по крайней мере мне неизвестно.

Qwertiy писал(а):И если кто-то слишком активно жрёт процессорное время, то другим потокам внутри процесса всё равно достанется меньше.

Это не так. Поток либо съедает свой тайм-слайс полностью, и тогда его выполнение обрывают насильно, либо добровольно отдаёт его.

Вообще-то большинство потоков в Windows обычно вообще спит, ожидая на событии появления сообщения в очереди, и переключение на них не происходит, пока этих событий нет. Но если собщение появляется, то поток просыпается, обрабатывает сообщение, и в цикле следующий же вызов GetMessage заставляет поток опять погрузиться в ожидание. Это как раз случай, когда поток чуть поработает и добровольно отказывается от полного слайса.

Но если потоки не отказываются, а продолжают что-то «считать», то несколько равноприоритетных потоков получают процессорное время в одинаковых пропорциях.

Кстати, ещё раз напомню, что сами приоритеты не имеют ничего общего с тем «сколько процессорного времени получает поток». Они имеют отношения только к урегулированию ситуации «два потока долго спали, чего-то ждали, сейчас наступило условие, при котором оба просыпаются, так какой же из них получит квант времени первым?».

Qwertiy писал(а):А в случае разных процессов вступает системное регулирование другого уровня. Или я сейчас не прав? Если не прав, то расскажи, как оно на самом деле, пожалуйста.

Расскажи, что за системное регулирование другого уровня? Какой API-функцией установить лимит на процент процессорного времени, которое имеет право получить процесс «в лице» всех его потоков?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

NashRus
Постоялец
Постоялец
 
Сообщения: 386
Зарегистрирован: 18.03.2006 (Сб) 1:16

Re:

Сообщение NashRus » 05.04.2014 (Сб) 9:50

Qwertiy писал(а):Думаю, поток на вкладку есть у всех браузеров, тем не менее, почему-то не решили.


Секьюрность, песочница и все такое.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение Хакер » 07.04.2014 (Пн) 21:41

Хакер писал(а):Я, кажется, нашёл рецепт приведение системы в состояние «слайдшоу». А значит воспроизводимость проблемы становится более лёгкой, и как только у меня появится свободное время, я попробую докопаться до сути торможения.

Итак, расскажу о сути микро-исследования, которое я провёл.

Стресс-утилита
Сперва я написал маленькую программу на VB6. Её суть очень проста: форма, на ней таймер с интервалом 100 мс и мультистрочный текст-бокс. Каждый тик таймера программа пытается редимнуть (без preserve) байтовый массив, увеличивая его размер на 10 мб. Если удаётся — дальше ничего не происходит до следующего тика. Если облом — в текстбокс добавляется строчка с текущим временем и объёмом, который не удалось выделить, а размер массива сбрасывается до начального (10 мб).

Факт №1
Четыре запущенных экземпляра такой программы делают систему полностью неюзабельной. Указатель мышки перемещается рывками раз в 5 секунд, чтобы подвинуть любое окно, надо секунд 40, закрыть эти экземпляры — это целый подвиг.

Факт №2
При 1 экземпляре нагрузка на процессор: 3 %.
При 2 экземплярах нагрузка на процессор: 5 %.
При 3 экземпляре нагрузка на процессор: 10 %.
...
При 5 экземплярах нагрузка на процессор: 50 %
Если открыть 6-ой экземпляр: нагрузка на процессор резко падает до нуля :!:

Причём это нагрузка, которую оказывает на CPU процесс System, то есть ядро. С помощью утилиты Process Explorer было выяснено, что из около 100 ядерных потоков только один поток создаёт всю эту нагрузку. Причём это не критический ядерный поток, я его Suspend-нул без каких либо последствий :!: У меня, к сожалению, нет отладочных символов для ntkrnlpa.exe, чтобы глядя на трассировку стека понять, что это вообще за поток, ради чего он порождён и чем занимается. Достану символы — выясню. Но после того, как я его заморозил, от работы нескольких моих экземпляров нагрузки на процессор практически никакой нет.

Факт №3
Моя улита выделяет себе память через выделение байтового массива. Понятно, что для того, чтобы выделение успешно состоялось, в АП процесса должна найтись непрерывная последовательность свободных незарезервированных страниц, плюс не должно быть превышено общесистемное ограничение на кол-во private-страниц, которое определяется размером файла подкачки.

Интересный момент состоит в том, что у разных экземпляров утилиты отображается разный порог: у большинства экземпляров это 1250 Мб, но примерно в 1/3 случаев процессы не могут выделить себе больше 930—980 Мб. При этом, если закрыть всё остальное, и оставить только «ущемлённый» экземпляр, он всё равно будет добираться до прежнего порога. Что наводит на мысль о том, что упирается он не в ФП-связанный лимит, а просто не удаётся в АП процесса найти непрерывнй свободный кусок нужного размера. То есть дело в фрагментации АП, но дело в том, что у меня под XP никакого ASLR нет. Остаётся предполагать, что случайность в фрагментированность АП вносят случайно располагающиеся стек и структуры вроде TIB, но впрочем, я всегда наблюдал, что идентичные процессы при идентичных последовательностях аллокаций имеют тенденцию получать одинаковые адреса. И кроме того, система стремится расположить стек в области максимально возможно низких адресов, а TIB — в области максимально возможных высоких адресов. Это не способствует высокой фрагментации.

Этот момент должен быть выяснен: во-первых в планах в утилите сделать поддержку «отжирания» памяти за счёт выделения не больших непрерывных блоков, но и выделения вообще всех свободных страниц. Во-вторых, в планах сделать визуализацию лэйаута (какой подходящий русский термин?) АП.

Тут всё было бы очевидно, если бы не следующий пункт.

Факт №4
Очень интересный факт, имеющий поведение, похожее чем-то на утечку. Я называю его пока условно «липкий лимит». Допустим, я понаоткрывал много обычных приложений. Под завязку. Системе не очень комфортно. И тут я запускаю свою утилиту. И в условиях дефицита (чего?) ей удаётся выделять только 230 Мб, не более. У меня открыто сотня приложений, кучу окон, виртуальные машины и т.п. тяжёлые приложения. Теперь я закрываю абсолютно всё, кроме своей утилиты. Но она по прежнему никак не может выделить больше 230 Мб. Если запустить параллельно ещё один экземпляр утилиты, он сможет выделить свои 1200 Мб. Но получается, что рождённый в тяжёлых условиях даже после устранения тяжёлых условий продолжает испытывать на себе ограничения тех тяжёлых условий.

В чём здесь дело? Я вижу два варианта: рождённый в тяжелых условиях экземпляр утилиты имеет суровую фрагментацию АП, из-за чего там не находится ни одного непрерывного свободного блока размером более 230 Мб, либо по какой-то причине ядро отказывает в выделении функции NtAllocateVirtualMemory, на которую полагается VirtualAlloc.

В первом случае возникает вопрос: чем же вызвана такая фрагментация? В принципе, в АП каждого GUI-процесса маппится большой блок страниц (все GUI-процессы в рамках одной WinSta видят один и тот же блок, т.е. одни и те же данные), которые содержат структуры, описывающие все существующие окна в данной WinSta. На этом основам метод инъекции кода в чужой процесс, найденный Twister-ом. Но неужели эта проецируемая область оказывается такой большой, когда моя утилита запускается, что на всю оставшуюся жизни экземпляра утилиты она фрагментирует её АП так сильно? Верится с трудом.

Во втором случае нужно выяснить, что именно мешает коммитить страницы.

Так или иначе, я не делал никаких попыток посмотреть, что там с АП, хотя это было бы легко сделать, потому что я хочу придерживаться некого плана действий и некой методики эксперимента, а не просто хаотично проверять какие-то факты.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение BV » 08.04.2014 (Вт) 18:44

Занятная эпопея. Будет интересно узнать результаты

Qwertiy писал(а):Видимо, неактуально в свете уточнения про то, что есть минимальный объём, который никогда не выгружается.

Максимальный. И то, с оговоркой -- границы WS можно переопределить вызовом SetProcessWorkingSetSize
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение Хакер » 08.04.2014 (Вт) 18:49

BV писал(а):Максимальный.


MSDN писал(а):The maximum number of pages that a process can lock is equal to the number of pages in its minimum working set minus a small overhead.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение BV » 08.04.2014 (Вт) 21:56

Правильно
The maximum number of pages
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение Хакер » 08.04.2014 (Вт) 22:02

BV писал(а):Правильно

Нет, не правильно.
Сопоставь своё исправление и фразу, у которой оно относится.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение BV » 09.04.2014 (Ср) 10:26

Хакер писал(а):Сопоставь своё исправление и фразу, у которой оно относится.

Ага, речь про изначальный minWS. Сорри
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 24.04.2014 (Чт) 10:13

Хакер писал(а):
FireFenix писал(а):и отключить файлы подкачки, и всё лишнее, чтобы не елозило по харду

Ужасно вредный совет. Не советуй никому больше такое.

Почему вредный? Точнее, почему плохо отключать файл подкачки? И почему при его отключении при свободных 1.5Г+ из 8Г начинают падать пограммы - некоторые сообщая про out of memory, некоторые просто молча? Причём те, которые не должны бы требовать много памяти, в том числе, вкладки браузера.

2014_04_24 10_48.png
2014_04_24 10_48.png (8.96 Кб) Просмотров: 5690

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение BV » 29.04.2014 (Вт) 9:10

Qwertiy писал(а):И почему при его отключении при свободных 1.5Г+ из 8Г начинают падать пограммы - некоторые сообщая про out of memory, некоторые просто молча?

Ну, видимо, из-за фрагментации
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 30.04.2014 (Ср) 0:14

BV писал(а):Ну, видимо, из-за фрагментации

А по-подробнее?
Я считал, что виртуальное адресное пространство не обязано меппиться на последовательно расположенные физические страницы.
Я неправ или что-то не учёл?

tych
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 13
Зарегистрирован: 03.12.2013 (Вт) 0:16
Откуда: Russia, Kaliningrad

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение tych » 14.11.2014 (Пт) 17:28

Интересно, нашелся ли виновник тормозов?
Я в подобных случаях без особых исследований беру под своп отдельный hdd, максимально быстрый физически. Вплоть до sas 10k оборотов. Ситуация последний раз была на win2008srvr 64 R2, на котором кроме mssql сидит 5 клиентов на NComputing vspace. Для серверной оси обычно выставлены приоритеты фоновых процессов и тормоза интерфейса - почти норма. Но у клиентов, увы, приоритеты отданы приложениям. А память - одна на всех.
комп core i5 3800 8gb ram
Помогло.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение Хакер » 17.11.2014 (Пн) 14:25

tych писал(а):Интересно, нашелся ли виновник тормозов?

Целенаправленно он не искался (предполагались мероприятие с выслеживанием гадких тормозящих мест с помощью ядерного отладчика). Но вот что я сделал: я купил SSD и завёл на нём 10 Гбайтовый раздел, который целиком отдал под огромный файл подкачки.

С тех пор ситуация улучшилась очень очень сильно, и хотя тормоза полностью не исчезли, получаются они очень редко (это и логично: страницы с проекцией чего-то, что остаётся на HDD по прежнему иногда исключаются из рабочего набора и нуждаются в подгрузке) и выглядят не столь раздражающе. Предположительно, если перенести системные файлы на SSD, плюс, наверное, %UserProfile%, то тормозов не останется вообще.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Мой супер-быстрый компьютер (ваш такой же?)

Сообщение iGrok » 17.11.2014 (Пн) 21:59

Хакер писал(а):то тормозов не останется вообще

Они всё же будут иногда случаться, но крааайне редко (чуть ли не раз в пару недель), и совсем не такие серьёзные. Хотя изредка бывает аж до 5-10 секунд подвисания. Не разбирался пока, в чём дело. Может, это другое железо так глючит, т.к. попытка открыть системный монитор в этот момент приводит к странному эффекту - монитор открывается, общие показатели загрузки компонентов на месте (хотя показывают какие-то нелепые цифры, типа summary disk IO в полторы сотни Гб/с), но все детальные отчёты (список процессов, открытых файлов, и т.п.) просто пусты. Как только заканчиваются тормоза - всё начинает работать нормально.

Ну и если работаешь с чем-то, что лежит на HDD, ессесно, бывают тормоза.
label:
cli
jmp label

Пред.

Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

    TopList