Узкое горлышко производительности. Советы Бывалым.

Почитав один блог на нашем ПГ - решил оставить комментарий, из которого вырос целый материал.

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

Изначальные цели моих исследований касались таких вопросов как:
1. Что в системе влияет на производительность Игры? ( не путать с производительностью комплектующего )
2. Как оно работает?
3. Что нужно сделать, чтобы добиться лучшего результата?

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

"Так что же Влияет то?", спросите Вы, а ответ будет таков - то как написан код, и как он выполняется.
Выполняется он, понятное дело, чтением и записью, а за это у нас отвечает Жёсткий диск, Процессор и Оперативка. Расчеты и прочее - ведет Процессор, но считывание на физическом уровне происходит на Жестком диске, и скорость отработки считывания, записи и прочих манипуляций будет зависеть от настроек Операционной Системы и Прошивки жесткого диска. А вот хранение настроек в активном и пассивном состоянии - это уже Оперативка, и опять же Жесткий Диск.

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

Тут мы определились о трех компонентах, оные отработают выполнение, которые повлияют на производительность в целом.
А вот уже находясь в игре - мы имеем Четвертый компонент, видеокарту. Но вот "видяху" я тут рассматривать не буду, ибо она работает лишь в связке, и просто Добавляет необходимую производительность, испортить её не может. Т.е., в плане производительности в случае с видяхой, движение графика производительности происходит только в одну сторону - только в Плюс. Потому и исключаем, ибо стараемся найти проблему, так называемое "Узкое Горлышко" (Горлышко бутылки)

А теперь о втором вопросе.
Программа считывает физические данные и формирует логические. Логикой занимается процессор, мы это уже выяснили раньше, а вот физикой занимается Жесткий диск, и скорость работы с физическими данными - это первый фактор в цепи, которые влияет на всю работу процесса в целом. Для этой рабочей среды придумана логическая среда, она задается либо Операционной системой, либо процессором, либо прошивкой жесткого диска. Но самое важное в играх - настройки Операционной системы, так называемая Файловая Среда, остальное вторично, хотя и имеют большие показатели на графиках производительности.

Я понимаю Файловую Среду так - есть разметки пространства, внутри которых есть другие разметки, внутри которых есть другие... и т.д. всё это хранится в реестре и на физических ячейках жесткого диска. Исходя из разметки - программа выполняется либо быстро, либо !так быстро, как это нужно!, файлы программы хранятся там, где это нужно... Ну, суть вы уловили, я так думаю. Пространство жесткого диска - вот определяющий фактор всех проблем в нашем исследовании.

Почему же пространство то? Да потому что оно может быть занятым или свободным. И даже когда мы видим, что система показывает "свободное пространство" - по факту оно может быть занято на физическом уровне, просто к файлам стерты пути, которые хранятся в реестре. В таком случае при обращении к такому пространству могут возникнуть "особые" условия. Например при записи файла в действительности происходит ПЕРЕЗАПИСЬ....

А перезапись это что? Это "Найти файл > Удалить путь к файлу ( если есть ) > Удалить старые физические данные > Записать новые физические данные > Записать новый путь к файлу ", т.е. это 5 манипуляций ( вообще 4, но ведь сначала нам нужно найти и выделить нужное место для замены, там ещё несколько манипуляций, но будем считать их за одну ).

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

Вот как-то так это и работает. И это только в общих чертах... (мдэ).

И наконец о вопросе номер Три.
Поняв как работают самые базовые и определяющие процессы - нам необходимо задать им правильную логику. Вернее просто установить заранее подготовленные настройки этой логики. Но и в них же надо разбираться и понимать "почему это так".

Из моего комментария к "тому блогу":
1. Суммарное Свободное место на жёстком диске должно превышать отметку в 20%
2. Свободное место на разделе должно превышать отметку 15%
3. Свободное пространство должно быть очищено методом Гутмана (35 проходов), это умеет делать CCleaner
4. Необходимо проводить Дефрагментацию и "оптимизацию" (упорядочивание) файлов раз в месяц, более не требуется.
5. Упорядочивание файлов нужно продумывать таким образом, чтобы первыми шли файлы системы... Т.е. использовать "оптимизаторы для игр", которые дефрагментируют и оптимизируют конкретную папку для игры - нужно только в том случае, если Операционка установлена на совершенно другой физический Диск, иначе же это загубит систему.
6. Размер кластера имеет большую роль. Если правильно помню, то Большие кластеры - для больших файлов. Старайтесь изучать файловую структуру игры, если она "собрана" из больших кусков "однородных" файлов \ зашифрованных архивов, тогда для того тома, где лежит игра - нужно выделять кластеры побольше.
7. Даже на современных системах - требуется закрывать все лишние процессы \ программы. Особенно это касается тех, кто использует торренты.
8. С SSD все проще - раз в год полное форматирование.

По поводу свободного места - оно нужно для временного хранения того, что мы будем перемещать. Перемещение работает методом записи и перезаписи в другие кластеры, потому очень важно соблюдать пункт 3. Тогда мы эти процессы ускоряет в несколько раз... Например, в среднем жесткие диски делают перезапись со скоростью от 20 до 36 мегабайт в секунду, но это неухоженные диски так делают. После чистки Гутманом скорость растёт - от 40 до 80 мб/c ( и более ).

По поводу CCleaner - остальные его функции нам не нужны, ибо они порой даже вредят. Так что просто чистим свободное пространство Гутманом и радуемся жизни. Эту программу я привел лишь потому, что она является самым популярным аналогом других программ, но при этом является бесплатной. Ну и так проще будет всем, ибо кто не знает об этой "чистилке"?!

Пункт 7 важен тем, что так мы освобождаем кол-во обращений к нашему ЖД, тем самым "разгрузив" его "очередь". Крайне важная штука, ведь величина очереди у всех дисков разная, и порой они "захлебываются" просто потому, что мелкие программульки просто напросто заняли всю очередь. Тогда процессор поставит другие процессы на паузу, до тех пор, пока процессы из очереди не завершат свою работу, или пока не появится больше ресурсов.

По поводу пункта 8 - так можно делать и с жестким диском... но тогда мы упускаем возможность сохранить наши файлы и настроить как нам нужно.

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

В конечном итоге мы имеем исправно и шустро работающую файловую среду, в которой игра будет работать Быстро. Загрузка и перемещение определенных данных заметно ускорится, что избавит нас от фризов в самые важные моменты. Ведь загрузка текстур - порой происходит прямо с жесткого диска, а не из оперативки, как это обычно бывает. Так случается из-за нехватки оперативки или при наличии Файла подкачки. Но вот убирать файл подкачки я посоветую лишь тем, у кого 8 или более гигов оперативки.


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

Нравится19
Комментарии (14)
  • 1
    по моим пека сведеньям жесткие диски незначительно влияют на производительность исполнения какого-то кода которому не нужно подгружать ресурсов.
    а интересует собственно потерянные фпс. когда видимые части системы которые мониторятся обычно имеют загрузку их процессорного времени не полную.
    а тут собственно контроллеры экспресс линий. контроллеры памяти процессора, характеристики самой памяти и пропускная способность этих фигней. пропускная способность и размер кеша к процессору. и внутренние характеристики занятные видеокарты. а в пека коде волшебные дравкалы и прочее невидимые убийцы фпс.
    всяких советчиков то которые про дефрагментацию ндд рассказывают да зависимость именно какого пзу на скорость исполнения кода предаю анафеме усмешкам и поруганиям. и бо то доказано что нет.
    ряд программ которые опираются на ндд и записывают туда мегабайтами в секунду будут к нему конечно чувствительны.но даже я как то больше заметил что сам процессор или память не справляются с перекодировкой нескольких сотен гигов данных с диска на диск (а в одну сторону это 30мб сек в среднем) и захлебываться.
  • 12
    Короткое содержание статьи: Купите себе ССД )
  • 2
    KingNarik
    Я бы сказал, что это наилучший вариант решения проблемы... Но - жд ещё используются, и очень даже "везде" =) Так что это советы тем, кто используют ЖД.
    Вот у меня и ССД и ЖД, но это все равно требует правильного ухода.

    MunchkiN 616
    Это вот "незначительно" - при движении графика производительности в положительную сторону, да.
    Но вот в минусовую сторону - очень, ОЧЕНЬ значительно.
    Когда ЖД захлебывается - система нормально работать не может, пусть она хоть четырежды самая новая и самая быстрая.
  • 0
    fomir
    Нууу у меня жд игры идут с одинаковым фпс как и ссд, просто грузятся быстрее.
    Ну а лучше поставить 128 гб озу и туда записывать игры, профит на лицо.
    Есть даже програмки которые при перезагрузке записывают содержимое оперативки в iso образ и при включении все назад записывают в оперативку.
  • 0
    fomir
    Жд не влияет на производительность, если только на нём не стоит файл подкачки размером с количество оперативной памяти.
  • 1
    По статье.
    1. Подбирайте себе железо правильно - процессор должен соответствовать видеокарте, тк производительность в игре будет упираться всегда в самый "слабый элемент".
    2. Оперативной памяти должно быть не менее 8г, если вместе с игрой запущено еще чтот - браузеры, офисные программы и тд - 12-16г.
    3. SSD - желателен, хотяб под систему и файл подкачки. Если он еще будет и для файлов игры - еще лучше, но при наличии хорошего объема оперативной памяти этим можно пренебреч.
    4. По свободному месту под файл подкачки - не менее 16г.
    5. Про дефрагментацию - аффтар немного отстал по времени. Для режима IDE жестких дисков много что написано верно. Но вот для современного AHСI которое уже используется практически везде - дефрагментация совершенно бесполезное дело и яб даже сказал вредное - рекомендую аффтару просветится на этот счет.
  • 0
    У меня, кстати, нет файла подкачки. Неудобств по этому поводу не испытываю. Да, когда использую тяжёлый рабочий софт и ещё всякое - может закончиться оперативка и нужно что-то закрывать. Один паскудный Винамп, бывает, сжирает под 3 гига. Но, со стороны игрушек, когда в памяти только сам гейм и мелочь всякая, аки скупе, торренты(не мерзкий мюторрент) и пару страниц в браузере - никаких проблем )
  • 0
    Listoman
    Ведь загрузка текстур - порой происходит прямо с жесткого диска, а не из оперативки, как это обычно бывает. Так случается из-за нехватки оперативки или при наличии Файла подкачки. Но вот убирать файл подкачки я посоветую лишь тем, у кого 8 или более гигов оперативки.
  • 0
    Ты говорил, про принцип выполнения кода игры, который может тормозить даже на чистых дисках с мощным процессором, но так и не развил эту тему.)
  • 0
    Kind Ram
    Да, точно. Бывают случаи, когда программа должна работать в конкретной файловой среде, с конкретными настройками, с помощью конкретных библиотек. И вот с такими программами случается Беда, ибо они капризные и не предусматривают альтернативных способов работы, в таком случае система сама пытается найти решение, и начинает ходить окольными путями. Например - запускаю я Warframe, а ему нужен VC++ 2008, вдруг у меня его нет - тогда система ищет более ранние или поздние версии, или вообще другую среду, где она сможет провести Логические аналогии выполнения какого-то алгоритма... И найдет, но вот только проблема в том - что найденные решения, на смену отсутствующей библиотеки, окажутся крайне медленными, в таком случае на нашем ЖД начнется полноценная развертка нового кода, который пройдет несколько итераций в версии рабочих файлов... и наконец потом мы увидим картинку, ну или ошибку.

    И дабы такого не случалось - нужно иметь установленный настоящий Джентельментский набор:
    DirectX 9.0a, 9.0b, 9.0c
    VC++ 2005 - 2016
    NET.Framework 3.5 - 4.6
    Open AL
    Open CL
    Vulcan
    XNA
    Актуальные драйвера в пакете SDI
  • 1
    MunchkiN 616
    Когда жестяк загибается от переизбытка процессов, использующих его, не только игры, а вся система начинает сильно тормозить, даже когда не особо сильно загружены ЦП и ОЗУ. Много раз такое замечал на разных компах.

    fomir
    И всё же большую роль на производительность в играх будут влиять ЦП, ОЗУ и дискретка. Да, хороший жестяк делает погоду, но ведь сегодня используются винты не 15-ней давности, а современные, хорошие жёсткие диски, скоростей которых вполне хватает современным игрокам. Если только, конечно, во время игры они не проводят установку нескольких программ и не занимаются перемещением тонны данных с локдиска на локдиск.
    И таки да, лишние процессы в системе тоже влияют на производительность ПК в целом, но кушают такие процессы в основном ЦП и ОЗУ.
  • 0
    fomir написал:
    VC++ 2005 - 2016

    2016-го нет в природе, а по существу, автор, купи нормальный комп.)
    гутманом 35 проходов ты только ЖД себе убьешь, ибо он просто 35 раз перезапишет данные, а в ноль файловую структуру тебе привести может только низкоуровневое форматирование, но опять же, на производительности в играх это никак не скажется.
  • 0
    Уважаемый fomir, скажите, вы изучали такой предмет как Архитектура ЭВМ? Не хочу вас оскорбить, но в статье отсутствуют источники исследований/анализа, но присутствуют некоторые домыслы и нераскрытые вопросы.
    И на самом деле их настолько много, что даже не представляю сколько времени займет их подробное обсуждение. Тем не менее, если вам интересно, можем действительно обсудить некоторые моменты.
  • 0
    doublebest
    Я намеренно не стал вдаваться в подробности. Да, обучался в ИТМО.
    Знаю, ибо исследования проводились лично мной, на уровне "а что будет если".
    Это не профессиональный подход, и об этом я объявлял.

    И я четко понимаю, что мог написать много бреда, ибо:
    а) Я не стал доучиваться в ИТМО
    б) Опыт в подобных исследованиях не очень большой

    А вот домыслы и вопросы - обсуждать надо. Пусть долго, но результат от этого очевидный и явно позитивный.
B
i
u
Спойлер