cpupower и libcpupower

Вопрос или проблема

Иногда cpupower не удается выполнить с этой ошибкой:

cpupower: error while loading shared libraries: libcpupower.so.0: cannot open shared object file: No such file or directory

Я скомпилировал и установил последнюю версию cpupower из исходников на своей рабочей станции.

Команда установки Makefile устанавливает библиотеки в /usr/local/lib, и моя переменная LD_LIBRARY_PATH настроена соответственно:

syl@WorkStation-T3500:~$ echo $LD_LIBRARY_PATH 
:/usr/local/lib/

lrwxrwxrwx  1 root root     20 июн  26 11:46 libcpupower.so -> libcpupower.so.0.0.1
lrwxrwxrwx  1 root root     20 июн  26 11:46 libcpupower.so.0 -> libcpupower.so.0.0.1

-rwxr-xr-x 1 root root 77048 июн 26 11:46 libcpupower.so.0.0.1
l

Простой запрос cpupower info работает хорошо:

syl@WorkStation-T3500:~$ cpupower frequency-info
analyzing CPU 0:
driver: intel_pstate
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency:  Cannot determine or is not supported.
hardware limits: 1.20 GHz - 3.20 GHz
available cpufreq governors: performance powersave
current policy: frequency should be within 1.20 GHz and 3.20 GHz.
              The governor "powersave" may decide which speed to use
              within this range.
current CPU frequency: Unable to call hardware
current CPU frequency: 1.20 GHz (asserted by call to kernel)
boost state support:
Supported: yes
Active: yes

Тем не менее, вот что происходит, когда я пытаюсь установить какую-то политику:

syl@WorkStation-T3500:~$ sudo cpupower frequency-set --governor userspace 
cpupower: error while loading shared libraries: libcpupower.so.0: cannot open shared object file: No such file or directory

Могу я попросить вас подсказать, в чем причина этой странной проблемы?

Всего наилучшего

Сильвен

Я выяснил, что правильной инициализации LD_LIBRARY_PATH недостаточно, мне пришлось добавить путь к библиотеке в /etc/ld.so.conf.d/x86_64-linux-gnu.conf:

syl@WorkStation-T3500:~$ sudo vim /etc/ld.so.conf.d/x86_64-linux-gnu.conf

# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/loca/lib/

Затем:

syl@WorkStation-T3500:~$ sudo ldconfig

Это делает все рабочим, но я не могу понять, почему:

syl@WorkStation-T3500:~$ sudo cpupower frequency-set --governor userspace Setting cpu: 0
Error setting new values. Common errors:
- Do you have proper administration rights? (super-user?)
- Is the governor you requested available and modprobed?
- Trying to set an invalid policy?
- Trying to set a specific frequency, but userspace governor is not available,
for example because of hardware which cannot be set to a specific frequency or because the userspace governor isn't loaded?

Ок, ничего не остается, кроме как понять, почему эта команда не работает…

С уважением!

Сильвен

Драйвер intel_pstate принимает только политики управления powersave или performance, а не userspace. Это ограничение устанавливается в файле <kernel source>/drivers/cpufreq/intel_pstate.c, функцией intel_pstate_verify_policy:

static int intel_pstate_verify_policy(struct cpufreq_policy *policy)
{
        struct cpudata *cpu = all_cpu_data[policy->cpu];

        update_turbo_state();
        cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq,
                                     intel_pstate_get_max_freq(cpu));

        if (policy->policy != CPUFREQ_POLICY_POWERSAVE &&
            policy->policy != CPUFREQ_POLICY_PERFORMANCE)
                return -EINVAL;

        intel_pstate_adjust_policy_max(policy, cpu);

        return 0;
}

Если вам действительно нужно использовать userspace governor, вам придется переключиться на другой драйвер CPUFreq. См. этот вопрос для получения более подробной информации.

Ответ или решение

При решении возникающей проблемы с библиотеками cpupower и libcpupower, которая проявляется в ошибке загрузки и библиотеки libcpupower.so.0, крайне важно тщательно проанализировать текущую конфигурацию системы и сделать необходимые изменения для корректной работы.

Теория

cpupower – это мощный инструмент, предоставляющий интерфейс для управления частотой процессора и энергоэффективностью на современных системах Linux. Он взаимодействует с драйверами ядра Linux, такими как intel_pstate, через библиотеки, такие как libcpupower, которые, в свою очередь, должны быть корректно установлены и доступны для выполнения.

Проблема, с которой вы сталкиваетесь, связана с отсутствием корректной загрузки библиотек. Ваш пример изначально показывает стандартную ошибку при попытке запуска cpupower, указывающую на невозможность открытия файла libcpupower.so.0. По умолчанию, динамическое связывание в Linux использует конфигурационные файлы и переменные окружения, чтобы обнаруживать и загружать требуемые библиотеки.

Основные компоненты, влияющие на загрузку библиотек:

  1. LD_LIBRARY_PATH: Переменная окружения, в которой указываются дополнительные пути поиска для динамических библиотек.
  2. ld.so.conf и ld.so.cache: Конфигурационные файлы и кеш, которые использует системный загрузчик для поиска библиотек.

Пример

В вашем случае, несмотря на установку библиотеки libcpupower в директорию /usr/local/lib, система не могла её обнаружить. Это связано с тем, что sudo сбрасывает переменные окружения по соображениям безопасности, включая LD_LIBRARY_PATH. Таким образом, хотя обычный пользовательский запуск cpupower (например, cpupower frequency-info) мог бы работать, запуск от имени суперпользователя приводит к ошибке из-за отсутствия нужного пути в конфигурации ld.

Вы успешно решили проблему, добавив путь /usr/local/lib в файл конфигурации /etc/ld.so.conf.d/x86_64-linux-gnu.conf, что стало устойчивым решением. Этот файл, объединённый в ld.so.conf, определяет пути, которые системный загрузчик линкуется для поиска библиотек.

Применение

Однако вам необходимо учитывать еще один важный момент: поддержка драйвера. cpupower может корректно работать только с теми драйверами и режимами, которые поддерживаются вашим процессором и ядром Linux.

Ваши попытки установить губернатор userspace при использовании драйвера intel_pstate приводят к ошибке, так как данный драйвер поддерживает только губернаторы powersave и performance. Функция в сорс-коде ядра, intel_pstate_verify_policy, специально реализована так, чтобы ограничить использование только этими двумя режимами.

Заключение

Если вам крайне необходимо использовать userspace для более точной настройки частоты процессора, вам потребуется переключиться на другой драйвер, такой как acpi-cpufreq, если он поддерживается вашей аппаратной платформой. Будет полезно заглянуть в документацию вашего оборудования и руководства Linux, чтобы понять доступные вам опции. Также вы можете рассмотреть вопрос об использовании других инструментов и конфигураций, поддерживающих современные требования к управлению мощностью и производительностью.

Такое системное понимание позволит вам не только решать текущие проблемы с динамическим связыванием библиотек, но и эффективно управлять настройками производительности ваших вычислительных систем.

Оцените материал
Добавить комментарий

Капча загружается...