powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Поговорим о масштабировании
15 сообщений из 140, страница 6 из 6
Поговорим о масштабировании
    #37514963
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мьюеткс vs IPCiv_an_ruпропущено...
Да нечего там было изучать. Очень большая база с RDF и много-много юзеров, каждый из которых ковыряется read-only в одних и тех же "очень активных" данных плюс каких-то неповторяющихся "непопулярных". Под Linux, а у него есть противная особенность: просто вход и выход из мьютекса не стоят почти ничего, а вот начало ожидания на мьютексе стоит примерно столько же, сколько целая выборка строки по ключу. В случае кластера проблемы с мьютексами уменьшились настолько, что экономия перевесила даже IPC. Поскольку для такого эффекта нужно, чтобы сервер "лёг на полку", не справляясь с нагрузкой, на практике такой сценарий просто не должен встречаться.

(Потом появились деньги, и вместо одного ящика поставили 8. Как раз вовремя, потому что база подросла до 2.5e10 фактов, ну и юзеров ещё больше стало.)
А это только в Linux такая особенность, что ожидание занятых ресурсов через мьютекс съедает больше чем межпроцессный обмен по IPC?
Или в Unix(AIX)/Solaris/Windows также?Вообще-то в каждой операционке свой график цены "сработавшего" мьютекса от общего числа "достаточно активных" нитей, между которыми планировщику надо выбирать. Скажем, винда замечательно выбирает из двух нитей, потом резкий спад скорости, то есть всё умышленно оптимизировано для популярного случая нити активно рисующей и нити активно считающей. Linux начинает чуть хуже, зато более плавно деградирует. AIX показывает самый заметный overhead на паре нитей, но зато этот overhead --- практически константа, и ящик одинаково пофигистично держит любой тип нагрузки.

И да, хороший пакетный протокол IPC может обогнать ожидалки мьютексов, когда цена ожидания начинает становиться сравнимой с таймслайсом планировщика.
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37515040
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, вопрошающим не сказано, какие объекты синхронизации рассматриваются: внутриядерные или в разделяемой пользовательской памяти. Первые имеют преимущество при преобладающем ожидании, вторые - при редком ожидании.
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37515065
RXLКстати, вопрошающим не сказано, какие объекты синхронизации рассматриваются: внутриядерные или в разделяемой пользовательской памяти. Первые имеют преимущество при преобладающем ожидании, вторые - при редком ожидании.
iv_an_ru сказал, что ест "ожидание на мьютексах", что может быть при засыпании, а значит используя ядро ОС.
"в разделяемой пользовательской памяти" имеется ввиду собственная реализация объекта синхронищации многопоточности через атомарные операции с переменной в разделяемой памяти?


iv_an_ru , а IPC выгирывает у мьютекса в этом случае за счет группировки и пакетной обработки разделяемых ресурсов?
И да, почему допустим не использовали объекты синхронизации не использующие ядро и засыпание?
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37515179
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мьюеткс vs IPC"в разделяемой пользовательской памяти" имеется ввиду собственная реализация объекта синхронищации многопоточности через атомарные операции с переменной в разделяемой памяти?


Да. Только не согласен с характеристикой "собственная". Не мало таких штук используется в POSIX threads. Ожидание, как правило, выполняется не в цикле, а в yield().

iv_an_ru , а IPC выгирывает у мьютекса в этом случае за счет группировки и пакетной обработки разделяемых ресурсов?
И да, почему допустим не использовали объекты синхронизации не использующие ядро и засыпание?
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37515370
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RXLКстати, вопрошающим не сказано, какие объекты синхронизации рассматриваются: внутриядерные или в разделяемой пользовательской памяти. Первые имеют преимущество при преобладающем ожидании, вторые - при редком ожидании.Разнообразные, но рабочие лошадки под виндой --- WaitForSingleObject (...INFINITE) для длинных и EnterCriticalSection для коротких, под pthreads классический спин pthread_mutex_trylock плюс pthread_mutex_lock, а с самодельными фибрами в единственном потоке, сами понимаете, вообще ничего не надо, вот только годятся они теперь разве что для карманных устройств.
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37517155
iv_an_ruИ да, хороший пакетный протокол IPC может обогнать ожидалки мьютексов, когда цена ожидания начинает становиться сравнимой с таймслайсом планировщика.
Так а за счет чего все таки IPC обгоняет ожидалки мьютексов?
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37517177
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ожидалки мьютексовiv_an_ruИ да, хороший пакетный протокол IPC может обогнать ожидалки мьютексов, когда цена ожидания начинает становиться сравнимой с таймслайсом планировщика.
Так а за счет чего все таки IPC обгоняет ожидалки мьютексов?Если мьютекс начинает ждать на хотя бы каждой десятой записи, а в пакет влезает 10000 сообщений и он "стоит" максимум два сообщения, то...
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37557256
MutexSpinCount
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iv_an_ruожидалки мьютексовпропущено...

Так а за счет чего все таки IPC обгоняет ожидалки мьютексов?Если мьютекс начинает ждать на хотя бы каждой десятой записи, а в пакет влезает 10000 сообщений и он "стоит" максимум два сообщения, то...
А почему бы для высокой конкуренции не использовать MutexSpinCount?
Т.е. не становиться сразу в ожидании на мьютексе, а делать mutex.try_lock() некоторое число раз до того как заснуть. Причем с шагом равным минимальному числу таков необходимых для вашей выборки. Либо этому числу деленному на общее количество ядер, что бы в среднем поток на каждом ядре делал try() каждые N-тактов, которые необходимы для выборки.
Это конечно потребует синхронизации кэшей через барьеры памяти, но мьютекс их в любом случае потребует.
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37557304
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MutexSpinCountiv_an_ruпропущено...
Если мьютекс начинает ждать на хотя бы каждой десятой записи, а в пакет влезает 10000 сообщений и он "стоит" максимум два сообщения, то...А почему бы для высокой конкуренции не... делать mutex.try_lock() некоторое число раз до того как заснуть.А проблема выглядит так, как описано, уже с учётом этого трюка, без него было бы хуже.
В коде используются две разные "породы" мьютексов, для "коротких в среднем" и для "длинных в среднем" ожиданий, с разной политикой по поводу try_lock.
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37557433
MutexSpinCount
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iv_an_ruMutexSpinCountпропущено...
А почему бы для высокой конкуренции не... делать mutex.try_lock() некоторое число раз до того как заснуть.А проблема выглядит так, как описано, уже с учётом этого трюка, без него было бы хуже.
В коде используются две разные "породы" мьютексов, для "коротких в среднем" и для "длинных в среднем" ожиданий, с разной политикой по поводу try_lock.
Вообще странно потому, что при таком раскладе почти никто не будет становиться в ожидание на мьютексе. Если конечно разброс ожиданий не велик.
Если же разброс ожиданий велик, то SpinCount можно менять динамически. Поток захватывающий мьютекс может атомарно устанавливать(передавать) число тактов необходимое ему для разблокирования мьютекса и которое необходимо ждать другим до очередного try(). Это исключит лишнюю синхронизацию кэшей и постановку в ожидание для длинных блокировок.
Плюс используя shared_mutex и учитывая, что по вашим словам большой перевес в сторону читающих транзакций, только пишущие транзакции в _редчайших_ случаях будут виновниками ожиданий на мьютексе.
Неужели это все используется и не решает проблемы?
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37557654
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MutexSpinCount,

На самом деле трюков там куда больше, но пусть хотя бы самые интересные из них останутся маленьким секретом ;)
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37557979
MutexSpinCount
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iv_an_ruMutexSpinCount,

На самом деле трюков там куда больше, но пусть хотя бы самые интересные из них останутся маленьким секретом ;)
Ну интересней, а точнее эффективней чем LockFree контейнеры, WaitFree таблицы задач и версионность на разных уровнях ещё не придумали :)
Cliff Click с LockFree Hash Table, IBM c HazardPointers и прочие ;)

Просто странно, что даже со всеми интересными трюками были:
iv_an_ruБолее того, у нас были "бредовые" с точки зрения любого учебника случаи, когда "кластер" из 8 нод на одном восьмиядерном ящике и 1/8 памяти для каждой ноды обгонял просто "нормальную" базу на той же машине.
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37558044
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MutexSpinCount,

Ситуация, когда в скромных 128 гигов ОЗУ умещаются 13 миллиардов записей, причём с 2 полными и 3 неполными индексами --- она странная сама по себе :)
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37563825
MutexSpinCount
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iv_an_ruMutexSpinCount,

Ситуация, когда в скромных 128 гигов ОЗУ умещаются 13 миллиардов записей, причём с 2 полными и 3 неполными индексами --- она странная сама по себе :)
Получается 10 байт на запись. Это выглядит очень интересно по сравнению со средним оверхедом в 25 байт на запись в rows-oriented DBMS, к которой большинство тут популярных РСУБД относится. Но насколько я понимаю у вас column-oriented, а тут уже нужно сравнивать допустим с Exadata V2 Hybrid Columnar Compression, где column-oriented да ещё и с сжатием :)

А насчет ожиданий на мьютексах, восьмушки были быстрее по общему количеству запросов в секунду или именно латентность была меньше, и эти измерения проводились при нагрузке CPU близкой к 100%?
...
Рейтинг: 0 / 0
Поговорим о масштабировании
    #37563856
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MutexSpinCountА насчет ожиданий на мьютексах, восьмушки были быстрее по общему количеству запросов в секунду или именно латентность была меньше, и эти измерения проводились при нагрузке CPU близкой к 100%?По общему количеству запросов в секунду. На той версии, которая готовится сейчас к выпуску, одиночный процесс будет всё же быстрее на той конкретной нагрузке, но это было достигнуто ценой заморочек в других местах.
...
Рейтинг: 0 / 0
15 сообщений из 140, страница 6 из 6
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Поговорим о масштабировании
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]