[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Виртуализация



On Thu, Mar 28, 2013 at 09:40:41PM +0400, "Артём Н." wrote:
> 26.03.2013 18:42, Andrey Melnikoff пишет:
> > "Артём Н." <artiom14@yandex.ru> wrote:
> >> 19.03.2013 21:09, Andrey Melnikoff пишет:
> > 
> > [skipp]
> > 
> >> Но насчёт Zabbix, не соглашусь. Его 1998-го года пилят. И, вроде, далеко не
> >> самая плохая система.
> > Ага, его обмазывают затычками. После "скандалы-интриги-расследования"
> > (http://blog.zabbix.com/mysterious-zabbix-problems-how-we-debug-them/1023/)
> > тем кто в теме становиться совсем смешно.
> "You could say: localtime() is not a reentrant function. Right. But why does it
> hang ?
> Let???s look into libc source code. On our Debian GNU/Linux 6.0 machine the
> interesting part is in eglibc-2.11.3/time/localtime.c"
> 
> И что тут смешного? Со всеми бывает.
> Насколько я понял, вызванный в обработчике сигнала localtime(), ожидает снятия
> блокировки прерванного localtime().
> Типичный deadlock, связанный с устаревшей архитектурой libc, которая не была
> рассчитана на многопоточность, а разработчики предпочитали отделываться
> добавлением костылей.
> 
> Да, конечно тут есть и ошибка разработчиков Zabbix. Но что смешного, объясните?
> Я не в теме.

 Да, совершенно не в теме. :) Вы даже не прочли внимательно этот триллер,
 а ведь его авторы, хоть и чайники в сигналах, всё-таки отличают проблемы
 многопоточности и синхронизации от проблем обработки прерываний. Oни там
 пишут, что замена localtime() на localtime_r() не поможет, и это верно:
 в обработчике сигнала бесполезно ждать снятия блокировки, если блокировка
 наложена вне контекста прерывания. В тот контекст можно лишь вернуться,
 дождаться же невозможно.

 Что предлагают авторы в качестве лечения -- кому смешно, а кому грустно...
 Они героически придумывают как уменьшить вероятность дедлока, вместо того,
 чтобы устранить его вообще. Похоже, их не посетила мысль, что в обработчике
 недопустимо что-либо логгировать и приступать к сворачиванию работы -- ведь
 какая-то операция была прервана, сперва нужно её завершить. Иначе нет
 гарантии, что не будут повреждены какие-то недописанные данные. Попытка
 позвать логгер из обработчика может разнести всё к чёртовой матери, а может
 вызвать повисание... например, из-за неявного вызова того же localtime().
-- 
 Eugene Berdnikov


Reply to: