1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Идея CPU Affinity

Тема в разделе "Запросы на разработку плагинов", создана пользователем Reality_SC, 13 янв 2016.

  1. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    Код:
    [23:40:51] [Server thread/INFO]: [MainThreadAffinity] Enabling MainThreadAffinity v1.0
    [23:40:51] [Server thread/INFO]: [MainThreadAffinity] Main server thread is not locked to cpu 2
    Debian 8 x86_64
    java -jar MainThreadAffinity.jar 2 написал перед запуском сервера. В конфиге указал cpuId: 2
    Ну а так вроде работает java jar .... Вся нагрузка идет токо на 3 ядро(По htop), а так указывал 2.
     
  2. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Потому что с 0 расчет. А топ считает с 1.
    Ещё можно поиграться с /dev/cpu_dma_latency чтобы отключить intel C states.
    А вот и первые проблемы. Дело в том что affinity наследуется всеми тредами созданными из главного потока. А так как главный поток совсем главный, то большинство потоков внутри самой JVM тоже наследуют affinity из-за чего получается что вся java выполняется на ожном ядре. В итоге сейчас наоборот получается только просадка в производительности. Надо как-то цепляться с созданию потоков и выставлять им нужную маску, но проблема в том что это не очнеь быстрое занятие. Так же в принципе помогает установку affinity не на старте сервера, а на пару секунд позже, но это костыль.
    Переделал плагин, теперь он выставляет Affinity через 30 секунд после старта, теперь всякие GC треды, и тредпулы которые стартуют сам сервер или другие плагины на старте выполняются на других ядрах. Остались только проблемы с потоками которые стартуют плагины не на запуске, а во время выполнения каких-нибудь эвентов, а также с шедулером, посколько ля асинхронных тасков там используется CachedThreadPool, то есть вероятность поток создастся при добавлении таска, а соответственно произойдёт это в главном оптоке и affinity отнаследуется.
     
    Последнее редактирование: 17 янв 2016
  3. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Менять время от времени, хотя да, правильнее как-то перехватить Thread.start
     
  4. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Вернулся к этой теме, на linux есть возможность получить нотификейшен о старте потока, но весь код приходится писать на сях, так что от плагина остался только толкальщик который толкает jni. В данный момент я на отдыхе в Сочи, так что доделать до конца смогу только через недельку.
     

Поделиться этой страницей