Как стать автором
Обновить

Комментарии 12

Спасибо за разбор.


1.


Если предположить, что TLAB'ы заполняются ± равномерно (в реальных приложениях это может быть не так), то в среднем оставшиеся TLAB'ы будут заполнены примерно наполовину.

Почему на половину? Вся последующая тема с 50% заполнением тоже непонятна.


  1. Список который начинается с "Возьмем это на заметку и вернемся обратно к процессу аллокации" непонятно откуда берется, возможно пропущен абзац или кусок кода?


  2. Зачем нужна явная prefetch-инструкция, CPU же делает это автоматически?
Почему на половину?
Если принять заполненность тлаба за случайную величину, принимающую значения из диапазона [0; 1] ([0%; 100%]), то, при ее равномерном распределении, среднее значение будет 0.5 или 50%

А что если поток (и тлаб для него) создан в между сборками, когда другие тлабы уже как-то заполнены? Это учитывается?

В изначальной гипотезе это никак не учитывается, это самое простое приближение, которым можно воспользоваться: все TLAB заполняются равномерно.


В реализации это используется с помощью учитывания allocation fraction.

Плохо сформулировал.


В реализации это учитывается при помощи allocation fraction: если поток был создан между сборками и не успел много нааллоцировать, то он получит маленький TLAB как раз из-за того что его allocation fraction будет небольшим.

Про равномерность ответил в соседнем треде.


  1. Не пропущен, там просто опущены неинтересные детали про выбор "идти в быструю ветку или в медленную" и получился такой некрасивый переход, постараюсь как-нибудь поправить.


  2. Автоматический префетч срабатывает только когда идут последовательные обращения к памяти с фиксированной дельтой, а тут паттерн "аллокация -> произвольные действия -> следующая аллокация" и нужен префетч памяти под следующую аллокацию. Аналогичным образом можно было бы префетчить, например, итерацию по linked-list'у

В моих тестах на оптимальную ширину заголовка сегмента ChronicleMap впечатление, что префетч работает вообще всегда, даже при одиночном обращении. @Contended с отступами по 128 байт в обе стороны про то же.

Эх, когда же люди перестанут отождествлять JVM и HotSpot?.. ;)

Судя по посту автор обсмотрелся видосов Шипилёши. Вот когда твои видосы будут такие же популярные, тогда и перестанут ;-)

Скорее обчитался gvsmirnov :)

Делай доклад на конфу. Кишочки норм.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации