Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250

Распределение процессов по ядрам

26.10.2016, 10:19. Показов 7924. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть Windows 2012, на ней крутится PostgreSQL.+1с, 16ти ядерный сервер.
1с может работать с бд только в 1 потоке, но сеансов много, когда слежу за работой, во время 2-3х долгих обработок (по часу они могут длиться) То загрузка процессора идёт на разные ядра по 10% на каждое ядро, и частота процессора не поднимается выше 1.5Ггц, Когда же я самым загруженным процессам "postgre" принудительно, через диспетчер задач "задаю сходство" - и выделяю 1 ядро на каждый такой процесс, то, получив 1 ядро полностью в своё распоряжение - процесс загружает его на 100% и поднимает общую частоту процессора до 2.6Ггц.

Обработка, в этом случае, вместо часа выполняется минут 20.

Вопрос. Как мне автоматически всем 12-16 процессам postgre, которые база данных генерирует иногда новые, назначать по 1 ядру?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.10.2016, 10:19
Ответы с готовыми решениями:

Распределение потоков по ядрам
Всем привет. Возник вопрос, как сделать так чтобы 3 созданных мною потока выполнялись на одном ядре, мне нужно это чтобы при изменении...

Распределение нагрузки по ядрам
Всем привет! Проблема такая: WoT лагает на макисмальных настройках (и другие игры тоже) и грузит всего 1 ядро процессора из 4. Подскажите...

Распределение задачи по ядрам
Собственно есть большой файл (около 16 тысяч строк). Путем проверки лога было установлено, что проблема в сортировке. Сортировал пузырьком,...

13
 Аватар для vavun
10593 / 5556 / 865
Регистрация: 07.04.2013
Сообщений: 15,660
26.10.2016, 10:27
Только если так, средствами системы
Code
1
start "" /affinity 1 %PROG%
1
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250
26.10.2016, 10:32  [ТС]
vavun, Это я программу могу запустить отдельную, а постгре - сам запускает свои процессы, мне бы уже запущенными процессам расставить ядра. Ведь если я могу это делать правой кнопкой - значит теоретически это возможно и каким-либо скриптом?
0
 Аватар для vavun
10593 / 5556 / 865
Регистрация: 07.04.2013
Сообщений: 15,660
26.10.2016, 10:44
Можно через с помощью powershell вызывая его из bat

Windows Batch file
1
powershell "$Process = Get-Process postgre; $Process.ProcessorAffinity=1"
По идее это скинет все процессы с именем postgre на первое ядро, но вам, как я понял, надо равномерно это дело распределить.
Если хотите можно переехать в раздел powershell, ибо я в нем не силен
1
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250
26.10.2016, 11:17  [ТС]
vavun, да... наверно только через павершелл делается. можно туда темку кинуть?
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
26.10.2016, 13:13
texnix,
PowerShell
1
2
3
4
5
6
7
8
9
$i=0
$processes=Get-Process postgre
foreach($proc in $processes)
{
    [int32]$mask=[math]::pow(2,$i)
    $proc.ProcessorAffinity=$mask
    $i+=1
 
}
Один момент, если процессов будет больше чем ядер, то будет беда.
Ну можно подработать, там воткнуть условие.
0
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250
26.10.2016, 13:59  [ТС]
v_svitere,
Да, условие бы не помешало.
Как прописать на повершеле вот это:

Code
1
if $i>15 then break
?

Добавлено через 10 минут
А вот так прервётся:

Code
1
if $i>15 {continue}
?
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
26.10.2016, 14:17
Лучший ответ Сообщение было отмечено texnix как решение

Решение

texnix,
PowerShell
1
2
3
4
5
6
7
8
9
10
11
$i=0
$processes=Get-Process postgre
if ($processes.count -le 16)
{
   foreach($proc in $processes)
       {
            [int32]$mask=[math]::pow(2,$i)
            $proc.ProcessorAffinity=$mask
            $i+=1
        }
}
Ну или просто
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
$i=0
$processes=Get-Process postgre
foreach($proc in $processes)
{
    [int32]$mask=[math]::pow(2,$i)
    try
    {
        $proc.ProcessorAffinity=$mask
    }
    catch{}
    $i+=1
 
}
Добавлено через 2 минуты
Во втором случае, Первым 16 элементам массива будет задано соответствие, остальным нет.
1
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250
26.10.2016, 14:27  [ТС]
v_svitere, попробуем.

Добавлено через 2 минуты
Хотя... зашёл на сервер, пересчитал, насчитал 20 процессов, что сильно больше чем ядер. Причем загружены только 10, те из них, которые больше потребляют памяти.
Можно ли в этом цикле "foreach($proc in $processes)" отсортировать их по потреблению памяти?
Ну чтобы раскидать самые загруженные, а остальные, так и быть. пусть болтаются как и были.
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
26.10.2016, 14:38
texnix,
Можно ли в этом цикле "foreach($proc in $processes)" отсортировать их по потреблению памяти?
Да вообще без проблем
По объему выгружаемой памяти
PowerShell
1
Get-Process postgre|sort PM -Descending | select -first 16
По размеру рабочего множества
PowerShell
1
Get-Process postgre|sort WS -Descending | select -first 16
По ЦПУ
PowerShell
1
Get-Process postgre|sort CPU -Descending | select -first 16
1
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250
26.10.2016, 14:49  [ТС]
v_svitere, просто прекрасно получилось, теперь поставлю на автовыполнение каждые 2 часа и бухгалтеры будут на 7 небе от счастья.
Итог:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
$i=15
$processes=Get-Process postgres|sort PM -Descending | select -first 15
foreach($proc in $processes)
{
    [int32]$mask=[math]::pow(2,$i)
    try
    {
        $proc.ProcessorAffinity=$mask
    }
    catch{}
    $i-=1
 
}
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
26.10.2016, 14:55
texnix, Только
PowerShell
1
$i=15
Здесь должно быть
PowerShell
1
$i=0
$i в данном случае степени двойки, использованием которых мы получаем маски для ProcessorAffinity

1 -1
2 - 10
4 - 100
8 - 1000
16 -10000
И так далее.

Добавлено через 2 минуты
А, вы отнимаете единицу в счетчике, вижу, вижу.
0
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250
26.10.2016, 15:08  [ТС]
v_svitere, ну да, 1е ядро я оставляю для системы. постгре при большой загрузке начинает вешать систему, которая по умолчанию на 1 ядре тусит, а если занять только последние 15 ядер - то и винда шустрая и постгре быстро работает.
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
26.10.2016, 15:11
texnix, ага, я понял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.10.2016, 15:11
Помогаю со студенческими работами здесь

Привязка процессов к ядрам
Здравствуйте. Как привязать процессы к ядрам? То есть чем. И еще интересует запоминание выбранных параметров \ приоритеты. Anvir \...

ThreadPool и использование параллельных классов: распределение потоков по ядрам ЦП
задаю в переменную кол-во потоков и мне надо чтобы каждый поток выполнялся на ядре. Например 2х ядерный процессор. Задаю 4 потока и 2...

Распараллеливание циклических процессов равномерно по ядрам процессора
здравствуйте! подскажите, пожалуйста, если кто-нибудь знает, как распараллелить программу. Например, у меня на компьютере 4 процессора, как...

Параллельное программирование, распределение процессов на ядра процессора
ваша помощь нужна.......у меня тема связана с параллельным программированием, так вот....... я не так давно, узнал про mpi , но mpi...

Распараллеливание нагрузок по ядрам в 1С
Почему не происходит распараллеливание нагрузок по ядрам при проведении операций в 1с на сервере. Суть в том что одна и та же базана, на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru