LINUX.ORG.RU

Сообщения intelfx

 

rwsem, только не семафор

Доброго времени суток.

В ядре Linux есть такой замечательный синхронизационный примитив, как rwsem (семафор читателей-писателей). Поскольку это семафор, количество операций down() и up() должно быть сбалансировано, т. е. up() нужно сделать столько раз, сколько было сделано down().

Вопрос: как «обойти» требование сбалансированности? Я хочу, чтобы любой поток имел возможность единовременно разлочить семафор. Дело в том, что счётчик семафора у меня уже есть (количество зарезервированных блоков в ФС), а от rwsem мне нужна только обёртка над счётчиком.

В голову приходит разве что потрясающе грязный вариант вида while (rwsem_is_locked(&foo)) up_read(&foo);.

Или же, если счётчик уже есть, можно обойтись другим примитивом вместо rwsem?

 , , ,

intelfx
()

Модуль nvidia (и nvidia-uvm) самопроизвольно загружается после выхода из suspend

Собственно, $subj. Конфигурация:

  • Optimus (HD3000 + GT540M)
  • Arch current
  • bumblebee 3.2.1
  • bbswitch 0.8
  • nvidia 340.24 (но началось раньше, на 337.25)
  • linux 3.15

Проблема в том, что модуль nvidia, подгружаясь, включает дискретную видеокарту и она начинает жрать+греться. Добавлять оба модуля в blacklist пробовал (модуль nvidia там по умолчанию) — всё равно подгружается при возобновлении.

 , , ,

intelfx
()

Key Signing Party — кто-нибудь хочет поучаствовать?

Для тех, кто не знает, что это: The Keysigning Party HOWTO. В двух словах — мероприятие, на котором люди обмениваются своими публичными ключами PGP, с верификацией личности каждого участника. Так строится т. н. сеть доверия (на самом деле, граф доверия).

Я вот давно уже хочу поучаствовать в такой штуке, чтобы хоть как-то закрепиться в этом самом графе. Отсюда два вопроса:

  • Хочет ли кто-нибудь ещё?
  • Есть ли здесь хотя бы один участник достаточно большой компоненты связности, согласный тоже прийти и всех подписать?

Выдохнул.

P. S.: давно — это ещё с Fedora 19 Release Party, но тогда как-то всё заглохло (key signing party). Или не заглохло, просто я об этом не знаю ( alpha?)

 , ,

intelfx
()

harfbuzz и freetype2: кольцевая зависимость, prelink не работает

Сабж.

$ ldd /lib/libfreetype.so | grep harf
        libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x00007f3a53466000)
$ ldd /lib/libharfbuzz.so | grep free
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00007f4e7906b000)

Всё бы ничего, но prelink сходит с ума и отказывается прелинковать половину бинарников, потому что они все зависят от freetype:

$ sudo prelink -avmR |& grep -E 'harf|free'
prelink: /usr/lib/libharfbuzz.so.0.929.0 has a dependency cycle
prelink: /usr/lib32/libharfbuzz.so.0.928.0 has a dependency cycle
prelink: Could not prelink /usr/lib/libQtGui.so.4 because its dependency /usr/lib/libfreetype.so.6 could not be prelinked

Что делать? Вариант «забыть про prelink» рассматривается, если кто-нибудь расскажет, почему он не нужен. (Хинт: машинка — ARMv7 800MHz, производительность всё же важна.)

 , ,

intelfx
()

IM и конференции done right

Что вы посоветуете заместо Skype и вконтакта?

Требования:

  • передача файлов
  • (желательно) видео- и аудиоконференции
  • мелочи вроде:
    • нормально выглядящего, не вырвиглазного интерфейса (или хотя бы существования невырвиглазной темы)
    • аватарок
    • уведомлений о прочтении и наборе, etc
  • OTR и прочее шифрование — строго не в ущерб

Хотелось бы ещё на KDE/Qt, или Gtk без привязки к DE.

 

intelfx
()

USB LED контроллер/драйвер

Добрый вечер.

