Как численно оценить недостаток производительности?
Есть ноут с довольно медленным железом который периодически тормозит. Как численно оценить эти тормоза? Как понять во сколько раз должен быть быстрее цп чтобы тормозов не было? top показывает load average в районе 1.5-2.1 при двух ядрах, и это не то чтобы мне о чем-то сказало.
ну 2.1 при двух ядрах это уже загруз на 100%
Скинь модель ноута я тебе и так скажу че там не так.
Так же не забывай что в производительности нужно смотреть i-o
iotop -oka
там будет видно что кушает больше всего ресурсов.
"Тормозит" - это субъективная метрика. Кому-то запуск браузера дольше 0.1 сек - это уже "тормозит". А кому-то пойти попить чай, пока документ открывается - это норм. Load average - это не про "тормозит", это про загруженность процессора. В чём именно выражается ваше "тормозит"? Запуск/работа какого-то приложения? Что-то занимает больше времени, чем вы ожидаете? Ну так замерьте, сколько времени это что-то занимает, и скажите, сколько вы ожидаете, сколько вам будет комфортно.
smilingcheater, тормозит, это значит тормозит, ничего субъективного в этом нет. Зависание курсора мыши это вполне заметные тормоза. При вводе этого текста - я его набираю, а через пару секунд он начинает появляться на экране. Хотя к вопросу это отношения не имеет.
при двух ядрах лоад авереж полтора (и любое другое значение менее двух) это недогруз
На то и average, что среднее, а не мгновенное. LA 1.5 за 1 минуту можно насчитать при 40 секундах на 0.75 и 20 секундах на 3.0, т.е. часть времени может быть перегруз и при LA меньше количесва ядер.
Как вариант настроить сбор метрик по основным параметрам системы: нагрузка CPU, память, диск, сеть и т.п.
Поработать с отмечанием по времени когда тормозит, а уже потом анализировать метрики что и где у вас просело.
Это очень сложный вопрос и на него нет единого ответа.
Если ты ноут покупаешь например для игр - то иди в магазин и требуй тестов этой игры прям на ноуте.
Смотри визуально. Если - для серфинга в веб - то тоже самое.
Найти сочетание железок при которым и дешево и хорошо - практически невозможно.
mkone112, ты же понимаешь, что когда мы говорим о недостатке, то мы имеем в виду
сравнительную категорию.
Нельзя говорить о недостатке в вакууме. Тоесть было некое эталонное приложение.
Например benchmark. И оно считает допустим модель IntelCore-i3 за 100%.
И дальше оно меряет скорость вычислений твоего ноута в мегафлопах на 1 ядре. Потом как-то перемножает
на количество ядер например (с логарифмом) потом как-то хитро добавляет скорость
операций с памятью и в конце выводит тебе что твой ноут соотвествует к
примеру 120%.
Вот. И у тебя появляется какая-то метрика. Дальше с этой метрикой уже можно что-то делать.
mkone112, это понятно. Топ у тебя такой-же. Linux процесс у тебя уникальный.
Мы на своих десктопах сразу не можем смоделировать твою ситуацию просто чтоб посмотреть.
mayton2019, не нужно что-то моделировать чтобы ответить на простой вопрос - я хочу получить получить полный график очереди цп по времени без учета io. Как это сделать?
"Производительность" не бывает в вакууме, она бывает в конкретной задаче. А конкретная задача может сильно разниться. И в разных условиях будет разное поведение.
loadavg - это характеристика, которая, условно, отражает, сколько времени проведено в ожидании. При этом load может отражать загрузку совсем не процессора, а периферии (диски, сеть и другие устройства). Например, вполне жизненная ситуация, когда от диска прилетают hardware timeout, а в системе катастрофически растёт load. Даже если диск этот - raid в зеркале: пока система не догадается отстрелить проблемный диск и остаться на половинке зеркала, load будет высоким, всё будет тормозить. А это зачастую может занять далеко не одну минуту. Другой вариант: если на диске включена опция discard, то в моменты фонового trim он тоже может создавать внезапную нагрузку.
Ну вот, например, когда система тормозит - можно посмотреть: если в процессах высокое потребление процессора у kswapd или kcompactd, то это значит памяти не хватает и система начала свопаться слишком активно. Это тоже вызовет повышение load, но упираться это будет не в процессор вовсе.
"Производительность" не бывает в вакууме, она бывает в конкретной задаче. А конкретная задача может сильно разниться.
А никто не говорил про вакуум. Есть конкретная задача, проц на ней захлебывается. Как оценить насколько быстрее должен быть проц чтобы не захлебывался.
При этом load может отражать загрузку совсем не процессора, а периферии (диски, сеть и другие устройства). Например, вполне жизненная ситуация, когда от диска прилетают hardware timeout, а в системе катастрофически растёт load. Даже если диск этот - raid в зеркале: пока система не догадается отстрелить проблемный диск и остаться на половинке зеркала, load будет высоким, всё будет тормозить. А это зачастую может занять далеко не одну минуту. Другой вариант: если на диске включена опция discard, то в моменты фонового trim он тоже может создавать внезапную нагрузку.
Ну вот, например, когда система тормозит - можно посмотреть: если в процессах высокое потребление процессора у kswapd или kcompactd, то это значит памяти не хватает и система начала свопаться слишком активно. Это тоже вызовет повышение load, но упираться это будет не в процессор вовсе.
Я уже примерно 47 раз написал что ДИСК НЕ ИСПОЛЬЗУЕТСЯ. ВООБЩЕ. НИКАК. И СЕТЬ ТОЖЕ. ПАМЯТИ ДОФИГА.
Слушай, начинающий Питонист. Ты какой-то уж очень сердитый.
Там формулу нельзя нарисовать, поскольку нет линейной зависимости. В задачах performance
tunning никто напред (никакой умный архитектор) не может сказать на сколько тебе надо домножить
тактовую частоту чтоб блокер ушел. В нормальных домах обычно анализируют сам Linux
процесс на предемет того где ему плохо. Для этого есть разные утилиты наблюдения. Вот выше
человек тебе верно говорит про swap. Еще посмотри perf, strace. Если это твой Питонский
код - то там тоже есть cProfile, line_prof e.t.c.
Если ты идентифицируешь узкое место в этом процессе - то тебе ничего другого больше не нужно.
Перепишешь код и пофиксишь проблему. Если часто вызывается syscall - то надо спросить почему часто.
Вобщем с формулой ты точняк не туда копаешь и ничего не найдешь.
mkone112, программа не может котролировать использование диска системой или другими приложениями. Ну запустился там trim без спросу, и что?
Кроме того, load может создаваться вообще чем угодно. Например, сетью. Вполне реально бывает, когда на сетевухе насыпается error rate или broadcast storm и системе становится нехорошо, причём это бывает ещё и сложно понять. Некоторые устройства могут вообще чисто на IRQ создавать нагрузку.
Именно поэтому нет универсального способа понять, где узкое место. Каждый случай уникален.
Там формулу нельзя нарисовать, поскольку нет линейной зависимости. В задачах performance
tunning никто напред (никакой умный архитектор) не может сказать на сколько тебе надо домножить
тактовую частоту чтоб блокер ушел.
Нет линейной зависимости между частотой и производительностью. Вопрос не о частоте.
Если это твой Питонский код - то там тоже есть cProfile, line_prof e.t.c.
Именно поэтому нет универсального способа понять, где узкое место.
Так я ничего такого и не спрашивал. Я и так знаю где узкое место - это цп. Вопрос в том как узнать насколько шире должно быть это место чтобы оно перестало быть узким. В винде я могу просто посмотреть на очередь в мониторинге, а тут во-первых это average - т.е. я не могу увидеть конкретные значения в конкретный момент времени, а во-вторых туда подмешено io.
mkone112, нельзя сказать, "сколько не хватает", потому что нельзя точно сказать, как повлияет частота процессора или размер кэша на выполнение конкретной задачи. Да и в чём узкое место тоже не всегда можно понять. Одно дело когда упирается в вычислительную сложность и другое - когда в context switch rate либо в iowait. Нельзя поставить процессор "в два раза лучше", потому что непонятно, как эти "в два раза" посчитать, по каким характеристикам.
mkone112, я привёл пример характеристик процессора, причём целых двух.
Пойми, без пояснения твоих реальных задач и реальных бенчмарков и показателей тебе никто ничего не посоветует, кроме общих объяснений, как бесполезно искать универсальный показатель.
Надо ещё учитывать, что ноутбук - это электроника для обычного потребителя, у которого не стоит задачи получать гарантированный уровень производительности, а просто некий комфорт в среднем при не очень высокой цене. Именно поэтому в "домашних" конфигурациях Linux многие параметры по умолчанию допускают, чтобы система могла слегка уйти в своп, слегка потупить на вводе-выводе итд итп - главное, чтобы можно было сочетать в среднем неплохую производительность или не очень высокое энерготребление (актуально для ноутбуков) с адекватной ценой. Это в кровавом энтерпрайзе 3 секунды небольших тормозов могут считаться аварией, ради избежания которой в сервера ставят огромные объёмы памяти, тысячеядерные процессоры итд итп, на ноутбуке же чуть тупит иногда - ну и ладно...
Если load average равен количеству ядер, значит не справляется и нужно обновлять
Если используется swap в системе, значит нужно больше памяти
Мониториг диска можно посмотреть командой iostat -t 5, но лучше поставить nvme и забыть про этот момент
Может у вас совсем не из-за цп тормозит. Не разобравшись детально с причиной тормозов, невозможно давать численную оценку.
Как правило, у современных компьютеров чаще всего причиной тормозов является память (объём и быстродействие оперативной памяти, быстродействие дисковой памяти).