Bug 17955 - nut works bad with current libusb
: nut works bad with current libusb
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/nut)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
: 17727
  Show dependency tree
 
Reported: 2008-11-20 20:17 by
Modified: 2012-04-07 15:18 (History)


Attachments
Первая версия исправления hidups-usb (1.38 KB, patch)
2008-11-23 22:09, Alexander Bokovoy
no flags Details | Diff


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2008-11-20 20:17:36
При использовании nut с libusb-0.9.3-alt3.0 наблюдаются ужасные вещи.
Например, дома newhidups съедает 1.9G RES, на работе даёт 99% загрузку CPU

ab в курсе, обещал починить, ждём. Бага носит информационно-отслеживательный
характер.
------- Comment #1 From 2008-11-22 08:22:55 -------
Проверено с nut 2.2.2 от Amike (git.alt:/people/amike/packages/nut.git) и
libusb 0.9.4-alt1.0 все работает как надо, никаких проблем больше не
наблюдается.

К сожалению, для помещения nut 2.2.2 в Сизиф надо поработать над переездом
конфигурационных файлов. Как минимум, /etc/nut/ups.conf потребует
переименования драйвера (newhidups -> usbhid-ups), а также файлы конфигурации
для других служб на самом деле лежат в /var/lib/nut/etc/nut и должны как-то
корректно синхронизироваться.
------- Comment #2 From 2008-11-22 22:03:42 -------
(In reply to comment #1)
> Проверено с nut 2.2.2 от Amike (git.alt:/people/amike/packages/nut.git) и libusb 0.9.4-alt1.0 все работает как
> надо, никаких проблем больше не наблюдается.
хорощо
> К сожалению, для помещения nut 2.2.2 в Сизиф надо поработать над переездом
> конфигурационных файлов. Как минимум, /etc/nut/ups.conf потребует переименования
> драйвера (newhidups -> usbhid-ups), а также файлы конфигурации для других служб на
> самом деле лежат в /var/lib/nut/etc/nut и должны как-то корректно синхронизироваться.
> 
сейчас занят этим. 
Спасибо что посмотрели сборку. 
------- Comment #3 From 2008-11-23 22:09:07 -------
Более плотное вычитывание кода драйверов USB-устройств в NUT 2.2.2 привело
исправлению некоторого количества утечек файловых дескрипторов в libusb
(0.9.4-alt2.0).

Код hidups-usb в nut написан просто отвратительно с точки зрения работы со
сторонними ресурсами. Типичный подход: создать ресурс USB (usb_open()), при
обнаружении каких-либо ошибок работы с ним просто обнулить внутренний указатель
на устройство и вызвать пересоединение к устройству. В результате старый
указатель на ресурс USB "подвисает" неиспользуемым, выполняется повторное
сканирование шины, распределяются новые ресурсы, теряются файловые дескрипторы
и течет память.

Я поправил немного код hidups-usb так, что память не течет и файловые
дескрипторы не теряются, однако по-прежнему вся эта система не работает, если
вдруг что-то происходит с usb-устройством (например, система автоматически
включила режим сохранения энергии). Повторное присоединение к устройству не
проходит, буду смотреть дальше.

Со старым кодом в newhidups все еще хуже... В 2.2.2 он уже совсем не
используется (код драйвера присутствует, но содержит вызовы функций, которые
уже отсутствуют в инфраструктуре NUT 2.2.2). Написан он в том же стиле и просто
игнорирует управление ресурсами в USB.

Примитивный патч, который исправляет элементарные ошибки и позволяет работать
hidups-usb до "сбоя" устройства, прилагается.
------- Comment #4 From 2008-11-23 22:09:58 -------
Created an attachment (id=3085) [details]
Первая версия исправления hidups-usb
------- Comment #5 From 2009-09-18 01:07:22 -------
Пакет nut ищет мейнтейнера.
------- Comment #6 From 2009-10-29 09:50:54 -------
Какие-то наработки по исправлению помимо уже представленного есть у
кого-нибудь?
------- Comment #7 From 2010-12-29 13:18:35 -------
Пакет сборки amike@ залил в сизиф всё-таки я.
------- Comment #8 From 2012-04-07 15:18:43 -------
УМВР на 2.6.3-alt1 (Powerware 9120 по USB).