Bug 17955

Summary: nut works bad with current libusb
Product: Sisyphus Reporter: Vladimir V. Kamarzin <vvk>
Component: nutAssignee: Michael Shigorin <mike>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: ab, amike, amike, ldv, mike
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 17727    
Attachments:
Description Flags
Первая версия исправления hidups-usb none

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

ab в курсе, обещал починить, ждём. Бага носит информационно-отслеживательный характер.
Comment 1 Alexander Bokovoy 2008-11-22 08:22:55 MSK
Проверено с 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 Mike 2008-11-22 22:03:42 MSK
(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 Alexander Bokovoy 2008-11-23 22:09:07 MSK
Более плотное вычитывание кода драйверов 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 Alexander Bokovoy 2008-11-23 22:09:58 MSK
Created attachment 3085 [details]
Первая версия исправления hidups-usb
Comment 5 Dmitry V. Levin 2009-09-18 01:07:22 MSD
Пакет nut ищет мейнтейнера.
Comment 6 Vladimir V. Kamarzin 2009-10-29 09:50:54 MSK
Какие-то наработки по исправлению помимо уже представленного есть у кого-нибудь?
Comment 7 Michael Shigorin 2010-12-29 13:18:35 MSK
Пакет сборки amike@ залил в сизиф всё-таки я.
Comment 8 Michael Shigorin 2012-04-07 15:18:43 MSK
УМВР на 2.6.3-alt1 (Powerware 9120 по USB).