Skip to content

OTUS-2023-C01-SARTAKOV-AP/proekt_nagruzka_PC

Repository files navigation

Нагрузка ПК по 29 параметрам на языке Си + БД PostgreSQL 15 (декабрь 2023).

 

В данном разделе выложен итоговый проект №_2 (второй из двух сдаваемых в декабре 2023) на языке Си (чистый Си), в рамках обучения на онлайн курсе “Программист С” компании otus.ru с января 2023 по февраль 2024 года.

 

ЗАДАЧА ПРОЕКТА.

Первоначально задумывался другой проект = ПРОЕКТ по языку Си + PostgreSQL на тему: "Оптимизация производительности БД PostgreSQL путём автоматического распараллеливания задач" = №_1. (Он реализован, смотрите в этой учетной записи).

Поэтому, встала задача снизить нагрузку на ПК, но не в лоб, а с максимальными нагрузками, указанные пользователем, то есть нагрузка должна динамически меняется в зависимости от нескольких факторов (температура и нагрузка процессора).

Были попытки использовать сторонние ресурсы, но они мне не подошли. Поробнее об этом в описании к проекту в папке описание_инструкции.

В ходе реазизации этой мелкой задачи, при изучении Linux каталогов "/proc/" стали всплывать интересные индикаторы нагрузок, которые также потихоньку добавлялить с программу по нагрузке ПК. \

В виду того, что обрабатывалось множество данных, было решено воспользоваться текущей программой и записывать данные в БД PostgreSQL. Затем появилось желание выводить исторические данные в виде графиков.

Все это вместе и переросло в отдельный проект с анализом множества факторов нагрузок и выводом исторических данных по нагрузке системы.

Последние, еще до старта основного проекта №_1, помогли опимизировать настройки БД PostgreSQL ещё более тонко/ювелирно.

 

Более подробное описание самой программы, настроек, проблем - изложены в инструкции и описании к проекту. Можно скачать *.pdf файл. Описание Си проекта нагрузки ПК.pdf

 

Внимание!!! Весь код пишется с учётом работы в системе Debian (Linux). Кодировка = ru_RU.UTF-8. БД PostgreSQL имеет кодировку ru_RU.UTF-8. Переменные внутри кода, пути к файлам (имена папок), названия файлов могут содержать в себе кириллицу (русские буквы). Такая особенность перешла из работы с БД PostgreSQL.

 

Что умеет проект.

  1. Проект реализован для Debian 10/11. Возможна работа на Ubuntu.
  2. Все данные запрашиваются напрямую из ядра ОС минуя программы обработчики (типа TOP Htop и прочие похожие).
  3. В связи с этим нагрузка в простое, с учетом нагрузки самой ОС около 0.3% - 0.4%.
  4. Работа с нагрузкой процессора.
  5. Работа с температурой процессора.
  6. Работа с оперативной памятью системы (процент использования и другие параметры).
  7. Работа с SWOP диском (памятью). Были ли записи и чтения с него.
  8. Отправка данных 29 индикаторов из программы в БД PostgreSQL 15.
  9. Каждые 5 минут новая запись в БД, каждые 1 минута обновления записи в БД.
  10. Опрос всех параметров нагрузки ПК совершается каждые 1-15 секунд (настраивается пользователем).
  11. !!! Программа легко делается демоном системы, то есть автоматически запускается после каждой перезагрузки системы в течении 30 секунд. Все настройки для автозапуска при перезагрузке системы приведены.
  12. Есть отладочный (тестовый) режим, при котором отладочная информация выводится на экране монитора (в терминале).
  13. Есть свой собственный журнал учета лог-записей. Он так же настраивается по указанному адресу.
  14. Тестовые проверки при запуске программы.
  15. Есть возможность очистки памяти два раза в сутки от кэшей БД (у меня БД ночь получает/скачивает много данных, которые дальше не нужны).
  16. Вывод графиков на сайте Apache2 через код/скрипты на чистом Python. Приведен код для отображения графиков на сайте. Установку самого сервера Apache 2 делаете самостоятельно.
  17. В архиве лежит сама БД для PostgreSQL со всеми настройками (слепок БД).
  18. Программа имеет настраиваемые параметры при запуске (11 ключей).

 

Что получилось:

Можно выбирать данные о нагрузке за указанный день: Можно выбирать данные о нагрузке за указанный день

 

На картинке ниже показан пример ежемесячного бэкапа БД Постгрес. Как можно заметить, в 01-30 - она съела почти всю оперативку системы около 16 Гб, хотя самой БД было выделено всего 5 Гб оперативной памяти. После чего память немного освободилась и заметно освободилась около 07-40 утра, когда был вызван системынй вызов по очистке оперативной памяти (вызов от имени root). \ Для справки - после перезагрузки ПК, свободно около 89-91% от всей оперативной памяти.

Пример ежемесячного BackUp БД PostgreSQL (Нагрузка_ПК_ежемесячный_бэкап.pdf): Пример ежемесячного BackUp БД PostgreSQL

 

Ниже картинка обычного дня, без работ программ. Примерно в 4 утра были расчеты БД, которые и дали всплекс нагрузок. При этом они были непродолжительные и незначительные. Ниже есть пример со стартом программы на Си - там и наргузка и температура зашкаливают. Имеено там и применяется принудительное уменьшение нагрузок системы, иначе ноутбук очень быстро выйдет из строя (начнет троттлить) из-за постоянного перегрева (высыхания термо пасты).

Пример работы сервера без нагрузок (Нагрузка_ПК_холостая_работа.pdf): Пример работы без нагрузок

 

Запуск программы с перегревами ПК (Нагрузка_ПК_с_перегревами_23-12-19.pdf): Запуск программы с перегревами ПК

 

Экстремальная работа SSD диска (Нагрузка_ПК_за_2023-12-06.pdf): Экстремальная работа SSD диска

Здесь интересный факт. Дело в том, что SSD диск за 5 минту записал 10^7 блоков памяти, а это около 10'000'000*512 ~ 5 Гб данных. Это очень и очень много.

В тот же день были большие нагрузки и по считыванию с SSD диска. Это подозрение на считывание данных из БД (очень много мелких историческиз данных в большом оъёме). Около 2,5-3,0 млн строк с данными за каждый пробный запуск. И так было несколько запусков подряд (тесты).

 

Стандартный режим работы БД. Пики при ночном автоматическом скачивании и разборе данных (Нагрузка_ПК_холостая_работа.pdf): Стандартный режим работы БД

 

Структура логики в БД: структура логики в БД

 

 


Работа над проектом:

Проект реализовывался 20-25 дней по 6-7 часов в день. Основная часть была закончена в конце августа 2023. Дальше шли мелкие уточнения. На Си это был мой первый крупный проект. До этого были мелкие тестовые задачи из книг.

В принципе - особых сложностей не было, т.к. с БД уже хорошо и плотно работал более 7 лет. С HTML версткой работал уже лет 20. С Питоном года 4.
Сам проект на Си имеет довольно таки простую структуру и никаких заковырок не имеет. Чего не скажешь об основном проекте №1 = Ускорение работы БД.

При работе в проекте использовались PostgreSQL, SQL, Python, HTML + сервер-сайта Apache2, Си.

 

 


Кратко о себе: 

фото лето 2021 г. Фотография: лето 2021 г.

 

Меня зовут Сартаков Алексей. Живу в г. Нижний Новгород. 

  • С 2009 года изучал Cache Intersystems. Одновременно с этим активно работал на html, SVG графиках любой сложности.
  • В 2016 году стал изучать PostgreSQL. 
  • С 2019 стал работать с Python. С 2019 немного Python на стороне БД PostgreSQL. С 2020 много Python на стороне сайта [сайт на голом Питоне (не фрэймворки)]. 
  • С 2021 изучаю Linux (сам работаю в Debian c 2018 года и она у меня как основная система). Больше меня интересует именно уровень программного обеспечения, а не железа. 
  • С конца 2021 стал активно изучать Си, т.к. Питон не справлялся с теми задачами, которые на него возлагал (по части БД).  К сожалению, самостоятельно изучить Си не смог (не хватило знаний по нюансам языка). 
  • Поэтому с января 2023 пошёл на курсы языка Си в образовательную платформу otus.ru. Изучил все что хотел и даже в несколько раз больше. Узнал очень много технической документации. 

 

На PostgreSQL с 2016 года. Первые рабочие проекты пошли уже с 2017 года (в 2016 были просто обучения с решениями тестовых задач).

 

Найти меня можно в телеграмм адресу https://t.me/Sartakov_Aleksey

 

😂 Дата 08 декабря 2023 г.

 

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published