Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Идея CPU Affinity

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

  1. GoodCoder

    GoodCoder Активный участник Пользователь

    Баллы:
    76
    Если у тебя всего один сервер на машине, то не имеет смысла. Бороться за ресурсы ему не с кем.
     
  2. Хостинг MineCraft
    <
  3. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Суть то в том чтобы отдать целое ядро под основной цикл. А другие на растерзание потоками из других плагинов.
     
  4. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    1-3, выбирай любой.
     
    Последнее редактирование: 17 янв 2016
  5. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Код:
    [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[DOUBLEPOST=1452999560,1452984198][/DOUBLEPOST]Ну а так вроде работает java jar .... Вся нагрузка идет токо на 3 ядро(По htop), а так указывал 2.
     
  6. Shevchik

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

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

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

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

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

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

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