Не подскажет ли кто-нибудь, где купить / как сделать драйвер 3.3-вольтового светодиода с USB-интерфейсом, чтобы с точки зрения ядра Linux он выглядел как LED-устройство с кастомным именем (/sys/class/leds/)?

Убервысокие токи не нужны, это будет подсветка клавиатуры.

 , ,

intelfx
()

Чтение звукового файла с «правильной» скоростью

Добрый вечер.

Мне нужно сэмулировать в рамках одной программы весь аудиостек: считать звуковой файл (для определённости несжатый, т. е. WAV PCM или как оно там) и «воспроизвести» с корректной скоростью, т. е. 1 сэмпл в 1/F секунд, где F — частота дискретизации. Под воспроизведением понимается вызов некоторой функции на каждый сэмпл, т. е. это не воспроизведение через звуковую карту.

Если считать, что «воспроизведение» одного сэмпла уже написано, как реализовать считывание и нужные задержки между сэмплами? Временем обработки одного сэмпла, насколько понимаю, пренебречь нельзя, т. е. sleep(1/f) не сработает.

(На самом деле не воспроизвести, а моргать лампочками через USB-реле.)

 

intelfx
()

Собрать u-boot (ARM) тулчейном с hard float

...возможно ли? U-Boot 2013.10, архитектура — armv7.

Если собирать с USE_PRIVATE_LIBGCC=yes:

drivers/mmc/libmmc.o: In function `mmc_berase':
/home/operator/u-boot/drivers/mmc/mmc_write.c:76: undefined reference to `__aeabi_uldivmod'
/home/operator/u-boot/drivers/mmc/mmc_write.c:76: undefined reference to `__aeabi_uldivmod'
ld.bfd: error: required section '.rel.plt' not found in the linker script
ld.bfd: final link failed: Неверная операция

Если без этого ключа:

ld.bfd: ошибка: /usr/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.2/libgcc.a(bpabi.o) использует регистровые аргументы VFP, а u-boot не использует
ld.bfd: failed to merge target specific data of file /usr/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.2/libgcc.a(bpabi.o)
ld.bfd: ошибка: /usr/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.2/libgcc.a(_divdi3.o) использует регистровые аргументы VFP, а u-boot не использует
ld.bfd: failed to merge target specific data of file /usr/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.2/libgcc.a(_divdi3.o)
ld.bfd: ошибка: /usr/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.2/libgcc.a(_udivdi3.o) использует регистровые аргументы VFP, а u-boot не использует
ld.bfd: failed to merge target specific data of file /usr/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.2/libgcc.a(_udivdi3.o)

Эта сборка велась прямо на целевой машине (ArchLinuxARM, gcc 4.8.2).
Если собирать на x86 кросс-тулчейном от Linaro (2013.08, gcc 4.8.2) — то же самое.
Если взять crosstool-ng и собрать не-hardfloat тулчейн с последними версиями всего, а потом собрать им — полученный бинарник работать не будет.

ЧЯДНТ?

 , ,

intelfx
()

Управление мощной нагрузкой по USB (реле?)

Возникла необходимость при помощи компьютера коммутировать четыре канала нагрузки с напряжением ~30В и током до 1A (частота изменения управляющего сигнала <= 10 Гц). Я бы приобрёл готовый модуль USB-реле, но дорого (нужно для школьного выпускного, а тратить 2K на это дело нет ни возможности, ни желания). Есть идеи с BOM <= 1K?

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

 , ,

intelfx
()

Посоветуйте ARM-машинку для файлопомойки/торрентокачалки/медиацентра

Очередной посоветуй-тред.

Preamble:
Сейчас имеется CuBox, но поддержка апстримом всех нетривиальных функций (GPU, VPU, HDMI, звук) либо отсутствует, либо зачаточна, а поставить кривоблоб от Marvell у меня не получилось.

Отсюда — посоветуйте какую-нибудь другую машинку. Задачи:

  • файлокачалка
  • медиацентр

Требования к железу:

  • ARMv7, NEON, etc + аппаратный медиадекодер (VPU)
  • HDMI или что-нибудь, приводимое к HDMI
  • звук через S/PDIF (оптика, коаксиальный — нет разницы)
  • eSATA или USB 3
  • Гигабитный Ethernet
  • опционально — IR-приёмник
  • опционально — cpufreq, cpuidle и прочее энергосбережение

И самое главное — чтобы это всё поддерживалось апстримом линукса или имело безгеморройные блобы (как у nvidia), которые можно завести на апстриме линукса.

Вариант «подождать N месяцев, пока запилят для CuBox-а» рассматривается как запасной.

 , ,

intelfx
()

Списко- или вектороподобная структура данных в ядре

Добрый день.

Речь идёт о коде в ядре. Мне нужна структура данных для хранения массива пар целых чисел (8 или 16 байт на элемент). Требования такие:

  • нужно добавлять элементы
  • нужно сравнительно быстро объединять две таких структуры
  • нужно уметь сортировать элементы — можно при добавлении, можно отдельно после добавления всех элементов

Мне приходит в голову разве что связный список с выделением памяти через kmem_cache.

 ,

intelfx
()

systemd: шаблонные юниты с двумя параметрами

Собственно, возможен ли сабж?

Чуть поясню задачу. У меня десктопная сессия управляется через systemd --user. Есть юнит graphical@.target, который в качестве параметра принимает иксовую $DISPLAY. У него в .wants лежат все юниты, которые я хочу запускать вместе с сессией:

$ ls -1 graphical@.target.wants/
akonadi@.service
baloo@.service
bluedevil@.service
compton@.service
dropbox@.service
kdeinit@.service
klipper@.service
tmux@.service
xbindkeys-user@.service

(У этих юнитов не указан параметр; это означает, что они его «наследуют» от graphical@.target, т. е. graphical@:0.target запустит akonadi@:0.service.)

Я хочу написать юнит, который будет посредством длинного dbus-вызова загружать KDE-шный модуль с указанным именем (/usr/bin/dbus-send --session --type=method_call --dest org.kde.kded /kded org.kde.kded.loadModule string:$SERVICE).
Очевидно, что это будет юнит, параметризованный по имени модуля, но ему нужен ещё и номер дисплея, причём унаследованный от graphical@.target.

Есть идеи? sudo cast plm, т. к. видел у тебя на гитхабе коллекцию юнитов...

 ,

intelfx
()

kpartsplugin для Chromium/Chrome (PPAPI)

Есть такая вещь, как KParts Plugin. Это NPAPI-совместимый (т. е. файрфокс-совместимый) плагин, который позволяет встраивать некоторые KDE'шные программы прямо в браузер и с их помощью открывать соответствующие типы файлов.

Так вот. Поскольку хром с недавнего времени (конкретно с момента перехода на Aura) окончательно выпилил у себя поддержку NPAPI, спрашиваю у хайвмайнда ЛОРа: есть ли что-то подобное для PPAPI?

 , ,

intelfx
()

Какой линукс вы бы поставили на такое железо: Vol. 2

Тут вот люди спрашивают, какой дистрибутив ставить на SNB.

А я спрошу, какое DE/WM/оболочку лучше поставить на Athlon XP (тактовая — 1100 MHz) с 512 MiB оперативной памяти.
Компьютер общественный, поэтому требуется интуитивно понятная среда (а не awesome). Да, речь не о дистрибутиве.

Юзкейс: общественный компьютер в школьной читалке-боталке.

intelfx
()

...and high iowait times (тормоза при копировании на медленное устройство)

Существует такая проблема. Например, я копирую файл с локального диска (или делаю cat /dev/urandom) в расшаренную по NFS директорию, скорость обмена данными с которой — 1 MiB/s. Или на флешку, скорость записи на которую — 10 MiB/s.

Так вот, первый ~гигабайт данных записывается со скоростью, явно превышающей пропускную способность канала — около 100 MiB/s (у меня SSD). Дальше скорость падает до нуля, одно ядро оказывается 100% занято io-wait, все процессы поочерёдно падают в состояние D и системе приходит каюк примерно до момента окончания записи файла (если соединение не рвётся раньше).

Что делать, куда копать? Симптомы похожи на 12309, только хуже и это не оно.

  • 3.13.1-pf
  • BFQ
  • vm.dirty_ratio = 60
    vm.dirty_background_ratio = 10
    

 , ,

intelfx
()

x86: почему CISC-команды медленнее?

Неоднократно слышал, что:

  • leave медленнее, чем
    mov esp, ebp
    pop ebp
    
  • enter N, 0 медленнее, чем
    push ebp
    mov ebp, esp
    sub esp, N
    
  • stosd медленнее, чем
    mov [es:edi], eax
    add edi, 4
    
  • repne scasb медленнее, чем наивный strchr()

и так далее.

Вопрос: почему? Не похрен ли, одна команда развернётся в 10 микроопераций или четыре команды развернутся в столько же? В первом случае даже нагрузка на декодер меньше.

 ,

intelfx
()

Upstart v. systemd (v. everything else), третий раунд

Let's do it once again.

https://lists.debian.org/debian-ctte/2014/02/msg00281.html

Bdale Garbee, председатель технического комитета, не согласился с предложением Ian Jackson'а подождать ещё недельку, чтобы все смогли высказать свои предложения, и запустил третье по счёту голосование.
Стоит отметить, что на этот раз голосование не решает вопрос о возможности пакетов требовать конкретные init-системы.

И Bdale, и Russ Albery уже проголосовали, показав одинаковые предпочтения (в порядке убывания):

  • systemd
  • upstart
  • openrc
  • sysvinit
  • дальнейшее обсуждение

 , ,

intelfx
()

Upstart v. systemd, второй раунд

Господа, second act in the theatre of madness.

https://lists.debian.org/debian-ctte/2014/02/msg00091.html

Для Ъ: технический комитет Debian опять голосует. Steve Langasek уже успел выразить недовольство внезапным началом голосования.
Забавно, что объявил повторное голосование Ian Jackson, ранее выдвигавший по первому голосованию точно такие же претензии по поводу неожиданного его начала.

 , ,

intelfx
()

Как корректно убить lightdm?

Есть LightDM с кастомным скриптом session-wrapper. Это который Xsession.
В моём случае он делает некоторые подготовительные операции, запускает DE/WM, ждёт его завершения и делает ещё кое-что. Последняя часть ещё и повешена trap'ом на SIGTERM/SIGHUP. Выглядит это так:

#!/bin/bash

function prepare_session() {
...
}

function stop_session() {
...
}

prepare_session
trap stop_session EXIT TERM HUP

"$HOME/.xsession"

Соответственно, stop_session выполнится даже в том случае, если LightDM будет убит целиком и полностью и со всеми потомками.
Однако, хочется сделать так, чтобы stop_session выполнялся при живом X-сервере. А именно:

  • убить Xsession (и всех его потомков; это не важно)
  • подождать завершения
  • убить X-сервер и LightDM

Вопрос - как это сделать?

 

intelfx
()

Гонка между systemd-vconsole-setup и загрузкой модуля видеоадаптера (i915)

Как известно, при регистрации нового драйвера фреймбуфера сбрасываются все прежние настройки фреймбуфер-консоли, в частности, загруженный шрифт и прочее. Следовательно, возникает необходимость запускать systemd-vconsole-setup.service строго после загрузки модуля i915, который заменяет VESA-фреймбуфер на собственный.

Вопрос - как это сделать? «Из коробки» мы имеем гонку между udev и указанным сервисом.

Что пробовал:

  • Wants=systemd-udev-settle.service
    After=systemd-udev-settle.service
    
    Недостатки: медленный запуск и костыльно, т. к. settle не рекомендуется к использованию.
  • After=systemd-modules-load.service
    
    И «/etc/modules-load.d/i915.conf» с содержимым «i915».
    Недостатки: у меня modules-load достаточно много всего подгружает, и в такой ситуации это опять же тормозит запуск системы.

Тег «fedora» здесь потому, что у Fedora вроде бы pure systemd boot, и наверняка эта проблема кому-нибудь уже встретилась.

 , , ,

intelfx
()

RSS подписка на новые темы