Инструменты пользователя

Инструменты сайта


projects:disable_pcie_aspm

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
projects:disable_pcie_aspm [2025/03/31 14:15] projects:disable_pcie_aspm [2025/04/14 15:09] (текущий)
Строка 4: Строка 4:
 Имеет встроенный USB 3.0 контроллер, но не выводит PCIe наружу.\\ Имеет встроенный USB 3.0 контроллер, но не выводит PCIe наружу.\\
  
-pcie_aspm=off влияет на поведение USB 3.0 и Ethernet, может улучшить стабильность под высокой нагрузкой.\\+''pcie_aspm=off'' влияет на поведение USB 3.0 и Ethernet, может улучшить стабильность под высокой нагрузкой.\\
  
 ✅ **Raspberry Pi 5**:\\ ✅ **Raspberry Pi 5**:\\
 Имеет полноценный PCIe-шлюз (можно подключать NVMe и прочее).\\ Имеет полноценный PCIe-шлюз (можно подключать NVMe и прочее).\\
  
-Здесь pcie_aspm=off особенно полезен:\\+Здесь ''pcie_aspm=off'' особенно полезен:\\
  
 стабилизирует поведение при работе с SSD, NVMe, USB-хабами,\\ стабилизирует поведение при работе с SSD, NVMe, USB-хабами,\\
