В данном разделе выложен итоговый проект №_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.
- Проект реализован для Debian 10/11. Возможна работа на Ubuntu.
- Все данные запрашиваются напрямую из ядра ОС минуя программы обработчики (типа TOP Htop и прочие похожие).
- В связи с этим нагрузка в простое, с учетом нагрузки самой ОС около 0.3% - 0.4%.
- Работа с нагрузкой процессора.
- Работа с температурой процессора.
- Работа с оперативной памятью системы (процент использования и другие параметры).
- Работа с SWOP диском (памятью). Были ли записи и чтения с него.
- Отправка данных 29 индикаторов из программы в БД PostgreSQL 15.
- Каждые 5 минут новая запись в БД, каждые 1 минута обновления записи в БД.
- Опрос всех параметров нагрузки ПК совершается каждые 1-15 секунд (настраивается пользователем).
- !!! Программа легко делается демоном системы, то есть автоматически запускается после каждой перезагрузки системы в течении 30 секунд. Все настройки для автозапуска при перезагрузке системы приведены.
- Есть отладочный (тестовый) режим, при котором отладочная информация выводится на экране монитора (в терминале).
- Есть свой собственный журнал учета лог-записей. Он так же настраивается по указанному адресу.
- Тестовые проверки при запуске программы.
- Есть возможность очистки памяти два раза в сутки от кэшей БД (у меня БД ночь получает/скачивает много данных, которые дальше не нужны).
- Вывод графиков на сайте Apache2 через код/скрипты на чистом Python. Приведен код для отображения графиков на сайте. Установку самого сервера Apache 2 делаете самостоятельно.
- В архиве лежит сама БД для PostgreSQL со всеми настройками (слепок БД).
- Программа имеет настраиваемые параметры при запуске (11 ключей).
Можно выбирать данные о нагрузке за указанный день:
На картинке ниже показан пример ежемесячного бэкапа БД Постгрес. Как можно заметить, в 01-30 - она съела почти всю оперативку системы около 16 Гб, хотя самой БД было выделено всего 5 Гб оперативной памяти. После чего память немного освободилась и заметно освободилась около 07-40 утра, когда был вызван системынй вызов по очистке оперативной памяти (вызов от имени root). \ Для справки - после перезагрузки ПК, свободно около 89-91% от всей оперативной памяти.
Пример ежемесячного BackUp БД PostgreSQL (Нагрузка_ПК_ежемесячный_бэкап.pdf):
Ниже картинка обычного дня, без работ программ. Примерно в 4 утра были расчеты БД, которые и дали всплекс нагрузок. При этом они были непродолжительные и незначительные. Ниже есть пример со стартом программы на Си - там и наргузка и температура зашкаливают. Имеено там и применяется принудительное уменьшение нагрузок системы, иначе ноутбук очень быстро выйдет из строя (начнет троттлить) из-за постоянного перегрева (высыхания термо пасты).
Пример работы сервера без нагрузок (Нагрузка_ПК_холостая_работа.pdf):
Запуск программы с перегревами ПК (Нагрузка_ПК_с_перегревами_23-12-19.pdf):
Экстремальная работа SSD диска (Нагрузка_ПК_за_2023-12-06.pdf):
Здесь интересный факт. Дело в том, что 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, Си.
Меня зовут Сартаков Алексей. Живу в г. Нижний Новгород.
- С 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 г.