суббота, 17 декабря 2011 г.

AffinityMask

а вот например windows7 (и соотв-но w2008r2) могут поддерживать более 64 камней
А как известно ф-ция SetThreadAffinityMask в качестве маски имеет аргумент типа DWORD_PTR, что позволяет задать маску ровно для 64 камней. Если же на машине больше - то предлагают использовать всякие ритуальные пляски с бубном типа SetThreadIdealProcessorEx и заданием т.н. processor group.
Предположим (потому что у меня банально нету такого железа) что мы запущены на машине, где больше 64 камней. Количество камней я как-нть из kernel-mode узнать могу (KeNumberProcessors например). Соотв-но дальше я хочу свой поток подключить к каждому имеющемуся камню и достать всякое из KPRCB например. Ясно что я должен использовать кроме subj еще и processor group. А вот дальше непонятно - а сколько таких групп в системе ? А сколько в каждой камней (а системы бывают например на 96 камней - не кратные 64) ? А как можно провернуть такой трюк в kernel mode ?
Кто-нть имел подобный опыт ?

Update: вдумчивое разглядывание msdn подсказывает, что нужные ф-ции называются примерно так:
Наверняка все реализовано через какие-нть плохо документированные Information Classes NtQuerySystemInformation

4 комментария:

  1. ты невнимателен, "Сервер объединяет ДВА четырехпроцессорных узла", т.е. две мамки в одной стойке. Таким образом на каждой матери не более 48 ядер. По сути 2 мамы = 2 разных компа, у них разная память, пусть при этом они выполняют одинаковый код. Зачем одному компу "достать всякое из KPRCB" чужой машины?

    ОтветитьУдалить
  2. существуют также более другие машины: http://www.sgi.com/products/servers/uv/?/

    это несомненно ценное замечание не опровергает того факта, что под w7 KTHREAD содержит атрибуты для affinity в структурах типа GROUP_AFFINITY, где кроме маски есть также и Group: http://msdn.moonsols.com/win7rtm_x86/KTHREAD.html

    ОтветитьУдалить
  3. Имхо здесь надо сперва разобраться каким образом вообще вынь работает в кластере. Мех-зм IPI работает в пределах одной мамы. Как организовано взаимодействие между камнями с разных мам - для меня загадка. Можно глянуть сурсы линя, мну лениво ))

    ОтветитьУдалить
  4. про узлы - это уже NUMA, почитайте оттуда. Там же и про аффинити дополнительно написано...
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa363804(v=vs.85).aspx

    ОтветитьУдалить