Строка 33: Строка 33:
 fi fi
 </code> </code>
 +
 +
 +<code bash power_mode.sh>
 +#!/bin/bash
 +export LANG=en_US.UTF-8
 +export LC_ALL=en_US.UTF-8
 +# ==AUTOEXEC==
 +# === Power Mode ===
 +# power_mode.sh
 +# Меню управления энергосбережением: CPU и Wi-Fi на Raspberry Pi
 +# Универсальный скрипт для Pi 4/5: CPU, Wi-Fi, USB + постоянный USB-on через udev
 +
 +set -euo pipefail
 +
 +UDEV_RULE_PATH="/etc/udev/rules.d/99-usb-power.rules"
 +
 +# Определение модели
 +MODEL=$(tr -d '\0' </proc/device-tree/model)
 +echo "🧠 Устройство: $MODEL"
 +
 +# CPU governor
 +GOV=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
 +echo "🖥️ Режим CPU: $GOV"
 +
 +# Wi-Fi
 +WIFI_IF=$(iw dev | awk '$1=="Interface"{print $2}' | head -n1)
 +if [[ -n "$WIFI_IF" ]]; then
 +  WIFI_STATE=$(iw dev "$WIFI_IF" get power_save | awk '{print $NF}')
 +  echo "📶 Wi-Fi интерфейс: $WIFI_IF, энергосбережение: $WIFI_STATE"
 +else
 +  echo "📶 Wi-Fi интерфейс не найден."
 +fi
 +
 +# USB
 +USB_STATE=$(grep . /sys/bus/usb/devices/usb*/power/control | sort -u | tr '\n' ' ')
 +echo "🔌 USB power control (текущие): $USB_STATE"
 +
 +
 +# 💡 Оценка конфигурации
 +CONFIG_STATUS_ICON=""
 +CONFIG_STATUS_DESC=""
 +
 +if [[ "$GOV" == "ondemand" && "$USB_STATE" == *"on"* ]]; then
 +  CONFIG_STATUS_ICON="🌿"
 +  CONFIG_STATUS_DESC="Максимальное энергосбережение с сохранением стабильности (USB всегда активен)"
 +elif [[ "$GOV" == "performance" && "$USB_STATE" == *"on"* ]]; then
 +  CONFIG_STATUS_ICON="🔥"
 +  CONFIG_STATUS_DESC="Высокая производительность, USB не уходит в сон"
 +elif [[ "$GOV" == "ondemand" && "$USB_STATE" == *"auto"* ]]; then
 +  CONFIG_STATUS_ICON="💤"
 +  CONFIG_STATUS_DESC="Минимальное энергопотребление (CPU и USB в энергосбережении)"
 +elif [[ "$GOV" == "performance" && "$USB_STATE" == *"auto"* ]]; then
 +  CONFIG_STATUS_ICON="⚡"
 +  CONFIG_STATUS_DESC="Производительность активна, но USB может отключаться"
 +else
 +  CONFIG_STATUS_ICON="⚙️"
 +  CONFIG_STATUS_DESC="Смешанный режим: нестандартная комбинация"
 +fi
 +
 +echo "$CONFIG_STATUS_ICON Конфигурация: $CONFIG_STATUS_DESC"
 +
 +# udev правило
 +if [[ -f "$UDEV_RULE_PATH" ]]; then
 +  echo "📂 Udev-правило обнаружено: $UDEV_RULE_PATH (USB всегда включено)"
 +else
 +  echo "📂 Udev-правило НЕ найдено (USB отключается по умолчанию)"
 +fi
 +
 +echo ""
 +echo "🔧 Выберите действие:"
 +echo "  1 - 🔁 Переключить CPU между performance и ondemand"
 +echo "  2 - 📶 Включить/отключить энергосбережение Wi-Fi"
 +echo "  3 - 🔌 Включить/отключить энергосбережение USB (до перезагрузки)"
 +echo "  4 - 📂 Создать/удалить udev-правило для ПЕРМАНЕНТНОГО включения USB"
 +echo "  0 - ❌ Выход"
 +read -rp "👉 Выбор: " choice
 +
 +case "$choice" in
 +  1)
 +    if [[ "$GOV" == "performance" ]]; then
 +      read -rp "🌙 Переключить в ondemand? [y/N] " ans
 +      [[ "$ans" =~ ^[Yy]$ ]] && for c in /sys/devices/system/cpu/cpu[0-9]*; do echo ondemand | sudo tee "$c/cpufreq/scaling_governor"; done
 +    else
 +      read -rp "🚀 Переключить в performance? [y/N] " ans
 +      [[ "$ans" =~ ^[Yy]$ ]] && for c in /sys/devices/system/cpu/cpu[0-9]*; do echo performance | sudo tee "$c/cpufreq/scaling_governor"; done
 +    fi
 +    ;;
 +  2)
 +    if [[ -n "$WIFI_IF" ]]; then
 +      if [[ "$WIFI_STATE" == "on" ]]; then
 +        read -rp "📶 Отключить энергосбережение Wi-Fi ($WIFI_IF)? [y/N] " ans
 +        [[ "$ans" =~ ^[Yy]$ ]] && sudo iw dev "$WIFI_IF" set power_save off
 +      else
 +        read -rp "🔌 Включить энергосбережение Wi-Fi ($WIFI_IF)? [y/N] " ans
 +        [[ "$ans" =~ ^[Yy]$ ]] && sudo iw dev "$WIFI_IF" set power_save on
 +      fi
 +    fi
 +    ;;
 +  3)
 +    if [[ "$USB_STATE" == *"auto"* ]]; then
 +      read -rp "🔋 Отключить USB энергосбережение (on)? [y/N] " ans
 +      [[ "$ans" =~ ^[Yy]$ ]] && for path in /sys/bus/usb/devices/usb*/power/control; do echo on | sudo tee "$path"; done
 +    else
 +      read -rp "🌙 Включить USB энергосбережение (auto)? [y/N] " ans
 +      [[ "$ans" =~ ^[Yy]$ ]] && for path in /sys/bus/usb/devices/usb*/power/control; do echo auto | sudo tee "$path"; done
 +    fi
 +    ;;
 +  4)
 +    if [[ -f "$UDEV_RULE_PATH" ]]; then
 +      read -rp "❌ Удалить udev-правило и вернуть поведение по умолчанию? [y/N] " ans
 +      if [[ "$ans" =~ ^[Yy]$ ]]; then
 +        sudo rm "$UDEV_RULE_PATH"
 +        sudo udevadm control --reload
 +        echo "✅ Правило удалено."
 +      fi
 +    else
 +      read -rp "📂 Создать правило для постоянного включения USB? [y/N] " ans
 +      if [[ "$ans" =~ ^[Yy]$ ]]; then
 +        echo 'ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="on"' | sudo tee "$UDEV_RULE_PATH" >/dev/null
 +        sudo udevadm control --reload
 +        sudo udevadm trigger --subsystem-match=usb --action=add
 +        echo "✅ Правило создано: $UDEV_RULE_PATH"
 +      fi
 +    fi
 +    ;;
 +  0)
 +    echo "👋 Выход." ;;
 +  *)
 +    echo "❓ Неверный выбор." ;;
 +esac
 +</code>
 +----
 +{{page>common:footer&noeditbutton}}
projects/disable_pcie_aspm.1743419719.txt.gz · Последнее изменение: 2025/03/31 14:15 —

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution 4.0 International
CC Attribution 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki