From c85fb5ac866e8568610cfe386a0b52abd6bc54b8 Mon Sep 17 00:00:00 2001 From: wale soyinka Date: Thu, 31 Jul 2025 10:23:09 -0400 Subject: [PATCH 1/3] New translations lab8-samba.md (Italian) --- docs/labs/networking/lab8-samba.it.md | 294 ++++++++++++++++++++++++++ 1 file changed, 294 insertions(+) create mode 100644 docs/labs/networking/lab8-samba.it.md diff --git a/docs/labs/networking/lab8-samba.it.md b/docs/labs/networking/lab8-samba.it.md new file mode 100644 index 0000000000..a60f7c6b90 --- /dev/null +++ b/docs/labs/networking/lab8-samba.it.md @@ -0,0 +1,294 @@ +--- +author: Wale Soyinka +contributors: Ganna Zhyrnova +tested on: All Versions +tags: + - samba + - cifs + - smbd + - nmbd + - smb.conf + - smbpasswd + - network file system +--- + +# Laboratorio 8: Samba + +## Obiettivi + +Dopo aver completato questo laboratorio, sarete in grado di + +- installare e configurare Samba +- condividere file e directory tra sistemi Linux utilizzando Samba +- utilizzare le comuni utilità di Samba + +Tempo stimato per completare questo laboratorio: 40 minuti + +## Introduzione + +Samba consente la condivisione di file e servizi di stampa tra sistemi Unix/Linux e Windows. + +Samba è un'implementazione open-source del "Common Internet File System" (CIFS). CIFS viene anche chiamato Server Message Block (SMB), LAN manager o protocollo NetBIOS. +Il server Samba comprende due demoni principali: smbd e nmbd. + +_smbd_: Questo demone fornisce servizi di file e di stampa ai client SMB, come le macchine che eseguono vari sistemi operativi Microsoft. + +_nmbd_: Questo demone fornisce il supporto per i nomi NETBIOS e la navigazione. + +Gli esercizi di questo laboratorio si concentrano sulla configurazione di Samba come server e client su un server Rocky Linux. + +## Esercizio 1 + +### Installare Samba e configurare una directory condivisa di base + +#### Per installare l'applicazione server Samba + +0. Utilizzare l'utilità dnf per installare il pacchetto server e client Samba sul server. + Digitare: + ```bash + sudo dnf install -y samba + ``` + +#### Configurazione di Samba + +1. Creare una directory denominata samba-share sotto la cartella /tmp da condividere. Digitare: + + ```bash + mkdir /tmp/samba-share + ``` + +2. Creiamo una configurazione Samba di base per condividere la cartella /tmp/samba-share. + A questo scopo, creare una nuova definizione di condivisione nel file di configurazione di Samba: + + ```bash + sudo tee -a /etc/samba/smb.conf << 'EOF' + [Shared] + path = /tmp/samba-share + browsable = yes + writable = yes + EOF + ``` + +#### Per avviare e abilitare il servizio Samba + +1. Avviare e abilitare i servizi Samba: + + ```bash + sudo systemctl start smb nmb + sudo systemctl enable smb nmb + ``` + +2. Verificare che i demoni utilizzati dal servizio Samba siano in esecuzione: + + ```bash + sudo systemctl status smb nmb + ``` + +## Esercizio 2 + +### Utenti Samba + +Un'attività amministrativa importante e comune per la gestione di un server Samba è la creazione di utenti e password per gli utenti che devono accedere alle risorse condivise. + +Questo esercizio mostra come creare utenti Samba e impostare le credenziali di accesso per gli utenti. + +#### Per creare un utente Samba e una password Samba + +1. Per prima cosa, creare un normale utente di sistema chiamato sambarockstar. Digitare: + + ```bash + sudo useradd sambarockstar + ``` + +2. Verificare che l'utente sia stato creato correttamente. Digitare: + ```bash + id sambarockstar + ``` + +3. Aggiungere il nuovo utente di sistema sambarockstar al database degli utenti Samba e contemporaneamente impostare una password per l'utente Samba: + + ```bash + sudo smbpasswd -a sambarockstar + ``` + + Quando viene richiesto, inserire la password selezionata e premere INVIO dopo ogni inserimento. + +4. Riavviare i servizi Samba: + ```bash + sudo systemctl restart smb nmb + ``` + +## Esercizio 3 + +### Accesso alla condivisione Samba (test locale) + +In questo esercizio, proveremo ad accedere alla nuova condivisione Samba dallo stesso sistema. Ciò significa che utilizzeremo lo stesso host sia come server che come client. + +#### Per installare gli strumenti del client Samba + +0. Installare Client Utilities eseguendo: + + ```bash + sudo dnf -y install cifs-utils + ``` + +#### Per creare un punto di montaggio Samba + +0. Creare il punto di montaggio: + ```bash + mkdir ~/samba-client + ``` + +#### Per montare un file system SMB localmente + +1. Montare la condivisione Samba in locale: + + ```bash + sudo mount -t cifs //localhost/Shared ~/samba-client -o user=sambarockstar + ``` + +2. Usare il comando `mount` per elencare tutti i file system di tipo CIFS montati. Digitare: + ```bash + mount -t cifs + ``` + OUTPUT + ```bash + //localhost/Shared on ~/samba-client type cifs (rw,relatime,vers=3.1.1,cache=strict,username=sambarockstar.... + ...... + ``` + +3. Allo stesso modo, utilizzare il comando `df` per verificare che la condivisione montata sia disponibile. Digitare: + + ```bash + df -t cifs + ``` + + OUTPUT: + + ``` + Filesystem 1K-blocks Used Available Use% Mounted on + //localhost/Shared 73364480 17524224 55840256 24% ~/samba-client + ``` + +4. Quindi, elencare il contenuto della condivisione montata. Digitare: + + ```bash + ls ~/samba-client + ``` + +5. Creare un file di prova in Share: + + ```bash + touch ~/samba-client/testfile.txt + ``` + +## Esercizio 4 + +### Modifica delle autorizzazioni di condivisione + +#### Per regolare le autorizzazioni di condivisione + +1. Rendere la definizione della condivisione samba "Shared" di sola lettura. Questo può essere fatto cambiando il valore del parametro writable da yes a no nel file di configurazione smb.conf. Usiamo un comando `sed` onliner per ottenere questo risultato eseguendo: + + ```bash + sudo sed -i'' -E \ + '/\[Shared\]/,+3 s/writable =.*$/writable = no/' /etc/samba/smb.conf + ``` + +2. Riavviare i servizi Samba: + ```bash + sudo systemctl restart smb nmb + ``` + +3. A questo punto, si può testare la scrittura sulla condivisione provando a creare un file sulla condivisione montata: + + ```bash + touch ~/samba-client/testfile2.txt + ``` + +## Esercizio 5 + +### Utilizzo di Samba per gruppi di utenti specifici + +Questo esercizio illustra come limitare l'accesso alle condivisioni Samba tramite l'appartenenza al gruppo locale di un utente. Si tratta di un comodo meccanismo per rendere accessibili le risorse condivise solo a gruppi di utenti specifici. + +#### Per creare un nuovo gruppo per l'utente Samba + +1. Usare l'utilità groupadd per creare un nuovo gruppo di sistema chiamato rockstars. Nel nostro esempio utilizzeremo questo gruppo per ospitare gli utenti del sistema che possono accedere a una determinata risorsa. Digitare: + ```bash + sudo groupadd rockstars + ``` +2. Aggiungere al gruppo un utente di sistema/Samba esistente. Digitare: + ```bash + sudo usermod -aG rockstars sambarockstar + ``` + +#### Per configurare gli utenti autorizzati nella configurazione di Samba + +1. Utilizzare l'utilità sed per aggiungere nuovi parametri utente validi alla definizione di condivisione nel file di configurazione di Samba. Digitare: + ```bash + sudo sed -i '/\[Shared\]/a valid users = @sambagroup' /etc/samba/smb.conf + ``` +2. Riavviare i servizi Samba: + ```bash + sudo systemctl restart smb nmb + ``` +3. Ora testate l'accesso alla condivisione con sambarockstar e verificate l'accesso. + +## Esercizio 6 + +Questo esercizio simula uno scenario reale in cui si agisce come amministratore di un sistema client e poi si prova ad accedere al servizio Samba sul sistema remoto (server HQ), al quale non si ha alcun accesso o privilegio amministrativo. Come studenti, configurerete un client Samba sulla vostra macchina (serverXY) per accedere a un servizio Samba ospitato su una macchina diversa (serverHQ). Questo riflette le configurazioni standard del posto di lavoro. + +Presupposti: + +- Non si dispone dell'accesso root al serverHQ. +- La condivisione Samba sul serverHQ è già configurata e accessibile. + +#### Per configurare il client Samba sul serverXY + +Configurate la vostra macchina (serverXY) come client Samba per accedere a una directory condivisa su un host separato (serverHQ). + +1. Assicurarsi che le necessarie utilità del client Samba siano installate sul sistema locale. + Se necessario, installarli eseguendo: + + ```bash + sudo dnf install samba-client cifs-utils -y + ``` + +2. Creare un punto di montaggio sul serverXY: + + ```bash + mkdir ~/serverHQ-share + ``` + +#### Per montare la condivisione Samba dal serverHQ + +Sono necessari l'indirizzo IP o l'hostname di serverHQ, il nome della condivisione e le credenziali di Samba. + +Sostituire serverHQ, sharedFolder e yourUsername con i valori reali. + + ```bash + sudo mount -t cifs //serverHQ/sharedFolder ~/serverHQ-share -o user=yourUsername + ``` + +#### Per verificare e accedere alla condivisione montata + +1. Verificare se la directory condivisa dal serverHQ è stata montata con successo sul computer: + + ```bash + ls ~/serverHQ-share + ``` + +2. Provare ad accedere e modificare i file all'interno della condivisione montata. Ad esempio, per creare un nuovo file: + + ```bash + touch ~/serverHQ-share/newfile.txt + ``` + +#### Per smontare la condivisione remota + +Una volta fatto, smontare la condivisione: + + ```bash + sudo umount ~/serverHQ-share + ``` From fbc9e5469d59f9ef8105fab70df856c210a97b90 Mon Sep 17 00:00:00 2001 From: wale soyinka Date: Thu, 31 Jul 2025 10:27:11 -0400 Subject: [PATCH 2/3] New translations lab8-samba.md (Ukrainian) --- docs/labs/networking/lab8-samba.uk.md | 256 +++++++++++++------------- 1 file changed, 126 insertions(+), 130 deletions(-) diff --git a/docs/labs/networking/lab8-samba.uk.md b/docs/labs/networking/lab8-samba.uk.md index 81fbd07699..b1fdb027a2 100644 --- a/docs/labs/networking/lab8-samba.uk.md +++ b/docs/labs/networking/lab8-samba.uk.md @@ -1,7 +1,7 @@ --- author: Wale Soyinka contributors: Ganna Zhyrnova -tested on: Всі версії +tested on: All Versions tags: - samba - cifs @@ -9,22 +9,22 @@ tags: - nmbd - smb.conf - smbpasswd - - файлова система мережі + - network file system --- # Лабораторна робота 8: Samba -## Завдання +## Objectives -Виконавши цю лабораторну роботу, ви зможете +After completing this lab, you will be able to - встановити та налаштувати Samba - обмінюватися файлами та каталогами між системами Linux за допомогою Samba - використовувати звичайні утиліти Samba -Приблизний час виконання цієї лабораторної роботи: 40 хвилин +Estimated time to complete this lab: 40 minutes -## Вступ +## Introduction Samba дозволяє обмінюватися файлами та виконувати служби друку між системами Unix/Linux і Windows. @@ -37,54 +37,54 @@ _nmbd_: цей демон забезпечує обслуговування ім Вправи в цій лабораторній роботі зосереджені на налаштуванні Samba як сервера та клієнта на сервері Rocky Linux. -## Завдання 1 +## Exercise 1 ### Встановіть Samba та налаштуйте базовий спільний каталог #### Щоб встановити серверну програму Samba 0. Використовуйте утиліту dnf, щоб установити сервер Samba та пакет клієнта на вашому сервері. - Впишіть: - ```bash - sudo dnf install -y samba - ``` + Type: + ```bash + sudo dnf install -y samba + ``` #### Щоб налаштувати Samba -1. Створіть каталог під назвою samba-share у папці /tmp, до якої потрібно надати спільний доступ. Впишіть: +1. Створіть каталог під назвою samba-share у папці /tmp, до якої потрібно надати спільний доступ. Type: - ```bash - mkdir /tmp/samba-share - ``` + ```bash + mkdir /tmp/samba-share + ``` 2. Давайте створимо базову конфігурацію Samba для спільного використання папки /tmp/samba-share. Зробіть це, створивши нове визначення спільного ресурсу у файлі конфігурації Samba: - ```bash - sudo tee -a /etc/samba/smb.conf << 'EOF' - [Shared] - path = /tmp/samba-share - browsable = yes - writable = yes - EOF - ``` + ```bash + sudo tee -a /etc/samba/smb.conf << 'EOF' + [Shared] + path = /tmp/samba-share + browsable = yes + writable = yes + EOF + ``` #### Щоб запустити та включити службу Samba 1. Запустіть і ввімкніть служби Samba: - ```bash - sudo systemctl start smb nmb - sudo systemctl enable smb nmb - ``` + ```bash + sudo systemctl start smb nmb + sudo systemctl enable smb nmb + ``` 2. Переконайтеся, що демони, які використовує служба Samba, запущені: - ```bash - sudo systemctl status smb nmb - ``` + ```bash + sudo systemctl status smb nmb + ``` -## Завдання 2 +## Exercise 2 ### Користувачі Samba @@ -94,31 +94,31 @@ _nmbd_: цей демон забезпечує обслуговування ім #### Щоб створити користувача Samba та пароль Samba -1. Спочатку створіть звичайного системного користувача з іменем sambarockstar. Впишіть: +1. Спочатку створіть звичайного системного користувача з іменем sambarockstar. Type: - ```bash - sudo useradd sambarockstar - ``` + ```bash + sudo useradd sambarockstar + ``` -2. Переконайтеся, що користувача було створено правильно. Впишіть: - ```bash - id sambarockstar - ``` +2. Переконайтеся, що користувача було створено правильно. Type: + ```bash + id sambarockstar + ``` 3. Додайте нового користувача системи sambarockstar до бази даних користувачів Samba та одночасно встановіть пароль для користувача Samba: - ```bash - sudo smbpasswd -a sambarockstar - ``` + ```bash + sudo smbpasswd -a sambarockstar + ``` Коли буде запропоновано, введіть вибраний пароль і натисніть ENTER після кожного введення. 4. Перезапустіть служби Samba: - ```bash - sudo systemctl restart smb nmb - ``` + ```bash + sudo systemctl restart smb nmb + ``` -## Завдання 3 +## Exercise 3 ### Доступ до Samba Share (локальний тест) @@ -128,61 +128,61 @@ _nmbd_: цей демон забезпечує обслуговування ім 0. Встановіть клієнтські утиліти, запустивши: - ```bash - sudo dnf -y install cifs-utils - ``` + ```bash + sudo dnf -y install cifs-utils + ``` #### Щоб створити точку монтування Samba 0. Створіть точку монтування: - ```bash - mkdir ~/samba-client - ``` + ```bash + mkdir ~/samba-client + ``` #### Для локального монтування файлової системи SMB 1. Встановіть Samba Share локально: - ```bash - sudo mount -t cifs //localhost/Shared ~/samba-client -o user=sambarockstar - ``` + ```bash + sudo mount -t cifs //localhost/Shared ~/samba-client -o user=sambarockstar + ``` -2. Використовуйте команду `mount`, щоб отримати список усіх змонтованих файлових систем типу CIFS. Впишіть: - ```bash - mount -t cifs - ``` - Вихід - ```bash - //localhost/Shared on ~/samba-client type cifs (rw,relatime,vers=3.1.1,cache=strict,username=sambarockstar.... - ...... - ``` +2. Використовуйте команду `mount`, щоб отримати список усіх змонтованих файлових систем типу CIFS. Type: + ```bash + mount -t cifs + ``` + OUTPUT + ```bash + //localhost/Shared on ~/samba-client type cifs (rw,relatime,vers=3.1.1,cache=strict,username=sambarockstar.... + ...... + ``` -3. Подібним чином скористайтеся командою `df`, щоб переконатися, що змонтований спільний ресурс доступний. Впишіть: +3. Подібним чином скористайтеся командою `df`, щоб переконатися, що змонтований спільний ресурс доступний. Type: - ```bash - df -t cifs - ``` + ```bash + df -t cifs + ``` - Вихід + OUTPUT: - ``` - Filesystem 1K-blocks Used Available Use% Mounted on - //localhost/Shared 73364480 17524224 55840256 24% ~/samba-client - ``` + ``` + Filesystem 1K-blocks Used Available Use% Mounted on + //localhost/Shared 73364480 17524224 55840256 24% ~/samba-client + ``` -4. Далі перелічіть вміст підключеного спільного ресурсу. Впишіть: +4. Далі перелічіть вміст підключеного спільного ресурсу. Type: - ```bash - ls ~/samba-client - ``` + ```bash + ls ~/samba-client + ``` 5. Створіть тестовий файл у Share: - ```bash - touch ~/samba-client/testfile.txt - ``` + ```bash + touch ~/samba-client/testfile.txt + ``` -## Завдання 4 +## Exercise 4 ### Змінення дозволів на спільний доступ @@ -190,23 +190,23 @@ _nmbd_: цей демон забезпечує обслуговування ім 1. Зробити визначення спільних ресурсів samba «Shared» доступним лише для читання. Це можна зробити, змінивши значення параметра для запису з «так» на «ні» у файлі конфігурації smb.con. Давайте використаємо `sed` onliner, щоб виконати це, виконавши: - ```bash - sudo sed -i'' -E \ - '/\[Shared\]/,+3 s/writable =.*$/writable = no/' /etc/samba/smb.conf - ``` + ```bash + sudo sed -i'' -E \ + '/\[Shared\]/,+3 s/writable =.*$/writable = no/' /etc/samba/smb.conf + ``` 2. Перезапустіть служби Samba: - ```bash - sudo systemctl restart smb nmb - ``` + ```bash + sudo systemctl restart smb nmb + ``` 3. Тепер перевірте запис до спільного ресурсу, спробувавши створити файл на змонтованому спільному ресурсі: - ```bash - touch ~/samba-client/testfile2.txt - ``` + ```bash + touch ~/samba-client/testfile2.txt + ``` -## Завдання 5 +## Exercise 5 ### Використання Samba для певних груп користувачів @@ -214,28 +214,28 @@ _nmbd_: цей демон забезпечує обслуговування ім #### Щоб створити нову групу для користувача Samba -1. Скористайтеся утилітою groupadd, щоб створити нову системну групу під назвою rockstars. Ми будемо використовувати цю групу в нашому прикладі для користувачів житлової системи, які мають доступ до певного ресурсу. Впишіть: - ```bash - sudo groupadd rockstars - ``` -2. Додайте існуючого користувача системи/Samba до групи. Впишіть: - ```bash - sudo usermod -aG rockstars sambarockstar - ``` +1. Скористайтеся утилітою groupadd, щоб створити нову системну групу під назвою rockstars. Ми будемо використовувати цю групу в нашому прикладі для користувачів житлової системи, які мають доступ до певного ресурсу. Type: + ```bash + sudo groupadd rockstars + ``` +2. Додайте існуючого користувача системи/Samba до групи. Type: + ```bash + sudo usermod -aG rockstars sambarockstar + ``` #### Щоб налаштувати дійсних користувачів у конфігурації Samba -1. Скористайтеся утилітою sed, щоб додати новий дійсний параметр користувача до визначення спільного доступу у файлі конфігурації Samba. Впишіть: - ```bash - sudo sed -i '/\[Shared\]/a valid users = @sambagroup' /etc/samba/smb.conf - ``` +1. Скористайтеся утилітою sed, щоб додати новий дійсний параметр користувача до визначення спільного доступу у файлі конфігурації Samba. Type: + ```bash + sudo sed -i '/\[Shared\]/a valid users = @sambagroup' /etc/samba/smb.conf + ``` 2. Перезапустіть служби Samba: - ```bash - sudo systemctl restart smb nmb - ``` + ```bash + sudo systemctl restart smb nmb + ``` 3. Тепер протестуйте доступ до спільного ресурсу за допомогою sambarockstar і перевірте доступ. -## Завдання 6 +## Exercise 6 Ця вправа імітує реальний сценарій, у якому ви діятимете як адміністратор клієнтської системи, а потім тестуватимете доступ до служби Samba на віддаленій системі (serverHQ), до якої у вас немає адміністративного доступу чи привілеїв. Будучи студентом, ви налаштуєте клієнт Samba на своїй машині (serverXY) для доступу до служби Samba, розміщеної на іншій машині (serverHQ). Це відображає стандартні налаштування робочого місця. @@ -251,15 +251,15 @@ _nmbd_: цей демон забезпечує обслуговування ім 1. Переконайтеся, що необхідні утиліти клієнта Samba встановлені у вашій локальній системі. За потреби встановіть їх, виконавши: - ```bash - sudo dnf install samba-client cifs-utils -y - ``` + ```bash + sudo dnf install samba-client cifs-utils -y + ``` 2. Створіть точку монтування на serverXY: - ```bash - mkdir ~/serverHQ-share - ``` + ```bash + mkdir ~/serverHQ-share + ``` #### Щоб підключити Samba Share із serverHQ @@ -267,32 +267,28 @@ _nmbd_: цей демон забезпечує обслуговування ім Замініть serverHQ, sharedFolder і yourUsername на фактичні значення. -```` -```bash -sudo mount -t cifs //serverHQ/sharedFolder ~/serverHQ-share -o user=yourUsername -``` -```` + ```bash + sudo mount -t cifs //serverHQ/sharedFolder ~/serverHQ-share -o user=yourUsername + ``` #### Для перевірки та доступу до змонтованого спільного ресурсу 1. Перевірте, чи спільний каталог із serverHQ успішно змонтовано на вашій машині: - ```bash - ls ~/serverHQ-share - ``` + ```bash + ls ~/serverHQ-share + ``` 2. Спробуйте отримати доступ і змінити файли в підключеному спільному ресурсі. Наприклад, щоб створити новий файл: - ```bash - touch ~/serverHQ-share/newfile.txt - ``` + ```bash + touch ~/serverHQ-share/newfile.txt + ``` #### Щоб відключити віддалений спільний доступ Після цього відключіть спільний доступ: -```` -```bash -sudo umount ~/serverHQ-share -``` -```` + ```bash + sudo umount ~/serverHQ-share + ``` From 8a1d730c344062db66b5b87a4dc83364f7677c00 Mon Sep 17 00:00:00 2001 From: wale soyinka Date: Fri, 1 Aug 2025 17:05:31 -0400 Subject: [PATCH 3/3] New translations lab4-advanced_system_process_monitoring.md (Ukrainian) --- ...4-advanced_system_process_monitoring.uk.md | 1144 ++++++++--------- 1 file changed, 565 insertions(+), 579 deletions(-) diff --git a/docs/labs/systems_administration_II/lab4-advanced_system_process_monitoring.uk.md b/docs/labs/systems_administration_II/lab4-advanced_system_process_monitoring.uk.md index a64b9f53a8..6ca879ad63 100644 --- a/docs/labs/systems_administration_II/lab4-advanced_system_process_monitoring.uk.md +++ b/docs/labs/systems_administration_II/lab4-advanced_system_process_monitoring.uk.md @@ -1,10 +1,10 @@ --- author: Wale Soyinka contributors: Steven Spencer, Ganna Zhrynova -tested on: Всі версії +tested on: All Versions tags: - - моніторинг системи - - моніторинг процесу + - system monitoring + - process monitoring - fuser - numactl - perf @@ -19,9 +19,9 @@ tags: # Лабораторна робота 4: Розширений моніторинг системи та процесів -## Завдання +## Objectives -Виконавши цю лабораторну роботу, ви зможете +After completing this lab, you will be able to - переглядати та керувати процесами за допомогою передових інструментів - діагностувати та налагоджувати системні виклики @@ -29,15 +29,15 @@ tags: - переглядати та встановлювати власні політики планування для процесів - аналізувати продуктивність системи та додатків -Приблизний час виконання цієї лабораторної роботи: 90 хвилин +Estimated time to complete this lab: 90 minutes -## Вступ +## Introduction Команди в цій лабораторній роботі охоплюють ширший спектр керування процесами, моніторингу системи та керування ресурсами в Linux. Вони додають більшої глибини та різноманітності вашому репертуару системного адміністратора. Ці вправи охоплюють додаткові команди та поняття Linux, надаючи практичний досвід керування процесами, моніторингу ресурсів і розширеного контролю. -## Завдання 1 +## Exercise 1 ### fuser @@ -45,63 +45,63 @@ tags: #### Щоб створити сценарій для імітації використання файлу -1. Спочатку створіть порожній тестовий файл, до якого ми хочемо отримати доступ. Впишіть: +1. Спочатку створіть порожній тестовий файл, до якого ми хочемо отримати доступ. Type: - ```bash - touch ~/testfile.txt - ``` + ```bash + touch ~/testfile.txt + ``` -2. Створіть сценарій, який ми будемо використовувати для імітації доступу до testfile.txt. Впишіть: +2. Створіть сценарій, який ми будемо використовувати для імітації доступу до testfile.txt. Type: - ```bash - cat > ~/simulate_file_usage.sh << EOF - #!/bin/bash - tail -f ~/testfile.txt - EOF - ``` + ```bash + cat > ~/simulate_file_usage.sh << EOF + #!/bin/bash + tail -f ~/testfile.txt + EOF + ``` -3. Зробіть сценарій виконуваним. Впишіть: +3. Make the script executable. Type: - ```bash - chmod +x ~/simulate_file_usage.sh - ``` + ```bash + chmod +x ~/simulate_file_usage.sh + ``` -4. Запустіть скрипт. Впишіть: +4. Запустіть скрипт. Type: - ```bash - ~/simulate_file_usage.sh & - ``` + ```bash + ~/simulate_file_usage.sh & + ``` #### Щоб ідентифікувати процеси, які звертаються до файлу 1. Визначте процеси за допомогою або доступу до `testfile.txt`, запустіть: - ```bash - fuser ~/testfile.txt - ``` + ```bash + fuser ~/testfile.txt + ``` -2. Перегляньте додаткові параметри `fuser` за допомогою параметра `-v`. Впишіть: +2. Перегляньте додаткові параметри `fuser` за допомогою параметра `-v`. Type: - ```bash - fuser -v ~/testfile.txt - ``` + ```bash + fuser -v ~/testfile.txt + ``` -3. Перегляньте додаткові параметри `fuser` за допомогою параметра `-v`. Тепер ви можете видалити файли. Впишіть: +3. Перегляньте додаткові параметри `fuser` за допомогою параметра `-v`. Тепер ви можете видалити файли. Type: - ```bash - kill %1 - rm ~/testfile.txt ~/simulate_file_usage.sh - ``` + ```bash + kill %1 + rm ~/testfile.txt ~/simulate_file_usage.sh + ``` #### Щоб ідентифікувати процес, який отримує доступ до порту TCP/UDP -1. Використовуйте команду `fuser`, щоб визначити процес доступу до TCP-порту 22 на вашому сервері. Впишіть: +1. Використовуйте команду `fuser`, щоб визначити процес доступу до TCP-порту 22 на вашому сервері. Type: - ```bash - sudo fuser 22/tcp - ``` + ```bash + sudo fuser 22/tcp + ``` -## Завдання 2 +## Exercise 2 ### `perf` @@ -109,141 +109,135 @@ tags: #### Щоб встановити `perf` -1. Встановіть програму `perf`, якщо вона не встановлена на вашому сервері. Впишіть: +1. Встановіть програму `perf`, якщо вона не встановлена на вашому сервері. Type: - ```bash - sudo dnf -y install perf - ``` + ```bash + sudo dnf -y install perf + ``` 2. Програма `bc` — це точний калькулятор командного рядка. `bc` буде використовуватися в цій вправі для імітації високого навантаження ЦП. Якщо `bc` ще не встановлено на вашому сервері, встановіть його за допомогою: - ```bash - sudo dnf -y install bc - ``` + ```bash + sudo dnf -y install bc + ``` #### Щоб створити сценарій для генерації навантаження на процесор 1. Створіть сценарій завантаження ЦП і зробіть його виконуваним, виконавши: - ```bash - cat > ~/generate_cpu_load.sh << EOF - #!/bin/bash - - # Check if the number of decimal places is passed as an argument - if [ "$#" -ne 1 ]; then - echo "Usage: $0 " - exit 1 - fi - - # Calculate Pi to the specified number of decimal places - for i in {1..10}; do echo "scale=$1; 4*a(1)" | bc -l; done - - EOF - chmod +x ~/generate_cpu_load.sh - ``` + ```bash + cat > ~/generate_cpu_load.sh << EOF + #!/bin/bash + + # Check if the number of decimal places is passed as an argument + if [ "$#" -ne 1 ]; then + echo "Usage: $0 " + exit 1 + fi + + # Calculate Pi to the specified number of decimal places + for i in {1..10}; do echo "scale=$1; 4*a(1)" | bc -l; done + + EOF + chmod +x ~/generate_cpu_load.sh + ``` - !!! tip "Підказка" + !!! tip - ``` - Сценарій generate_cpu_load.sh — це простий інструмент для генерування навантаження на ЦП шляхом обчислення Пі (π) з високою точністю. Такий же розрахунок проводиться десять разів. Сценарій приймає ціле число як параметр для визначення кількості знаків після коми для обчислення Пі. - ``` + Сценарій generate_cpu_load.sh — це простий інструмент для генерування навантаження на ЦП шляхом обчислення Пі (π) з високою точністю. Такий же розрахунок проводиться десять разів. Сценарій приймає ціле число як параметр для визначення кількості знаків після коми для обчислення Пі. #### Для імітації додаткового навантаження на процесор 1. Давайте проведемо простий тест і обчислимо Пі з точністю до 50 знаків після коми. Запустіть сценарій, ввівши: - ```bash - ~/generate_cpu_load.sh 50 & - ``` - -2. Повторно запустіть сценарій, але використовуйте `perf`, щоб записати продуктивність сценарію для аналізу використання ЦП та інших показників. Впишіть: + ```bash + ~/generate_cpu_load.sh 50 & + ``` - ```bash +2. Повторно запустіть сценарій, але використовуйте `perf`, щоб записати продуктивність сценарію для аналізу використання ЦП та інших показників. Type: - ./generate_cpu_load.sh 1000 & perf record -p $! sleep 5 - ``` + ```bash + + ./generate_cpu_load.sh 1000 & perf record -p $! sleep 5 + ``` - !!! tip "Підказка" + !!! tip - ``` - Параметр `sleep 5` з командою `perf record` визначає часове вікно для `perf` для збору даних про продуктивність щодо навантаження ЦП, створених сценарієм generate_cpu_load.sh. Це дозволяє `perf записувати показники продуктивності системи протягом 5 секунд перед автоматичною зупинкою. - ``` + Параметр `sleep 5` з командою `perf record` визначає часове вікно для `perf` для збору даних про продуктивність щодо навантаження ЦП, створених сценарієм generate_cpu_load.sh. Це дозволяє \`perf записувати показники продуктивності системи протягом 5 секунд перед автоматичною зупинкою. #### Для аналізу даних про ефективність і моніторингу подій у реальному часі -1. Використовуйте команду `perf report`, щоб переглянути звіт про продуктивність, щоб зрозуміти шаблони використання процесора та пам’яті. Впишіть: +1. Використовуйте команду `perf report`, щоб переглянути звіт про продуктивність, щоб зрозуміти шаблони використання процесора та пам’яті. Type: - ```bash - sudo perf report - ``` + ```bash + sudo perf report + ``` Ви можете використовувати різні клавіші клавіатури для подальшого вивчення звіту. Введіть ++"q"++, щоб вийти з інтерфейсу перегляду звітів `perf`. -2. Спостерігайте/фіксуйте події кешу процесора в режимі реального часу протягом 40 секунд, щоб виявити потенційні вузькі місця продуктивності. Впишіть: +2. Спостерігайте/фіксуйте події кешу процесора в режимі реального часу протягом 40 секунд, щоб виявити потенційні вузькі місця продуктивності. Type: - ```bash - sudo perf stat -e cache-references,cache-misses sleep 40 - ``` + ```bash + sudo perf stat -e cache-references,cache-misses sleep 40 + ``` #### Щоб записати повну продуктивність системи -1. Збирайте дані про продуктивність усієї системи, які можна використовувати для додаткового аналізу. Впишіть: +1. Збирайте дані про продуктивність усієї системи, які можна використовувати для додаткового аналізу. Type: - ```bash - sudo perf record -a sleep 10 - ``` + ```bash + sudo perf record -a sleep 10 + ``` 2. Досліджуйте лічильники конкретних подій. Підраховуйте конкретні події, як-от цикли процесора, щоб оцінити продуктивність певного сценарію чи програми. Давайте перевіримо за допомогою простої команди `find`, введіть: - ```bash - sudo perf stat -e cycles find /proc - ``` - -3. Зробіть те саме, але зі сценарієм ./generate_cpu_load.sh. Підраховуйте певні події, як-от цикли ЦП, щоб оцінити продуктивність сценарію ./generate_cpu_load.sh. Впишіть: - - ```bash - sudo perf stat -e cycles ./generate_cpu_load.sh 500 - ``` - - Вихід - - ```bash - ...... - 3.141592653589793238462643383279502884197169399375105820974944592307\ - 81640628620899862803482534211..... - - Performance counter stats for './generate_cpu_load.sh 500': - - 1,670,638,886 cycles - - 0.530479014 seconds time elapsed - - 0.488580000 seconds user - 0.034628000 seconds sys - ``` - - !!! note "Примітка" - - ``` - Ось розбивка кінцевого зразка результату команди `perf stat`: - - *1,670,638,886 cycles*: Це вказує на загальну кількість циклів процесора, споживаних під час виконання сценарію. Кожен цикл являє собою один крок у виконанні інструкцій ЦП. - - *0.530479014 seconds time elapsed*: Це загальний реальний час (або час настінного годинника), що минув від початку до кінця виконання сценарію. Ця тривалість включає всі типи очікувань (наприклад, очікування дискового вводу-виводу або системних викликів). - - *0.488580000 seconds user*: Це час роботи процесора в режимі користувача. Цей час явно виключає час, витрачений на виконання завдань системного рівня. - - *0.034628000 seconds sys*: Це час роботи процесора в режимі ядра або системи. Це включає час, який ЦП витрачає на виконання системних викликів або виконання інших завдань системного рівня від імені сценарію. - ``` + ```bash + sudo perf stat -e cycles find /proc + ``` + +3. Зробіть те саме, але зі сценарієм ./generate_cpu_load.sh. Підраховуйте певні події, як-от цикли ЦП, щоб оцінити продуктивність сценарію ./generate_cpu_load.sh. Type: + + ```bash + sudo perf stat -e cycles ./generate_cpu_load.sh 500 + ``` + + OUTPUT: + + ```bash + ...... + 3.141592653589793238462643383279502884197169399375105820974944592307\ + 81640628620899862803482534211..... + + Performance counter stats for './generate_cpu_load.sh 500': + + 1,670,638,886 cycles + + 0.530479014 seconds time elapsed + + 0.488580000 seconds user + 0.034628000 seconds sys + ``` + + !!! note + + Ось розбивка кінцевого зразка результату команди `perf stat`: + + _1,670,638,886 cycles_: Це вказує на загальну кількість циклів процесора, споживаних під час виконання сценарію. Кожен цикл являє собою один крок у виконанні інструкцій ЦП. + + _0.530479014 seconds time elapsed_: Це загальний реальний час (або час настінного годинника), що минув від початку до кінця виконання сценарію. Ця тривалість включає всі типи очікувань (наприклад, очікування дискового вводу-виводу або системних викликів). + + _0.488580000 seconds user_: Це час роботи процесора в режимі користувача. Цей час явно виключає час, витрачений на виконання завдань системного рівня.\ + + _0.034628000 seconds sys_: Це час роботи процесора в режимі ядра або системи. Це включає час, який ЦП витрачає на виконання системних викликів або виконання інших завдань системного рівня від імені сценарію. 4. Усе зроблено за допомогою інструмента `perf`. Переконайтеся, що фонові сценарії призначені для чистого робочого середовища. - ```bash - kill %1 - ``` + ```bash + kill %1 + ``` -## Завдання 3 +## Exercise 3 ### `strace` @@ -251,96 +245,96 @@ tags: #### Щоб створити сценарій для дослідження `strace` -1. Створіть простий сценарій під назвою `strace_script.sh` і зробіть його виконуваним. Впишіть: +1. Створіть простий сценарій під назвою `strace_script.sh` і зробіть його виконуваним. Type: - ```bash - cat > ~/strace_script.sh << EOF - #!/bin/bash - while true; do - date - sleep 1 - done - EOF - chmod +x ~/strace_script.sh - ``` + ```bash + cat > ~/strace_script.sh << EOF + #!/bin/bash + while true; do + date + sleep 1 + done + EOF + chmod +x ~/strace_script.sh + ``` #### Щоб використовувати `strace` для запущених процесів -1. Запустіть сценарій і прикріпіть `strace`. Впишіть: +1. Запустіть сценарій і прикріпіть `strace`. Type: - ```bash - ~/strace_script.sh & - ``` + ```bash + ~/strace_script.sh & + ``` 2. Знайдіть PID для процесу `strace_script.sh` в окремому терміналі. Зберігайте PID у змінній з іменем MYPID. Для цього ми використаємо команду `pgrep`, виконавши: - ```bash - export MYPID=$(pgrep strace_script) ; echo $MYPID - ``` + ```bash + export MYPID=$(pgrep strace_script) ; echo $MYPID + ``` - Вихід + OUTPUT: - ```bash - 4006301 - ``` + ```bash + 4006301 + ``` 3. Почніть відстежувати системні виклики сценарію, щоб зрозуміти, як він взаємодіє з ядром. Приєднайте `strace` до запущеного процесу сценарію, ввівши: - ```bash - sudo strace -p $MYPID - ``` + ```bash + sudo strace -p $MYPID + ``` 4. Від’єднайте або зупиніть процес `strace`, ввівши ++ctrl+c++ -5. Вихід `strace` можна відфільтрувати, зосередившись на певних системних викликах, таких як `open` і `read`, щоб проаналізувати їх поведінку. Спробуйте зробити це для системних викликів `open` і `read`. Впишіть: +5. Вихід `strace` можна відфільтрувати, зосередившись на певних системних викликах, таких як `open` і `read`, щоб проаналізувати їх поведінку. Спробуйте зробити це для системних викликів `open` і `read`. Type: - ```bash - sudo strace -e trace=open,read -p $MYPID - ``` + ```bash + sudo strace -e trace=open,read -p $MYPID + ``` Коли ви завершите спробу розшифрувати вихідні дані `strace`, зупиніть процес `strace`, ввівши ++ctrl+c++ 6. Перенаправте вихідні дані у файл для подальшого аналізу, який може допомогти діагностувати проблеми. Збережіть вивід `strace` у файл, виконавши: - ```bash - sudo strace -o strace_output.txt -p $MYPID - ``` + ```bash + sudo strace -o strace_output.txt -p $MYPID + ``` #### Для аналізу частоти системних викликів -1. Узагальніть кількість системних викликів, щоб визначити системні виклики, які найчастіше використовуються процесом. Зробіть це лише на 10 секунд, додавши команду `timeout`. Впишіть: +1. Узагальніть кількість системних викликів, щоб визначити системні виклики, які найчастіше використовуються процесом. Зробіть це лише на 10 секунд, додавши команду `timeout`. Type: - ```bash - sudo timeout 10 strace -c -p $MYPID - ``` + ```bash + sudo timeout 10 strace -c -p $MYPID + ``` Наша зразкова система показує підсумковий звіт таким чином: - Вихід - - ```bash - strace: Process 4006301 attached - strace: Process 4006301 detached - % time seconds usecs/call calls errors syscall - ------ ----------- ----------- --------- --------- ---------------- - 89.59 0.042553 1182 36 18 wait4 - 7.68 0.003648 202 18 clone - 1.67 0.000794 5 144 rt_sigprocmask - 0.45 0.000215 5 36 rt_sigaction - 0.36 0.000169 9 18 ioctl - 0.25 0.000119 6 18 rt_sigreturn - ------ ----------- ----------- --------- --------- ---------------- - 100.00 0.047498 175 270 18 total - ``` + OUTPUT: + + ```bash + strace: Process 4006301 attached + strace: Process 4006301 detached + % time seconds usecs/call calls errors syscall + ------ ----------- ----------- --------- --------- ---------------- + 89.59 0.042553 1182 36 18 wait4 + 7.68 0.003648 202 18 clone + 1.67 0.000794 5 144 rt_sigprocmask + 0.45 0.000215 5 36 rt_sigaction + 0.36 0.000169 9 18 ioctl + 0.25 0.000119 6 18 rt_sigreturn + ------ ----------- ----------- --------- --------- ---------------- + 100.00 0.047498 175 270 18 total + ``` 2. Припиніть виконання сценарію та видаліть усі створені файли. - ```bash - kill $MYPID - rm ~/strace_script.sh ~/strace_output.txt - ``` + ```bash + kill $MYPID + rm ~/strace_script.sh ~/strace_output.txt + ``` -## Завдання 4 +## Exercise 4 ### `atop` @@ -348,49 +342,49 @@ tags: #### Щоб запустити та дослідити `atop` -1. Встановіть програму `atop`, якщо вона не встановлена на вашому сервері. Впишіть: +1. Встановіть програму `atop`, якщо вона не встановлена на вашому сервері. Type: - ```bash - sudo dnf -y install atop - ``` + ```bash + sudo dnf -y install atop + ``` 2. Запустіть `atop`, ввівши: - ```bash - sudo atop - ``` + ```bash + sudo atop + ``` 3. В інтерфейсі `atop` ви можете досліджувати різні показники `atop`, натискаючи певні клавіші на клавіатурі. Використовуйте 'm', 'd' або 'n' для перемикання між переглядами пам'яті, диска або мережі. Спостерігайте, як використовуються ресурси в реальному часі. -4. Відстежуйте продуктивність системи з користувацьким інтервалом у 2 секунди, що дозволяє більш детально переглядати діяльність системи. Впишіть: +4. Відстежуйте продуктивність системи з користувацьким інтервалом у 2 секунди, що дозволяє більш детально переглядати діяльність системи. Type: - ```bash - sudo atop 2 - ``` + ```bash + sudo atop 2 + ``` 5. Перемикайтеся між різними видами ресурсів, щоб зосередитися на конкретних аспектах продуктивності системи. -6. Створіть звіт із файлу журналу про діяльність системи, збираючи дані кожні 60 секунд, тричі. Впишіть: +6. Створіть звіт із файлу журналу про діяльність системи, збираючи дані кожні 60 секунд, тричі. Type: - ```bash - sudo atop -w /tmp/atop_log 60 3 - ``` + ```bash + sudo atop -w /tmp/atop_log 60 3 + ``` 7. Після виконання попередньої команди ви можете не поспішати та переглянути двійковий файл, у якому було збережено журнали. Щоб прочитати збережений файл журналу, введіть: - ```bash - sudo atop -r /tmp/atop_log - ``` + ```bash + sudo atop -r /tmp/atop_log + ``` 8. Очистіть, видаливши всі створені журнали або файли. - ```bash - sudo rm /tmp/atop_log - ``` + ```bash + sudo rm /tmp/atop_log + ``` -## Завдання 5 +## Exercise 5 ### `numactl` @@ -401,58 +395,58 @@ NUMA означає "нерівномірний доступ до пам'яті" #### Щоб встановити `numactl` -1. Встановіть програму `numactl`, якщо вона не встановлена на вашому сервері. Впишіть: +1. Встановіть програму `numactl`, якщо вона не встановлена на вашому сервері. Type: - ```bash - sudo dnf -y install numactl - ``` + ```bash + sudo dnf -y install numactl + ``` #### Для створення сценарію, що потребує великої кількості пам’яті -1. Створіть простий сценарій, який допоможе імітувати робоче навантаження з інтенсивним використанням пам’яті на вашому сервері. Впишіть: +1. Створіть простий сценарій, який допоможе імітувати робоче навантаження з інтенсивним використанням пам’яті на вашому сервері. Type: - ```bash - cat > ~/memory_intensive.sh << EOF - #!/bin/bash - - awk 'BEGIN{for(i=0;i<1000000;i++)for(j=0;j<1000;j++);}{}' - EOF - chmod +x ~/memory_intensive.sh - ``` + ```bash + cat > ~/memory_intensive.sh << EOF + #!/bin/bash + + awk 'BEGIN{for(i=0;i<1000000;i++)for(j=0;j<1000;j++);}{}' + EOF + chmod +x ~/memory_intensive.sh + ``` #### Щоб використовувати `numactl` 1. Запустіть сценарій за допомогою `numactl`, введіть: - ```bash - numactl --membind=0 ~/memory_intensive.sh - ``` + ```bash + numactl --membind=0 ~/memory_intensive.sh + ``` 2. Якщо ваша система має більше ніж один доступний вузол NUMA, ви можете запустити сценарій на кількох вузлах NUMA за допомогою: - ```bash - numactl --cpunodebind=0,1 --membind=0,1 ~/memory_intensive.sh - ``` + ```bash + numactl --cpunodebind=0,1 --membind=0,1 ~/memory_intensive.sh + ``` 3. Покажіть розподіл пам'яті на вузлах NUMA - ```bash - numactl --show - ``` + ```bash + numactl --show + ``` 4. Прив’яжіть пам’ять до певного вузла, виконавши: - ```bash - numactl --membind=0 ~/memory_intensive.sh - ``` + ```bash + numactl --membind=0 ~/memory_intensive.sh + ``` 5. Очистіть своє робоче середовище, видаливши сценарій. - ```bash - rm ~/memory_intensive.sh - ``` + ```bash + rm ~/memory_intensive.sh + ``` -## Завдання 6 +## Exercise 6 ### `iotop` @@ -460,19 +454,19 @@ NUMA означає "нерівномірний доступ до пам'яті" #### Щоб встановити `iotop` -1. Встановіть утиліту `iotop`, якщо вона не встановлена. Впишіть: +1. Встановіть утиліту `iotop`, якщо вона не встановлена. Type: - ```bash - sudo dnf -y install iotop - ``` + ```bash + sudo dnf -y install iotop + ``` #### Щоб використовувати `iotop` для моніторингу дискового введення-виведення -1. Запустіть команду `iotop` без будь-яких параметрів, щоб використовувати її в інтерактивному режимі за замовчуванням. Впишіть: +1. Запустіть команду `iotop` без будь-яких параметрів, щоб використовувати її в інтерактивному режимі за замовчуванням. Type: - ```bash - sudo iotop - ``` + ```bash + sudo iotop + ``` Спостерігайте за використанням живого диска вводу-виводу різними процесами. Використовуйте це для визначення процесів, які зараз читають або записують на диск. @@ -482,29 +476,29 @@ NUMA означає "нерівномірний доступ до пам'яті" 1. Запустіть `iotop` у пакетному режимі (-b), щоб отримати неінтерактивний одноразовий перегляд використання введення-виведення. Параметр `-n 10` повідомляє `iotop` взяти 10 зразків перед виходом. - ```bash - sudo iotop -b -n 10 - ``` + ```bash + sudo iotop -b -n 10 + ``` 2. `iotop` може фільтрувати введення/виведення для певних процесів. Визначте ідентифікатор процесу (PID) у вашій системі за допомогою команди ps або дисплея `iotop`. Потім відфільтруйте вихідні дані `iotop` для цього конкретного PID. Наприклад, фільтруйте PID для процесу `sshd`, виконавши: - ```bash - sudo iotop -p $(pgrep sshd | head -1) - ``` + ```bash + sudo iotop -p $(pgrep sshd | head -1) + ``` 3. Опцію -`o` з `iotop` можна використовувати для показу процесів або потоків, які виконують фактичний ввід-вивід, замість відображення всіх процесів або потоків. Відобразити лише процеси вводу-виводу, виконавши: - ```bash - sudo iotop -o - ``` + ```bash + sudo iotop -o + ``` !!! Question "Обговорення" - ``` - Обговоріть вплив дискового вводу-виводу на загальну продуктивність системи та як такі інструменти, як `iotop`, можуть допомогти в оптимізації системи. - ``` + ``` + Обговоріть вплив дискового вводу-виводу на загальну продуктивність системи та як такі інструменти, як `iotop`, можуть допомогти в оптимізації системи. + ``` -## Завдання 7 +## Exercise 7 ### `cgroups` @@ -514,17 +508,17 @@ NUMA означає "нерівномірний доступ до пам'яті" ### Для вивчення файлової системи `cgroup` -1. Використовуйте команду `ls`, щоб дослідити вміст і структуру файлової системи `cgroup`. Впишіть: +1. Використовуйте команду `ls`, щоб дослідити вміст і структуру файлової системи `cgroup`. Type: - ```bash - ls /sys/fs/cgroup/ - ``` + ```bash + ls /sys/fs/cgroup/ + ``` -2. Знову скористайтеся командою `ls`, щоб отримати список папок \*.slice у файловій системі `cgroup`. Впишіть: +2. Знову скористайтеся командою `ls`, щоб отримати список папок \*.slice у файловій системі `cgroup`. Type: - ```bash - ls -d /sys/fs/cgroup/*.slice - ``` + ```bash + ls -d /sys/fs/cgroup/*.slice + ``` Папки з суфіксом .slice зазвичай використовуються в `systemd` для представлення фрагмента системних ресурсів. Це стандартні `cgroups`, якими керує `systemd` для організації та керування системними процесами. @@ -532,15 +526,15 @@ NUMA означає "нерівномірний доступ до пам'яті" 1. Створіть каталог під назвою "exercise_group" у файловій системі /sys/fs/cgroup. У цій новій папці будуть розміщені структури контрольних груп, необхідні для решти цієї вправи. Використовуйте команду `mkdir`, ввівши: - ```bash - sudo mkdir -p /sys/fs/cgroup/exercise_group - ``` + ```bash + sudo mkdir -p /sys/fs/cgroup/exercise_group + ``` -2. Тепер перелічіть файли та каталоги в структурі /sys/fs/cgroup/exercise_group. Впишіть: +2. Тепер перелічіть файли та каталоги в структурі /sys/fs/cgroup/exercise_group. Type: - ```bash - sudo ls /sys/fs/cgroup/exercise_group/ - ``` + ```bash + sudo ls /sys/fs/cgroup/exercise_group/ + ``` Вихідні дані показують файли та каталоги, автоматично створені підсистемою `cgroup` для керування та моніторингу ресурсів для `cgroup`. @@ -548,107 +542,105 @@ NUMA означає "нерівномірний доступ до пам'яті" 1. Давайте встановимо обмеження ресурсу пам’яті, щоб обмежити використання пам’яті до 4096 байт (4 КБ). Щоб обмежити процеси в `cgroup` використовувати максимум 4 Кб пам'яті типу: - ```bash - echo 4096 | sudo tee /sys/fs/cgroup/exercise_group/memory.max - ``` + ```bash + echo 4096 | sudo tee /sys/fs/cgroup/exercise_group/memory.max + ``` -2. Підтвердьте, що ліміт пам’яті встановлено. Впишіть: +2. Підтвердьте, що ліміт пам’яті встановлено. Type: - ```bash - cat /sys/fs/cgroup/exercise_group/memory.max - ``` + ```bash + cat /sys/fs/cgroup/exercise_group/memory.max + ``` #### Щоб створити тестовий сценарій memory_stress -1. Створіть простий виконуваний сценарій за допомогою команди `dd`, щоб перевірити обмеження ресурсу пам’яті. Впишіть: +1. Створіть простий виконуваний сценарій за допомогою команди `dd`, щоб перевірити обмеження ресурсу пам’яті. Type: - ```bash - cat > ~/memory_stress.sh << EOF - #!/bin/bash - dd if=/dev/zero of=/tmp/stress_test bs=10M count=2000 - EOF - chmod +x ~/memory_stress.sh - ``` + ```bash + cat > ~/memory_stress.sh << EOF + #!/bin/bash + dd if=/dev/zero of=/tmp/stress_test bs=10M count=2000 + EOF + chmod +x ~/memory_stress.sh + ``` #### Щоб запустити та додати процес/сценарій до `cgroup` пам'яті -1. Запустіть memory_stress.sh, запишіть його PID і додайте PID до group.procs. Впишіть: +1. Запустіть memory_stress.sh, запишіть його PID і додайте PID до group.procs. Type: - ```bash - ~/memory_stress.sh & - echo $! | sudo tee /sys/fs/cgroup/exercise_group/cgroup.procs - ``` + ```bash + ~/memory_stress.sh & + echo $! | sudo tee /sys/fs/cgroup/exercise_group/cgroup.procs + ``` Файл /sys/fs/cgroup/exercise_group/cgroup.procs можна використовувати для додавання або перегляду PID (ідентифікаторів процесів) процесів, які є членами даної `cgroup`. Запис PID до цього файлу призначає процес сценарію ~/memory_stress.sh групі `cgroup`. -2. Попередня команда завершиться дуже швидко, тому що вона перевищила обмеження пам’яті `cgroup`. Ви можете запустити таку команду `journalctl` в іншому терміналі, щоб переглянути помилку, як вона відбувається. Впишіть: +2. Попередня команда завершиться дуже швидко, тому що вона перевищила обмеження пам’яті `cgroup`. Ви можете запустити таку команду `journalctl` в іншому терміналі, щоб переглянути помилку, як вона відбувається. Type: - ```bash - journalctl -xe -f | grep -i memory - ``` + ```bash + journalctl -xe -f | grep -i memory + ``` - !!! tip "Порада" + !!! Tip - ```` - Ви можете швидко скористатися командою ps, щоб перевірити приблизне використання пам'яті процесом, якщо вам відомий PID процесу, запустивши: - - ```bash - pidof | xargs ps -o pid,comm,rss - ``` - - Цей вихід має відображати розмір резидентного набору (RSS) у КБ, що вказує на пам’ять, яку використовує вказаний процес у певний момент часу. Кожного разу, коли значення RSS процесу перевищує ліміт пам’яті, вказаний у значенні memory.max `cgroup's`, процес може підлягати політикам керування пам’яттю, які застосовуються ядром або самою `cgroup`. Залежно від конфігурації системи, система може виконувати такі дії, як обмеження використання пам’яті процесом, припинення процесу або ініціювання події браку пам’яті (OOM). - ```` + ``` + Ви можете швидко скористатися командою ps, щоб перевірити приблизне використання пам'яті процесом, якщо вам відомий PID процесу, запустивши: + + ```bash + pidof | xargs ps -o pid,comm,rss + ``` + + Цей вихід має відображати розмір резидентного набору (RSS) у КБ, що вказує на пам’ять, яку використовує вказаний процес у певний момент часу. Кожного разу, коли значення RSS процесу перевищує ліміт пам’яті, вказаний у значенні memory.max `cgroup's`, процес може підлягати політикам керування пам’яттю, які застосовуються ядром або самою `cgroup`. Залежно від конфігурації системи, система може виконувати такі дії, як обмеження використання пам’яті процесом, припинення процесу або ініціювання події браку пам’яті (OOM). + ``` #### Щоб установити новий ліміт ресурсу ЦП -1. Обмежте використання сценарієм лише 10% ядра ЦП. Впишіть: +1. Обмежте використання сценарієм лише 10% ядра ЦП. Type: - ```bash - echo 10000 | sudo tee /sys/fs/cgroup/exercise_group/cpu.max - ``` + ```bash + echo 10000 | sudo tee /sys/fs/cgroup/exercise_group/cpu.max + ``` 10000 означає обмеження пропускної здатності ЦП. Його встановлено на 10% від загальної потужності одного ядра ЦП. -2. Переконайтеся, що встановлено обмеження ЦП. Впишіть: +2. Переконайтеся, що встановлено обмеження ЦП. Type: - ```bash - cat /sys/fs/cgroup/exercise_group/cpu.max - ``` + ```bash + cat /sys/fs/cgroup/exercise_group/cpu.max + ``` #### Щоб створити сценарій стрес-тесту ЦП -1. Створюйте та встановлюйте дозволи на виконання для сценарію, щоб генерувати високе використання ЦП. Впишіть: +1. Створюйте та встановлюйте дозволи на виконання для сценарію, щоб генерувати високе використання ЦП. Type: - ```bash - cat > ~/cpu_stress.sh << EOF - #!/bin/bash - exec yes > /dev/null - EOF - chmod +x ~/cpu_stress.sh - ``` + ```bash + cat > ~/cpu_stress.sh << EOF + #!/bin/bash + exec yes > /dev/null + EOF + chmod +x ~/cpu_stress.sh + ``` - !!! note "Примітка" + !!! note - ``` - `yes > /dev/null` — це проста команда, яка створює високе навантаження на ЦП. - ``` + `yes > /dev/null` — це проста команда, яка створює високе навантаження на ЦП. #### Щоб запустити та додати процес/сценарій до CPU `cgroup` 1. Запустіть сценарій і негайно додайте його PID до `cgroup`, ввівши: - ```bash - ~/cpu_stress.sh & - echo $! | sudo tee /sys/fs/cgroup/exercise_group/cgroup.procs - ``` + ```bash + ~/cpu_stress.sh & + echo $! | sudo tee /sys/fs/cgroup/exercise_group/cgroup.procs + ``` #### Щоб підтвердити контроль використання ЦП процесу 1. Перевірте використання процесора процесом. - ```bash - pidof yes | xargs top -b -n 1 -p - ``` + ```bash + pidof yes | xargs top -b -n 1 -p + ``` Вихідні дані мають показувати використання ЦП у реальному часі процесом yes. %CPU для так має бути обмежено конфігурацією `cgroup` (наприклад, близько 10%, якщо обмеження встановлено на 10000). @@ -658,369 +650,363 @@ NUMA означає "нерівномірний доступ до пам'яті" Основний запам'ятовуючий пристрій може бути ціллю для встановлення обмежень на ресурси введення-виведення. Пристрої зберігання даних у системах Linux мають основні та другорядні номери пристроїв, які можна використовувати для їх унікальної ідентифікації. -1. По-перше, давайте створимо набір допоміжних змінних для визначення та збереження номера пристрою для основного пристрою зберігання на сервері. Впишіть: +1. По-перше, давайте створимо набір допоміжних змінних для визначення та збереження номера пристрою для основного пристрою зберігання на сервері. Type: - ```bash - primary_device=$(lsblk | grep disk | awk '{print $1}' | head -n 1) - primary_device_num=$(ls -l /dev/$primary_device | awk '{print $5, $6}' | sed 's/,/:/') - ``` + ```bash + primary_device=$(lsblk | grep disk | awk '{print $1}' | head -n 1) + primary_device_num=$(ls -l /dev/$primary_device | awk '{print $5, $6}' | sed 's/,/:/') + ``` -2. Далі, відобразимо значення змінної $primary_device_num. Впишіть: +2. Далі, відобразимо значення змінної $primary_device_num. Type: - ```bash - echo "Primary Storage Device Number: $primary_device_num" - ``` + ```bash + echo "Primary Storage Device Number: $primary_device_num" + ``` 3. Головний і допоміжний номери пристроїв мають відповідати тому, що ви бачите в цьому виведеному файлі ls: - ```bash - ls -l /dev/$primary_device - ``` + ```bash + ls -l /dev/$primary_device + ``` #### Щоб установити нове обмеження ресурсів введення-виведення -1. Встановіть операції вводу/виводу на 1 МБ/с для процесів читання та запису в `cgroup` групи виконання. Впишіть: +1. Встановіть операції вводу/виводу на 1 МБ/с для процесів читання та запису в `cgroup` групи виконання. Type: - ```bash - echo "$primary_device_num rbps=1048576 wbps=1048576" | \ - sudo tee /sys/fs/cgroup/exercise_group/io.max - ``` + ```bash + echo "$primary_device_num rbps=1048576 wbps=1048576" | \ + sudo tee /sys/fs/cgroup/exercise_group/io.max + ``` -2. Підтвердьте встановлені обмеження введення/виведення. Впишіть: +2. Підтвердьте встановлені обмеження введення/виведення. Type: - ```bash - cat /sys/fs/cgroup/exercise_group/io.max - ``` + ```bash + cat /sys/fs/cgroup/exercise_group/io.max + ``` #### Щоб створити процес стрес-тесту вводу-виводу -1. Запустіть процес `dd`, щоб створити великий файл з назвою /tmp/io_stress. Також запишіть і збережіть PID процесу dd у змінній під назвою `MYPID`. Впишіть: +1. Запустіть процес `dd`, щоб створити великий файл з назвою /tmp/io_stress. Також запишіть і збережіть PID процесу dd у змінній під назвою `MYPID`. Type: - ```bash - dd if=/dev/zero of=/tmp/io_stress bs=10M count=500 oflag=dsync \ - & export MYPID=$! - ``` + ```bash + dd if=/dev/zero of=/tmp/io_stress bs=10M count=500 oflag=dsync \ + & export MYPID=$! + ``` #### Щоб додати процес/сценарій до `cgroup` вводу/виводу -1. Додайте PID попереднього процесу dd до елемента керування exercise_group `cgroup`. Впишіть: +1. Додайте PID попереднього процесу dd до елемента керування exercise_group `cgroup`. Type: - ```bash - echo $MYPID | sudo tee /sys/fs/cgroup/exercise_group/cgroup.procs - ``` + ```bash + echo $MYPID | sudo tee /sys/fs/cgroup/exercise_group/cgroup.procs + ``` #### Щоб підтвердити контроль використання ресурсів введення-виведення процесу 1. Перевірте використання вводу-виводу процесом, виконавши: - ```bash - iotop -p $MYPID - ``` + ```bash + iotop -p $MYPID + ``` -Вихідні дані відображатимуть швидкість читання/запису вводу/виводу для процесу io_stress.sh, яка не повинна перевищувати 1 МБ/с відповідно до обмеження. +The output will display I/O read/write speeds for the io_stress.sh process, which should not exceed 1 MB/s as per the limit. -#### Щоб видалити `cgroups` +#### To remove `cgroups` -1. Введіть наступні команди, щоб завершити будь-який фоновий процес, видалити непотрібну `cgroup` і видалити файл /tmp/io_stress. +1. Type the following commands to end any background process, delete the no-longer-needed `cgroup` and remove the /tmp/io_stress file. - ```bash - kill %1 - sudo rmdir /sys/fs/cgroup/exercise_group/ - sudo rm -rf /tmp/io_stress - ``` + ```bash + kill %1 + sudo rmdir /sys/fs/cgroup/exercise_group/ + sudo rm -rf /tmp/io_stress + ``` -## Завдання 8 +## Exercise 8 ### `taskset` -CPU affinity прив’язує конкретні процеси або потоки до певних ядер ЦП у багатоядерній системі. Ця вправа демонструє використання `taskset` для встановлення або отримання спорідненості ЦП процесу в Linux. - -### Щоб дослідити CPU Affinity з `taskset` +CPU affinity binds specific processes or threads to particular CPU cores in a multi-core system. This exercise demonstrates the use of `taskset` to set or retrieve the CPU affinity of a process in Linux. -1. Використовуйте `lscpu`, щоб отримати список доступних ЦП у вашій системі. Впишіть: +### To explore CPU Affinity with `taskset` - ```bash - lscpu | grep "On-line" - ``` +1. Use the `lscpu` to list available CPUs on your system. Type: -2. Давайте створимо зразок процесу за допомогою утиліти dd і збережемо його PID у змінній MYPID. Впишіть: + ```bash + lscpu | grep "On-line" + ``` - ```bash - dd if=/dev/zero of=/dev/null & export MYPID="$!" - echo $MYPID - ``` +2. Давайте створимо зразок процесу за допомогою утиліти dd і збережемо його PID у змінній MYPID. Type: -3. Отримайте поточну спорідненість для процесу `dd`. Впишіть: + ```bash + dd if=/dev/zero of=/dev/null & export MYPID="$!" + echo $MYPID + ``` - ```bash - taskset -p $MYPID - ``` +3. Retrieve current affinity for the `dd` process. Type: - Вихід + ```bash + taskset -p $MYPID + ``` - ```bash - pid 1211483's current affinity mask: f - ``` + OUTPUT: - Вихідні дані показують маску спорідненості ЦП процесу з PID 1211483 ($MYPID), представленим у шістнадцятковому форматі. У нашому прикладі системи відображається маска спорідненості «f», що зазвичай означає, що процес може виконуватися на будь-якому ядрі ЦП. + ```bash + pid 1211483's current affinity mask: f + ``` - !!! note "Примітка" + Вихідні дані показують маску спорідненості ЦП процесу з PID 1211483 ($MYPID), представленим у шістнадцятковому форматі. On our sample system, the affinity mask displayed is "f", which typically means that the process can run on any CPU core. - ``` - Маска спорідненості ЦП "f" представляє конфігурацію, у якій увімкнено всі ядра ЦП. У шістнадцятковій системі числення «f» відповідає двійковому значенню «1111». Кожен біт у двійковому представленні відповідає ядру ЦП, причому «1» означає, що ядро ввімкнено та доступне для виконання процесу. + !!! note - Тому на чотириядерному процесорі з маскою "f": + The CPU affinity mask "f" represents a configuration where all CPU cores are enabled. In hexadecimal notation, "f" corresponds to the binary value "1111". Each bit in the binary representation corresponds to a CPU core, with "1" indicating that the core is enabled and available for the process to run on. + + Therefore, on four core CPU, with the mask "f": + + Core 0: Enabled + Core 1: Enabled + Core 2: Enabled + Core 3: Enabled - Core 0: Enabled - Core 1: Enabled - Core 2: Enabled - Core 3: Enabled - ``` +### To set/change CPU affinity -### Щоб встановити/змінити схожість ЦП +1. Встановіть приналежність ЦП процесу dd до одного ЦП (ЦП 0). Type: -1. Встановіть приналежність ЦП процесу dd до одного ЦП (ЦП 0). Впишіть: + ```bash + taskset -p 0x1 $MYPID + ``` - ```bash - taskset -p 0x1 $MYPID - ``` + OUTPUT - Вихід + ```bash + pid 1211483's current affinity mask: f + pid 1211483's new affinity mask: 1 + ``` - ```bash - pid 1211483's current affinity mask: f - pid 1211483's new affinity mask: 1 - ``` +2. Verify the change by running the following: -2. Перевірте зміни, виконавши: + ```bash + taskset -p $MYPID + ``` - ```bash - taskset -p $MYPID - ``` + Вихідні дані вказують на маску спорідненості ЦП процесу з PID $MYPID. The affinity mask is "1" in decimal, which translates to "1" in binary. This means that the process is currently bound to CPU core 0. - Вихідні дані вказують на маску спорідненості ЦП процесу з PID $MYPID. Маска спорідненості дорівнює «1» у десятковій системі, що перекладається як «1» у двійковій системі. Це означає, що процес наразі прив’язаний до ядра ЦП 0. +3. Тепер встановіть приналежність ЦП процесу dd до кількох ЦП (ЦП 0 і 1). Type: -3. Тепер встановіть приналежність ЦП процесу dd до кількох ЦП (ЦП 0 і 1). Впишіть: + ```bash + taskset -p 0x3 $MYPID + ``` - ```bash - taskset -p 0x3 $MYPID - ``` +4. Issue the correct `tasksel` command to verify the latest change. -4. Видайте правильну команду `tasksel`, щоб перевірити останню зміну. + ```bash + taskset -p $MYPID + ``` - ```bash - taskset -p $MYPID - ``` + On our demo 4-core CPU server, the output shows that the CPU affinity mask of the process is "3" (in decimal). This translates to "11" in binary. - На нашому демонстраційному 4-ядерному сервері ЦП результат показує, що маска спорідненості ЦП процесу дорівнює «3» (у десятковому вигляді). Це означає «11» у двійковій системі. + !!! tip - !!! tip "Підказка" + Decimal "3" is "11" (or 0011) in binary. + Each binary digit corresponds to a CPU core: core 0, core 1, core 2, core 3 (from right to left). + The digit "1" in the fourth and third positions (from the right) indicates that the process can run on cores 0 and 1. + Therefore, "3" signifies that the process is bound to CPU cores 0 and 1. - ``` - Десятковий "3" дорівнює "11" (або 0011) у двійковій системі. - Кожна двійкова цифра відповідає ядру ЦП: ядро 0, ядро 1, ядро 2, ядро 3 (справа наліво). - Цифра «1» на четвертій і третій позиціях (справа) означає, що процес може працювати на ядрах 0 і 1. - Тому «3» означає, що процес прив’язаний до ядер ЦП 0 і 1. - ``` +5. Launch either the `top` or `htop` utility in a separate terminal and observe if you see anything of interest as you experiment with different `taskset` configurations for a process. -5. Запустіть утиліту `top` або `htop` в окремому терміналі та спостерігайте, якщо ви бачите щось цікаве, експериментуючи з різними конфігураціями `taskset` для процесу. +6. All done. Використовуйте його PID ($MYPID), щоб припинити процес dd. -6. Все готово. Використовуйте його PID ($MYPID), щоб припинити процес dd. - -## Завдання 9 +## Exercise 9 ### `systemd-run` -Команда `systemd-run` створює та запускає тимчасові службові блоки для виконання команд або процесів. Вона також може запускати програми в блоках тимчасової області дії, блоках обслуговування, що запускаються шляхом, сокетом або таймером. +The `systemd-run` command creates and starts transient service units for running commands or processes. It can also run programs in transient scope units, path-, socket-, or timer-triggered service units. -У цій вправі показано, як використовувати `systemd-run` для створення тимчасових службових одиниць у `systemd`. +This exercise shows how to use `systemd-run` for creating transient service units in `systemd`. -#### Щоб запустити команду як тимчасову службу +#### To run a command as a transient service -1. Запустіть просту команду sleep 300 як тимчасову службу `systemd` за допомогою `systemd-run`. Впишіть: +1. Run the simple sleep 300 command as a transient `systemd` service using `systemd-run`. Type: - ```bash - systemd-run --unit=mytransient.service --description="Example Service" sleep 300 - ``` + ```bash + systemd-run --unit=mytransient.service --description="Example Service" sleep 300 + ``` -2. Перевірте статус тимчасової служби за допомогою `systemctl status`. Впишіть: +2. Check the status of the transient service using `systemctl status`. Type: - ```bash - systemctl status mytransient.service - ``` + ```bash + systemctl status mytransient.service + ``` -#### Щоб установити обмеження ресурсу пам’яті для тимчасової служби +#### To set a memory resource limit for a transient service -1. Використовуйте параметр `--property` разом із `systemd-run`, щоб обмежити максимальне використання пам’яті для тимчасового процесу до 200 МБ. Впишіть: +1. Use the `--property` parameter with `systemd-run` to limit the maximum memory usage for the transient process to 200M. Type: - ```bash - systemd-run --unit=mylimited.service --property=MemoryMax=200M sleep 300 - ``` + ```bash + systemd-run --unit=mylimited.service --property=MemoryMax=200M sleep 300 + ``` -2. Подивіться у відповідній файловій системі `cgroup` процес перевірки налаштування. Впишіть: +2. Look under the corresponding `cgroup` file system for the process to verify the setting. Type: - ```bash - sudo cat /sys/fs/cgroup/system.slice/mytransient.service/memory.max - ``` + ```bash + sudo cat /sys/fs/cgroup/system.slice/mytransient.service/memory.max + ``` - !!! tip "Підказка" + !!! tip - ``` - `systemd.resource-control` — це конфігурація або керуюча сутність (концепція) у рамках `systemd`, призначена для керування та розподілу системних ресурсів для процесів і служб. А `systemd.exec` — це компонент `systemd`, який відповідає за визначення середовища виконання, у якому виконуються команди. Щоб переглянути різні параметри (властивості), які ви можете налаштувати під час використання systemd-run, зверніться до сторінок посібника `systemd.resource-control` і `systemd.exec`. Тут ви знайдете документацію для таких властивостей, як MemoryMax, CPUAccounting, IOWeight тощо. - ``` + `systemd.resource-control` — це конфігурація або керуюча сутність (концепція) у рамках `systemd`, призначена для керування та розподілу системних ресурсів для процесів і служб. А `systemd.exec` — це компонент `systemd`, який відповідає за визначення середовища виконання, у якому виконуються команди. Щоб переглянути різні параметри (властивості), які ви можете налаштувати під час використання systemd-run, зверніться до сторінок посібника `systemd.resource-control` і `systemd.exec`. Тут ви знайдете документацію для таких властивостей, як MemoryMax, CPUAccounting, IOWeight тощо. -#### Щоб установити обмеження на ресурс ЦП для тимчасової служби +#### To set CPU resource limit for a transient service -1. Давайте створимо тимчасовий блок `systemd` під назвою "myrealtime.service". Запустіть myrealtime.service із спеціальною політикою планування циклічного (rr) і пріоритетом. Впишіть: +1. Давайте створимо тимчасовий блок `systemd` під назвою "myrealtime.service". Запустіть myrealtime.service із спеціальною політикою планування циклічного (rr) і пріоритетом. Type: - ```bash - systemd-run --unit=myrealtime.service \ - --property=CPUSchedulingPolicy=rr --property=CPUSchedulingPriority=50 sleep 300 - ``` + ```bash + systemd-run --unit=myrealtime.service \ + --property=CPUSchedulingPolicy=rr --property=CPUSchedulingPriority=50 sleep 300 + ``` -2. Перегляньте статус myrealtime.service. Крім того, захопіть/збережіть основний [sleep] PID у змінній під назвою MYPID. Впишіть: +2. Перегляньте статус myrealtime.service. Also, capture/store the main [sleep] PID in a MYPID variable. Type: - ```bash - MYPID=$(systemctl status myrealtime.service | awk '/Main PID/ {print $3}') - ``` + ```bash + MYPID=$(systemctl status myrealtime.service | awk '/Main PID/ {print $3}') + ``` -3. Поки служба все ще працює, перевірте її політику планування ЦП. Впишіть: +3. Verify its CPU scheduling policy While the service is still running. Type: - ```bash - chrt -p $MYPID - pid 2553792's current scheduling policy: SCHED_RR - pid 2553792's current scheduling priority: 50 - ``` + ```bash + chrt -p $MYPID + pid 2553792's current scheduling policy: SCHED_RR + pid 2553792's current scheduling priority: 50 + ``` -### Щоб створити блок перехідного часу +### To create a transient timer unit -1. Створіть простий таймер, який виконує просту команду echo. Параметр `--on-active=2m` встановлює таймер на спрацьовування через 2 хвилини після того, як блок таймера стане активним. Впишіть: +1. Create a simple timer unit that runs a simple echo command. The `--on-active=2m` option sets the timer to trigger 2 minutes after the timer unit becomes active. Type: - ```bash - systemd-run --on-active=2m --unit=mytimer.timer \ - --description="Example Timer" echo "Timer triggered" - ``` + ```bash + systemd-run --on-active=2m --unit=mytimer.timer \ + --description="Example Timer" echo "Timer triggered" + ``` - Таймер почне відлік часу з моменту активації пристрою і через 2 хвилини запустить вказану дію. + The timer will start counting down from the time the unit is activated, and after 2 minutes, it will trigger the specified action. -2. Переглянути деталі/статус щойно створеного таймера. Впишіть: +2. View details/status for the timer unit that was just created. Type: - ```bash - systemctl status mytimer.timer - ``` + ```bash + systemctl status mytimer.timer + ``` -#### Щоб зупинити та очистити тимчасові блоки `systemd` +#### To stop and clean up transient `systemd` units -1. Введіть наступні команди, щоб переконатися, що різні тимчасові служби/процеси, запущені для цієї вправи, належним чином зупинені та видалені з вашої системи. Впишіть: +1. Type the following commands to ensure that the various transient services/processes started for this exercise are properly stopped and removed from your system. Type: - ```bash - systemctl stop mytransient.service - systemctl stop mylimited.service - systemctl stop myrealtime.service - systemctl stop mytimer.timer - ``` + ```bash + systemctl stop mytransient.service + systemctl stop mylimited.service + systemctl stop myrealtime.service + systemctl stop mytimer.timer + ``` -## Вправа 10 +## Exercise 10 ### `schedtool` -Ця вправа демонструє використання `schedtool` для розуміння та керування плануванням процесів у Rocky Linux. Ми також створимо сценарій для моделювання процесу для цієї мети. - -#### Щоб встановити `schedtool` +This exercise demonstrates the use of `schedtool` to understand and manipulate process scheduling in Rocky Linux. Ми також створимо сценарій для моделювання процесу для цієї мети. -1. Встановіть програму `schedtool`, якщо вона не встановлена на вашому сервері. Впишіть: +#### To install `schedtool` - ```bash - sudo dnf -y install schedtool - ``` +1. Install the `schedtool` application if it is not installed on your server. Type: -#### Щоб створити імітований сценарій процесу + ```bash + sudo dnf -y install schedtool + ``` -1. Створіть сценарій, який генерує навантаження на процесор для цілей тестування. Впишіть: +#### To create a simulated process script - ```bash - cat > ~/cpu_load_generator.sh << EOF - #!/bin/bash - while true; do - openssl speed > /dev/null 2>&1 - openssl speed > /dev/null 2>&1 +1. Create a script that generates CPU load for testing purposes. Type: - done - EOF - chmod +x ~/cpu_load_generator.sh - ``` + ```bash + cat > ~/cpu_load_generator.sh << EOF + #!/bin/bash + while true; do + openssl speed > /dev/null 2>&1 + openssl speed > /dev/null 2>&1 + + done + EOF + chmod +x ~/cpu_load_generator.sh + ``` -2. Запустіть сценарій у фоновому режимі. Впишіть: +2. Start the script in the background. Type: - ```bash - ~/cpu_load_generator.sh & echo $! - ``` + ```bash + ~/cpu_load_generator.sh & echo $! + ``` -3. Зберіть PID для основного процесу `openssl`, запущеного в сценарії cpu_load_generator.sh. Зберігайте PID у змінній з іменем MYPID. Впишіть: +3. Зберіть PID для основного процесу `openssl`, запущеного в сценарії cpu_load_generator.sh. Зберігайте PID у змінній з іменем MYPID. Type: - ```bash - export MYPID=$(pidof openssl) ; echo $MYPID - ``` + ```bash + export MYPID=$(pidof openssl) ; echo $MYPID + ``` -#### Щоб використовувати `schedtool` для перевірки поточної політики планування +#### To use `schedtool` to check the current scheduling policy -1. Використовуйте команду `schedtool`, щоб відобразити інформацію про планування процесу з PID $MYPID. Впишіть: +1. Використовуйте команду `schedtool`, щоб відобразити інформацію про планування процесу з PID $MYPID. Type: - ```bash - schedtool $MYPID - ``` + ```bash + schedtool $MYPID + ``` - Вихід + OUTPUT: - ```bash - PID 2565081: PRIO 0, POLICY N: SCHED_NORMAL , NICE 0, AFFINITY 0xf - ``` + ```bash + PID 2565081: PRIO 0, POLICY N: SCHED_NORMAL , NICE 0, AFFINITY 0xf + ``` -#### Щоб використовувати `schedtool` для зміни політики планування +#### To use `schedtool` to modify the scheduling policy -1. Змініть політику планування та пріоритет процесу FIFO та 10 відповідно. Впишіть: +1. Change the scheduling policy and priority of the process FIFO and 10, respectively. Type: - ```bash - sudo schedtool -F -p 10 $! - ``` + ```bash + sudo schedtool -F -p 10 $! + ``` -2. Перегляньте ефект від змін. Впишіть: +2. View the effect of the changes. Type: - ```bash - schedtool $MYPID - ``` + ```bash + schedtool $MYPID + ``` -3. Змініть політику планування та пріоритет процесу на циклічний або SCHED_RR (RR) і 50 відповідно. Впишіть: +3. Change the scheduling policy and priority of the process to round robin or SCHED_RR (RR) and 50, respectively. Type: - ```bash - sudo schedtool -R -p 50 $MYPID - ``` + ```bash + sudo schedtool -R -p 50 $MYPID + ``` -4. Перегляньте ефект від змін. Впишіть: +4. View the effect of the changes. Type: - ```bash - schedtool $MYPID - ``` + ```bash + schedtool $MYPID + ``` -5. Змініть політику планування процесу на Idle або SCHED_IDLEPRIO (D). Впишіть: +5. Change the scheduling policy of the process to Idle or SCHED_IDLEPRIO (D). Type: - ```bash - sudo schedtool -D $MYPID - ``` + ```bash + sudo schedtool -D $MYPID + ``` -6. Перегляньте ефект від змін. +6. View the effect of the changes. -7. Нарешті, скиньте політику планування процесу назад до початкового стандартного SCHED_NORMAL (N або інше). Впишіть: +7. Finally, reset the scheduling policy of the process back to the original default SCHED_NORMAL (N or other). Type: - ```bash - sudo schedtool -N $MYPID - ``` + ```bash + sudo schedtool -N $MYPID + ``` -#### Щоб завершити та очистити процес `cpu_load_generator.sh` +#### To terminate and clean up the `cpu_load_generator.sh` process -1. Все готово. Завершіть сценарій і видаліть сценарій `cpu_load_generator.sh`. +1. All done. Terminate the script and delete the `cpu_load_generator.sh` script. - ```bash - kill $MYPID - rm ~/cpu_load_generator.sh - ``` + ```bash + kill $MYPID + rm ~/cpu_load_generator.sh + ```