URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 86066
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Автоматическое определение в Linux ..."

Отправлено auto_tips , 19-Авг-12 23:05 
Данный подход можно применять для обработки данных на компьютерных системах с разным количеством процессоров.

Пример скрипта с использованием cppcheck

   #!/bin/sh

   COUNT=$(cat /proc/cpuinfo | grep 'model name' | sed -e 's/.*: //' | wc -l)
   echo "number of detected CPUs =" $COUNT

   cppcheck -j $COUNT --force --inline-suppr . 2>errors.txt

URL:
Обсуждается: https://www.opennet.ru/tips/info/2708.shtml


Содержание

Сообщения в этом обсуждении
"Автоматическое определение в Linux количества процессоров в скрипте"
Отправлено Андрей , 19-Авг-12 23:05 
Хмм.. А зачем?? Типа каждый день отсылать статистику по кол-ву процов на мыло админа?? Плюс еще график от рисовать :)
Было бы неплохо описать задачу с которой столкнулись и для чего это?? Загрузку процессоров, понятно для чего в автоматическом режиме, но кол-во... Что-то я не догоняю - подскажите??

"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Карбофос , 19-Авг-12 23:19 
например, для параллельной обработки фотографий
отчасти проблематика была затронута здесь https://www.opennet.ru/tips/info/2498.shtml
то есть, немного переписав скрипт, его можно применять универсально для разных компов, с различным кол-вом процессоров

"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Андрей , 20-Авг-12 04:53 
Далек от этой темы.. Пока далек.. Но кто знает когда потребуется.. Спасибо :)
В любом случае, чтобы избежать подобных глупых вопросов, не помешало бы описание 'проблемы' в начале 'типса' :)
Спасибо еще раз..

"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Карбофос , 20-Авг-12 12:45 
это нужно для параллельного запуска заданий по обработке данных, для полного использования компьютерных ресурсов.
как раз с cppcheck и был приведен пример: запускается несколько параллельных потоков статической проверки исходников

"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Аноним , 22-Авг-12 21:19 
Например чтобы make пинать с нужным -j. Ну так, самый очевидный вариант :)

"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Vee Nee , 19-Авг-12 23:11 
Как вариант:
COUNT=$(lscpu -p=cpu | grep -v \# | wc -l)

Не понимаю только, для чего вырезание заголовка строки sed-ом, вариант без него что-то упускает?
COUNT=$(grep 'model name' /proc/cpuinfo | wc -l)


"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Карбофос , 19-Авг-12 23:25 
благодарю за дополнение!
нет, не упускает. видимо, sed еще использовался для того, чтобы выдавать имя процессора, после этого просто ничего не меняли :)

"Автоматическое определение в Linux количества процессоров в ..."
Отправлено pavlinux , 20-Авг-12 05:49 
COUNT=$((`lscpu -p=cpu | tail -1`+1))


"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Andrey Mitrofanov , 20-Авг-12 09:58 
> Не понимаю только, для чего вырезание заголовка строки sed-ом, вариант без него что-то упускает?

А wc?!%)

> COUNT=$(grep 'model name' /proc/cpuinfo | wc -l)

egrep -c '^processor' /proc/cpuinfo


"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Карбофос , 20-Авг-12 10:35 
кстати, тоже хорошая идея использовать как можно меньше утилит, мерси за сие!
grep -c '^processor' /proc/cpuinfo

"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Аноним , 23-Авг-12 10:38 
как все сложно в ваших линухах, толи дело во фре:
sysctl kern.smp.cpus

"Автоматическое определение в Linux количества процессоров в скрипте"
Отправлено pavlinux , 20-Авг-12 03:49 
Кто больше вариантов определения процов?


#!/bin/sh

  # Вот этот самый Юникс-вей фен-шуйный, POSIX IEEE Std 1003.1-2001, все дела...

  getconf _NPROCESSORS_ONLN;

  # А дальше скриптодрочка.
  echo $((`cat /sys/devices/system/cpu/online | cut -d"-" -f2`+1));
  dmesg | grep "processors activated" | cut -d" " -f3;

Хардкор мазафака кульхацкер метод


#!/bin/sh

cat >> /tmp/cpus.c << EOF
#include <stdio.h>
#include <unistd.h>

int main(void) {

     printf("%ld\n", sysconf(_SC_NPROCESSORS_ONLN));

return 0;
}
EOF
gcc /tmp/cpus.c -o /tmp/cpus;

export CPU=$(/tmp/cpus)



"Автоматическое определение в Linux количества процессоров в ..."
Отправлено pavlinux , 20-Авг-12 05:04 
 
#!/bin/sh

sed -ne '/processor/p;' /proc/cpuinfo | wc -l;
awk '/processor/{x++}; END {print x}' /proc/cpuinfo;


"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Карбофос , 20-Авг-12 07:10 
с комуляцией - вообще жесть.
спасибо за варианты :)

слушай, а он разве в /proc/cpuinfo как раз не показывает только активированные процы?


"Автоматическое определение в Linux количества процессоров в ..."
Отправлено pavlinux , 21-Авг-12 01:09 
Да, только онлайновые!

Где-то там: http://lxr.free-electrons.com/source/arch/x86/kernel/cpu/pro...


"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Карбофос , 22-Авг-12 00:52 
ну вот и речь об чем: нефиг забор городить из нескольких скриптов

"Автоматическое определение в Linux количества процессоров в ..."
Отправлено pavlinux , 22-Авг-12 04:05 
# getconf _NPROCESSORS_ONLN;

как раз делает вот это

# echo $(('cat /sys/devices/system/cpu/online | cut -d"-" -f2'+1));

только тебе не видно :)

$ strace -e open getconf _NPROCESSORS_ONLN 2>&1 | grep sys

open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3


"Автоматическое определение в Linux количества процессоров в скрипте"
Отправлено Анонимуз , 20-Авг-12 15:24 
Процов? Насколько я заметил, тут речь идет исключительно о количестве ядер.
Ну, я понимаю, что обычно не количество сокетов интересует, а именно ядра, но почему бы так и не написать сразу?

"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Карбофос , 20-Авг-12 15:41 
это принципиально что-то меняет?
для меня лично ядро=процессор. точка.
можно, конечно, вступить в бессмысленный диспут, в том числе и затронуть HT.

"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Анонимуз , 20-Авг-12 16:37 
Для большинства людей операционная система = винда, а название статьи не соответствует содержимому.
Не-не, спорить тут не о чем, все хорошо.

"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Michael Shigorin , 24-Авг-12 17:39 
> Для большинства людей операционная система = винда

Большинство людей таких слов-то не знают, из наблюдений...


"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Аноним , 27-Окт-12 19:05 
>> Для большинства людей операционная система = винда
> Большинство людей таких слов-то не знают, из наблюдений...

А должны были?


"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Michael Shigorin , 27-Окт-12 20:14 
> А должны были?

Здесь -- да, наверное.


"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Andrey Mitrofanov , 20-Авг-12 23:22 
> но почему бы так и не написать сразу?

А в "процессора-а-ах" я зничиительно длинннее! <.)>


"Автоматическое определение в Linux количества процессоров в ..."
Отправлено pavlinux , 23-Авг-12 02:42 
А двайте регистрами меряться?!

"Автоматическое определение в Linux количества процессоров в ..."
Отправлено Аноним , 24-Авг-12 21:01 
И сколько сантиметров у тебя регистр?

"Автоматическое определение в Linux количества процессоров в ..."
Отправлено pavlinux , 26-Авг-12 05:18 
> И сколько сантиметров у тебя регистр?

strlen("sizeof(register);");


"Автоматическое определение в Linux количества процессорных ядер  из скрипта"
Отправлено АнонимусРекс , 22-Авг-12 00:10 
а где разделение на треды?

"Автоматическое определение в Linux количества процессорных я..."
Отправлено Карбофос , 22-Авг-12 00:50 
если шапка жмёт - дополни

"Автоматическое определение в Linux количества процессорных я..."
Отправлено Michael Shigorin , 24-Авг-12 02:55 
> если шапка жмёт - дополни

Вообще в первом же Вашем примере наблюдается избыточное применение cat(1), да и остального:

echo "CPU cores available: `grep -c ^processor /proc/cpuinfo`"

А для адаптивного параллельного выполнения лучше сразу смотреть на parallel(1) или paexec(1).


"Автоматическое определение в Linux количества процессорных я..."
Отправлено Карбофос , 24-Авг-12 18:04 
>echo "CPU cores available: `grep -c ^processor /proc/cpuinfo`"

наблюдается избыточность и ненужность такой строки вообще. а мне нужно было значение переменной.


"Автоматическое определение в Linux количества процессорных ядер  из скрипта"
Отправлено DelGod , 23-Авг-12 20:56 
Количество физических процессоров
grep 'physical id' /proc/cpuinfo | sort -u | wc -l

Количиство Ядер в каждом из процесоров
grep 'core id' /proc/cpuinfo | sort -u | wc -l


"Автоматическое определение в Linux количества процессорных я..."
Отправлено pavlinux , 26-Авг-12 05:41 
> Количество физических процессоров
> grep 'physical id' /proc/cpuinfo | sort -u | wc -l

Да не, жирно слишком - и grep, и sort, и wc...  

$ getconf _NPROCESSORS_ONLN;


> Количиство Ядер в каждом из процесоров
> grep 'core id' /proc/cpuinfo | sort -u | wc -l

12
4
8

А че, на моем кластере и 4-х ядерные есть и 8-ми и 12... :)



"Автоматическое определение в Linux количества процессорных я..."
Отправлено zumm , 24-Авг-12 17:32 
гыгы

#!/bin/sh
cat >> /tmp/cpus.f90 << EOF
program cpus_num
use omp_lib
write (*,*) omp_get_num_procs()
end program cpus_num
EOF

gfortran /tmp/cpus.f90 -fopenmp -o /tmp/cpus;
/tmp/cpus


"Автоматическое определение в Linux количества процессорных я..."
Отправлено Michael Shigorin , 24-Авг-12 17:38 
> -fopenmp

Этак недалеко до "поставить оракл и сделать запрос". :)

(напомнило анекдот про выяснение чётности числа различными программистами)


"Автоматическое определение в Linux количества процессорных я..."
Отправлено pavlinux , 26-Авг-12 05:54 
> (напомнило анекдот про выяснение чётности числа различными программистами)

Как-то лет 12-13 назад, мерились в фидо, в RU.LINUX, кто-сколько,
придумает способов замены команды ls



"Автоматическое определение в Linux количества процессорных я..."
Отправлено Crazy Alex , 06-Сен-12 11:47 
Мне, кстати, такие извращения когда-то пригодились - надо было разобраться с железкой, в которой было что-то адски ограниченное в роли шелла - в частности, ls не было. Обходился "echo *" и подобными.

"Автоматическое определение в Linux количества процессорных ядер  из скрипта"
Отправлено ананим , 29-Авг-12 00:14 
ну тады и от меня добавь:
1)
$ cat /sys/devices/system/cpu/online
0-7
$ cat /sys/devices/system/cpu/offline
$ cat /sys/devices/system/cpu/possible
0-7
$ cat /sys/devices/system/cpu/present
0-7
2)
# dmidecode -t processor|grep Thread
    Thread Count: 8
# dmidecode -t processor|grep Core
    Family: Core i7
    Version: Intel(R) Core(TM) i7-3610QM CPU @ 2.30GHz
    Core Count: 4
    Core Enabled: 4

"Автоматическое определение в Linux количества процессорных я..."
Отправлено sailor , 05-Май-13 22:56 
COUNT=$(sed -ne '/processor/p;' /proc/cpuinfo | wc -l)

"Автоматическое определение в Linux количества процессорных ядер  из скрипта"
Отправлено ziplex , 26-Сен-18 15:18 
Забыли про утилиту nproc