Bug 15356

Summary: futex() подвисает
Product: Sisyphus Reporter: Alexander Egorov <lunohod>
Component: kernel-image-std-defAssignee: Vitaly Chikunov <vt>
Status: CLOSED NOTABUG QA Contact: qa-sisyphus
Severity: critical    
Priority: P2 CC: combr, kernelbot, legion, php-coder, placeholder, redbaron, thresh, vt, vvk, wrar
Version: unstable   
Hardware: all   
OS: Linux   
URL: http://lkml.org/lkml/2005/3/21/364
Bug Depends on:    
Bug Blocks: 16292, 17641, 19391    

Description Alexander Egorov 2008-04-15 01:11:30 MSD
Старая проблема с зависанием futex(), в LKM есть рецепт, как воспроизвести этот
баг с xmms+jack. Ещё я заметил, что irssi в скрине стал зависать именно на
вызове futex().

У меня это происходит на 2.6.18-std-smp-alt12.
Steps to Reproduce:
см. ссылку!
Comment 1 Mikhail Gusarov 2008-06-13 13:00:39 MSD

    
Comment 2 Michail Yakushin 2008-07-11 13:25:48 MSD
Ещё актуально?
Comment 3 Alexey Gladkov 2008-07-11 13:36:56 MSD
Да.
Comment 4 Konstantin Pavlov 2008-10-24 12:26:00 MSD
Очень актуально, irssi виснет на футексе на 2.6.26-wks-pae.
Comment 5 Andrey Rahmatullin 2008-10-24 12:42:14 MSD
Фигасе.
Это от конфига зависит или как?
Comment 6 Vladimir V. Kamarzin 2008-10-24 12:55:28 MSD
4.1 бранч irssi виснет тоже, 2.6.25-std-ll-alt8.M41.1
Comment 7 Mike Lykov 2009-02-18 12:34:03 MSK
у меня виснет  k3b-1.0.4-alt3 на ядре 2.6.27-std-def-alt11

метод воспроизведения:
1. начать копировать двд-диск.
2. k3b создает образ, 50% выполнения (вторые 50% - это запись на чистый диск скопированного).
3. открывает лоток и тут же его закрывает (с полным диском). 
4. окно виснет без элементов управления (серый прямоугольник)

$ strace -p 8096 -fF -o k3b-strace.log
Process 8096 attached - interrupt to quit
^CProcess 8096 detached

в логе одна строка:
8096  futex(0x844670c, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...>
Comment 8 Anton Farygin 2009-03-31 12:53:03 MSD
Попал с psi на qt-4.5, виснет при выходе на futex на всех ядрах, включая в контейнере ovz 2.6.18.

Есть исправление для этой проблемы ? Я нашёл только один старый патч http://lkml.org/lkml/2005/3/21/386 и без продолжения этой темы.

Или, проблема всё-таки в userspace ?
Comment 9 Michail Yakushin 2009-03-31 16:03:04 MSD
futex нужен для того чтобы на нем виснуть. Возможно в userspace есть deadlock
Comment 10 Sir Raorn 2009-03-31 20:40:20 MSD
В таком количестве разных юзерспейсов один плавающий дедлок?
Comment 11 Michail Yakushin 2009-03-31 23:00:49 MSD
можно выявить последовательность вызовов futexа которое заканчивается повисанием?
Comment 12 Mike Lykov 2009-04-01 17:19:45 MSD
(В ответ на комментарий №11)
> можно выявить последовательность вызовов futexа которое заканчивается
> повисанием?

а что, k3b у вас работает и не виснет? 
(см. условия в комменте #7)
Comment 13 redbaron 2009-04-14 17:54:47 MSD
У одного пользователя стабильно раз в час-два виснет firefox, сидит на branch 5.0, firefox-3.0.8, ядро 2.6.27-std-def-alt15

strace -f -p <pid> показывает 4 зависших futex
Comment 14 redbaron 2009-04-15 14:39:13 MSD
(В ответ на комментарий №13)
> У одного пользователя стабильно раз в час-два виснет firefox, сидит на branch
> 5.0, firefox-3.0.8, ядро 2.6.27-std-def-alt15
> 
> strace -f -p <pid> показывает 4 зависших futex

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

[pid 17100] clock_gettime(CLOCK_REALTIME, {1239789551, 139823}) = 0
[pid 17100] futex(0xa77fefc4, FUTEX_WAIT_PRIVATE, 1, {0, 19914177}) = -1 ETIMEDOUT (Connection timed out)
[pid 17100] gettimeofday({1239789551, 20225}, NULL) = 0
[pid 17100] clock_gettime(CLOCK_REALTIME, {1239789551, 20340802}) = 0
[pid 17100] futex(0xa77fefc4, FUTEX_WAIT_PRIVATE, 1, {0, 19884198}) = -1 ETIMEDOUT (Connection timed out)
[pid 17100] gettimeofday({1239789551, 66618}, NULL) = 0
[pid 17100] clock_gettime(CLOCK_REALTIME, {1239789551, 66721114}) = 0
[pid 17100] futex(0xa77fefc4, FUTEX_WAIT_PRIVATE, 1, {0, 19896886}) = -1 ETIMEDOUT (Connection timed out)
[pid 17100] gettimeofday({1239789551, 86806}, NULL) = 0
[pid 17100] clock_gettime(CLOCK_REALTIME, {1239789551, 86849329}) = 0
[pid 17100] futex(0xa77fefc4, FUTEX_WAIT_PRIVATE, 1, {0, 19956671}) = -1 ETIMEDOUT (Connection timed out)
[pid 17100] gettimeofday({1239789551, 106945}, NULL) = 0
[pid 17100] clock_gettime(CLOCK_REALTIME, {1239789551, 106987948}) = 0
[pid 17100] futex(0xa77fefc4, FUTEX_WAIT_PRIVATE, 1, {0, 19957052}) = -1 ETIMEDOUT (Connection timed out)
[pid 17100] gettimeofday({1239789551, 127085}, NULL) = 0
[pid 17100] clock_gettime(CLOCK_REALTIME, {1239789551, 127128823}) = 0
[pid 17100] futex(0xa77fefc4, FUTEX_WAIT_PRIVATE, 1, {0, 19956177}) = -1 ETIMEDOUT (Connection timed out)
[pid 17100] gettimeofday({1239789551, 147298}, NULL) = 0
[pid 17100] clock_gettime(CLOCK_REALTIME, {1239789551, 147341509}) = 0
[pid 17100] futex(0xa77fefc4, FUTEX_WAIT_PRIVATE, 1, {0, 19956491}) = -1 ETIMEDOUT (Connection timed out)
[pid 17100] gettimeofday({1239789551, 167531}, NULL) = 0
Comment 15 Michail Yakushin 2010-07-02 10:16:51 MSD
Это проблема неправильного юзерспейса.