why the NR_CPUS is this large ?
Потому что существуют настоящие Linux-системы с таким количеством ЦП. Я видел фактические результаты тестов для машин с 1024 процессорами.
Я не имею в виду кластеры независимых небольших систем, я имею в виду отдельные компьютеры с таким количеством ядер ЦП, на которых работает одно ядро Linux.
Например, SGI в настоящее время имеет систему, способную масштабировать до 32 процессорных сокетов. С сегодняшним максимальным числом ядер 22 в линейке Intel Xeon это дает вам 704 ядра, а затем удвоить это с Hyperthreading . Между моментом написания этой статьи и временем, когда вы ее читаете, этот предел ядра, вероятно, будет превышен.
where does the 240 nr_cpumask_bits and nr_cpu_ids come from ?
Вероятно, некоторые ограничения вашего аппаратного обеспечения. Для обработки даже двух физических процессоров требуется специально -разработанная система. Системы, которые могут поддерживать множество физических чипов ЦП, требуют всех видов специальной аппаратной поддержки, чтобы сделать их эффективными:матричные коммутационные матрицы , схемы NUMA и т. д.
Использовать GNUgrep
(или совместимый )с расширенным регулярным выражением:
grep -Eo "OS=\w+ \w+" file
или базовое регулярное выражение (, вам нужно экранировать+
grep -o "OS=\w\+ \w\+" file
# or
grep -o "OS=\w* \w*" file
Чтобы получить все от OS=
до OX=
, вы можете использовать grep
с perl -совместимым регулярным выражением (PCRE)(-P
параметр ), если он доступен, и сделать предварительный просмотр:
grep -Po "OS=.*(?=OX=)" file
#to also leave out "OS="
#use lookbehind
grep -Po "(?<=OS=).*(?=OX=)" file
#or Keep-out \K
grep -Po "OS=\K.*(?=OX=)" file
или используйте grep
, включая OX=
, а затем удалите его с помощью sed
:
grep -o "OS=.*\( OX=\)" file | sed 's/ OX=$//'
Выход:
OS=Arundo donax
OS=Setaria italica
В Perl два «слова» без пробелов -:
$ perl -lne 'print $1 if /OS=(\S+ \S+)/' input
или все доOX=
:
$ perl -lne 'print $1 if /OS=(.*?) OX=/' input
или все до следующегоsomething=
:
$ perl -lne 'print $1 if /OS=(.*?) (\w+)=/' input
С вашим образцом входных данных все они дают один и тот же результат, но результат будет другим, например. такой ввод:
ABC=something here OS=foo bar doo PE=3 OX=1234
Более надежным способом является использование sed для синтаксического анализа полного значения до тех пор, пока не будет найдено слово, содержащее следующее =. Таким образом, он будет работать со значением любого размера (, например. если у вас есть шрифт с одним словом или тремя словами ).
sed 's/.*OS=\([^=]*\).*/\1/;s/ [^ ]*$//'
Первый блок захватывает все до OS=
, второй блок в группе захвата (, обозначенный \(\)
с ), соответствует следующему =
и может упоминаться в замене как \1
. Следующая замена избавляет от последнего слова, которое является фрагментом следующего присваивания.
Обратите внимание, :^
в []
означает исключение соответствия символу в этом случае всего, что не является знаком =
.
awk '{print $(NF-4), $(NF-3)}' file
OS=Arundo donax
OS=Setaria italica
или
awk -F= '{sub(/OX/,""); print $(NF-3)}' file
Arundo donax
Setaria italica