Re[23]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: Sinclair Россия https://github.com/evilguest/
Дата: 30.05.25 06:35
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>А касательно именно false-sharing, то я за более чем 15 лет опыта всего несколько раз столкнулся с ним — всё ооочень сильно зависит от того, что пишешь. Абсолютное большинство здесь присутствующих мало и редко пишет мидлвари, библиотеки и фрэймворки, соответственно и false-sharing либо не видели вообще, либо видели крайне редко. И я даже сомневаюсь, что тут есть люди, которые такие проблемы умеют выявлять — профилирование такое в большинстве случаев не покажет: профиляторы не показывают такие проблема, и к тому же вмешиваются в работу софтины. Более того, в большинстве месть где возможен false-sharing теоретически, практически его эффект минимален из-за того, что в ПРАКТИЧЕСКОМ коде часто встречается использование (даже неявное) объектов синхронизациии и прочих объектов ядра (файлы, пайпы, мэйлслоты и прочее), либо используются объекты которые приводят к сисколлам, со всеми вытекающими. Насколько мне известно, большие вычисления и системный софт тут мало кто пишет...

Ну так и непонятно, в чём именно плач Ярославны. Во всём Disruptor есть ровно два места, где разработчикам пришлось пошаманить с паддингом для предотвращения false sharing.
Прикладному разработчику, который пишет свою систему с использованием Disruptor, вообще не нужно об этом думать.
То есть вся идея улучшений — это какой-то магией помочь системным разработчикам писать их 0.00005% кода. В надежде на то, что эта магия внезапно поднимет общую производительность в 30-200 раз.
Прикол-то в том, что если изначально идти по пути "давайте просто будем складывать объекты в однопоточную queue, а доступ к самой очереди и к данным лежащих в ней объектов рулить при помощи примитивов синхронизации", то никакие выравнивания не помогут. И никакие аппаратные улучшения тоже не помогут. Этот подход порочен изначально. Примерно как пытаться делать HTTP-сервер на честных аппаратных потоках, создаваемых на каждый сокет.

И отдельно хочется отметить, что унизительный код Disruptor с выравниваниями связан с особенностями именно Java — дотнет предоставляет гораздо более прямые и лаконичные возможности по управлению выравниванием, см. https://github.com/disruptor-net/Disruptor-net/blob/master/src/Disruptor/Sequence.cs
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.