Долгая загрузка системы после установки pulseaudio.

kurych
Проблема запуска юнита обычно не в самом systemd, а в сервисе, который запускается из этого юнита. Вот и надо попытаться запустить этот сервис просто руками, из консоли. Если он вручную не запускается, то никакой systemd не заставит его работать. Все просто...
Может я плохо объяснил ........ я запускаю из юнита сам сервис через strace ......... и намного больше информации - видно куда лезет и сколько времени на что уходит ...
PS ......... возможно это и не правильно ...... но ничего другого до сих пор не находил ...... это обсуждение у нас впервые .....
Ошибки не исчезают с опытом - они просто умнеют
indeviral
вогнал pulse в debug походу дело в наличии или отсутствии alsa-mixer.с alsa-util.c, соответственно alsa-lib и alsa-utils, а так же количестве и типе самих звуковых устройств.
Заметил у себя - время запуска сервиса не постоянно и меняется в интервале 1,5 — 4с (например, сегодняшние данные — 2.955s, 1.507s) …..... решил проверить, почему меняется и выявил (использовал strace) — например, для случая загрузки с временем 2,5с ….... 2с уходит на два timeout в системном вызове ppoll (по 1с два раза — timeout установлен в 1с)
UPD …. ppoll() позволяет приложению безопасно ждать, пока файловый дескриптор не станет готов или пока не будет получен сигнал, т. е. завершается если истекло установленное время ожидания и нет готовых файловых дескрипторов
1.003153 <... ppoll resumed> ) = 0 (Timeout)
где ppoll …. ppoll([{fd=17, events=POLLIN}, {fd=22, events=POLLIN|POLLERR|POLLNVAL}, {fd=18, events=POLLIN}, {fd=21, events=POLLOUT|POLLERR|POLLNVAL}], 4, {tv_sec=1, tv_nsec=978607000}, NULL, 8 <unfinished ...>

0.970789 <... ppoll resumed> ) = 0 (Timeout)
где ppoll …. ppoll([{fd=24, events=POLLIN}, {fd=27, events=POLLIN|POLLERR|POLLNVAL}, {fd=25, events=POLLIN}, {fd=28, events=POLLIN|POLLERR|POLLNVAL}], 4, {tv_sec=1, tv_nsec=979999000}, NULL, 8 <unfinished ...>
PS … интересно отметить статистику по системному вызову open
- всего вызовов — 872
- из них пустых (лезет в несуществующие файлы) — 238
- наибольшее обращение к файлу /dev/snd/controlC0 — 365
И что интересно, этот файл как раз и являлся причиной timeout (система не дождалась данного дескриптора)

PSS ... это я к тому, что достаточно 10 timeout и получим 10с задержки ...
Ошибки не исчезают с опытом - они просто умнеют
vasek
- всего вызовов — 872
- из них пустых (лезет в несуществующие файлы) — 238
- наибольшее обращение к файлу /dev/snd/controlC0 — 365
И что интересно, этот файл как раз и являлся причиной timeout (система не дождалась данного дескриптора)
Причиной этого мракобессия скорее всего является вот это /etc/pulse/default.pa
Мутноватая система загрузки модулей... Надо попробовать поубирать лишнее, должно помочь.

p.s. особенно понравился вот этот модуль
### Automatically augment property information from .desktop files
### stored in /usr/share/application
load-module module-augment-properties

p.p.s ничего это не даёт, оставил только два модуля время уменьшилось на ~1-1.5 сек
Ошибки в тексте-неповторимый стиль автора©
indeviral
Надо попробовать поубирать лишнее, должно помочь.
ещё два дня назад поотключал всё, без чего пульс нормально запускается и выводит звук
я бы не сказал, что что-то сильно изменилось
1.263s pulseaudio.service

из всех оставил только
load-module module-device-restore
load-module module-card-restore
load-module module-udev-detect
load-module module-native-protocol-unix
load-module module-gconf
load-module module-systemd-login
load-module module-position-event-sounds
load-module module-filter-heuristics
load-module module-filter-apply
load-module module-dbus-protocol

P.S> отключил вдобавок
load-module module-device-restore
load-module module-card-restore
load-module module-gconf

1.198s pulseaudio.service

В общем, всё это как мёртвому припарки! Пульс - вещь в себе, как и другое творение того же автора ;)
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
[pulseaudio] (alsa-lib)utils.c: could not open configuration file /usr/share/alsa/ucm/HDA Intel PCH/HDA Intel PCH.conf
[pulseaudio] (alsa-lib)parser.c: error: could not parse configuration for card HDA Intel PCH
[pulseaudio] (alsa-lib)main.c: error: failed to import HDA Intel PCH use case configuration -2
[pulseaudio] alsa-ucm.c: UCM not available for card HDA Intel PCH
Может надо не pulse а alsa ковырять)))
Ошибки в тексте-неповторимый стиль автора©
P.P.S>
поотключал вообще практически всё - оставил только то, без чего он работать вообще отказывается

load-module module-udev-detect
load-module module-native-protocol-unix
load-module module-systemd-login

1.188s pulseaudio.service

indeviral
Может надо не pulse а alsa ковырять)))

у меня ничего подобного нет

jctlb g pulseaudio
Мар 22 22:23:24 arch rtkit-daemon[593]: Successfully made thread 592 of process 592 (/usr/bin/pulseaudio) owned by '1000' high priority at nice level -11.
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
Запустил у себя с strace - ничего, подобного этому
vasek
1.003153 <... ppoll resumed> ) = 0 (Timeout)
где ppoll …. ppoll([{fd=17, events=POLLIN}, {fd=22, events=POLLIN|POLLERR|POLLNVAL}, {fd=18, events=POLLIN}, {fd=21, events=POLLOUT|POLLERR|POLLNVAL}], 4, {tv_sec=1, tv_nsec=978607000}, NULL, 8 <unfinished ...>

0.970789 <... ppoll resumed> ) = 0 (Timeout)
где ppoll …. ppoll([{fd=24, events=POLLIN}, {fd=27, events=POLLIN|POLLERR|POLLNVAL}, {fd=25, events=POLLIN}, {fd=28, events=POLLIN|POLLERR|POLLNVAL}], 4, {tv_sec=1, tv_nsec=979999000}, NULL, 8 <unfinished ...>
не обнаружил!
Ни одного вхождения ppoll

Вот весь выхлоп, если кому интересно

зато "No such file or directory" - аж 104 вхождения ((((
хрень какая-то...
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
хотя время заметно уменьшилось
537ms pulseaudio.service
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
Haron_Prime
Вот весь выхлоп, если кому интересно
Судя по строке
execve("/bin/pulseaudio", ["pulseaudio"], [/* 47 vars */]) = 0
и времени загрузки
Haron_Prime
хотя время заметно уменьшилось
537ms pulseaudio.service
Предположу, что загрузка сервиса была не совсем правильная ...
Ошибки не исчезают с опытом - они просто умнеют
Прошу не ругаться за писанину, но решил описать как я делал … пошел простым путем, не стал редактировать системные файлы … правильно это или нет, не знаю. Для того и пишу, чтобы узнать на этот счет мнение спецов по systemd, чтобы учесть замечания на будущее

На всякий случай делаем копию файла /usr/lib/systemd/user/pulseaudio.service лишнее ... так как способ я изменил
$ systemctl --user edit --full pulseaudio.service
строку …. ExecStart=/usr/bin/pulseaudio --daemonize=no … приводим к виду
ExecStart=/usr/bin/strace -fr -o /home/<USER...>/pulse_user.log /usr/bin/pulseaudio --daemonize=no
Вместо <USER...> ….. прописать свое ….
Сохраняемся …...... (имя файла не менять, сохранять так, как предложат)
$ sudo systemctl daemon-reload
В итоге всего этого появится файл /home/<USER>/.config/systemd/user/pulseaudio.service
Проверяем
$ systemctl --user cat pulseaudio.service | grep ExecStart .......... проверяем правильность изменения
(или обычным способом $ cat ~/.config/systemd/user/pulseaudio.service | grep ExecStart )
Если все нормально ….... reboot
В конце загрузки DE/WM будет наблюдаться задержка ~ 100с (это время задержки нужно будет отфильровать из лога) … причину этого не разбирал, но на анализ это не влияет ...
Смотрим/проверяем
$ systemctl status --user pulseaudio.service
Должно быть два процесса
599 /usr/bin/strace -fr -o /home/<USER...>/pulse_user.log /usr/bin/pulseaudio --daemonize=no
601 /usr/bin/pulseaudio --daemonize=no
$ systemd-analyze blame --user … в этом выводе pulseaudio.service не будет
И главное смотрим наличие самого лога ….... ~/pulse_user.log
Если все нормально, возвращаем все на место ...
$ rm /home/<UESER...>r/.config/systemd/user/pulseaudio.service
$ sudo systemctl daemon-reload
reboot …..... перегрузка может занять ~ 90с …. ждите …..
Смотрим/проверяем, что все в порядке ….
$ systemd-analyze blame --user …......
1.674s pulseaudio.service
$ systemctl --user status pulseaudio.service

АНАЛИЗ ~/pulse_user.log
Как уже писал из лога нужно отсечь (в самом конце) записи, обусловленные задержкой загрузки
Если посмотреть общее время загрузки сервиса, то увидим большое значение
$ cat ~/pulse_user.log | awk '{ SUM += $2 } END {print SUM}'
93.4936
Открываем лог и находим последний системный вызов open, точнее open("/run/user/1000/orcexec
PS ... по идее, вроде бы, можно/нужно отсечь и еще, т.е. подняться чуть чуть выше, .... но на анализ это не влияет ...
2862       0.000197 open("/run/user/1000/orcexec.WeMv5w", O_RDWR|O_CREAT|O_EXCL, 0600) = 31
2862       0.000261 umask(022)          = 066
2862       0.000081 unlink("/run/user/1000/orcexec.WeMv5w") = 0
2862       0.000092 ftruncate(31, 65536) = 0
2862       0.000075 mmap2(NULL, 65536, PROT_READ|PROT_EXEC, MAP_SHARED, 31, 0) = 0xb275d000
2862       0.000084 mmap2(NULL, 65536, PROT_READ|PROT_WRITE, MAP_SHARED, 31, 0) = 0xb274d000
2862       0.000072 close(31)           = 0
1-ый столбец — PID , 2-ой столбец — время вызова (с)
Все строки, что находятся после close (закрытие открытого дескриптора — у меня 31) удаляем ...
Сохраняем (для надежности можно сохранить как … , чтобы остался первичный лог)
Смотрим общее время
$ cat ~/pulse_user.log | awk '{ SUM += $2 } END {print SUM}'
2.36987
Ну а дальше ищем место, где вызов занимает много времени …
Для начала делаем предположение, что причина в timeout ….
Смотрим есть ли вызовы ppoll
$ cat ~/pulse_user.log | grep ppoll | wc -l
9
Имеются …..... аж 9 шт. …..... вот и посмотрим что там …
Конечно, лучше посмотреть каждый вызов ppoll и внимательнее ….... но мы спешим, а потому ищем по слову Timeout …...
$ cat ~/pulse_user.log | grep Timeout
2861 0.975852 <... ppoll resumed> ) = 0 (Timeout)
2862 0.996905 <... ppoll resumed> ) = 0 (Timeout)
…... вот они 2с …...
UPD … если внимательнее присмотреться к ppoll, то увидим, что данный вызов наблюдается при смене/переходе PID …......
Но это данные моего анализа ….... у кого то они будут другие …. как и сама причина ...

Как писал выше, нет 100% уверенности в правильности данного способа - нигде об этом не написано, все пришлось сочинять
Отработал способ несколько раз, исключив все ошибки ...... вроде сюрпризов быть не должно ...
PSS ... забыл отметить, что так можно определить только место задержки, а не не сам источник первопричины ...
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.