El valor de Ghz en perf stat -a
no muestra los ciclos por segundo. 4.719.000 ciclos divididos por 0,0016 segundos es 2,9 Ghz, no 0,76 Ghz.
Supongo que lo que muestra perf
es un promedio de los ciclos por segundo en cada núcleo de CPU . Dividiendo 2.9Ghz por 0.76Ghz da 3.8. Esto no es un número entero de CPU, pero es correcto. Me doy cuenta de que coincide exactamente con la extraña figura anterior de "CPU utilizadas".
Comparar perf stat
sin-a
:
# time perf stat -r 500 mount --make-rprivate /mnt/a
Performance counter stats for 'mount --make-rprivate /mnt/a' (500 runs):
1.323450 task-clock (msec) # 0.812 CPUs utilized ( +- 0.84% )
0 context-switches # 0.008 K/sec ( +- 44.54% )
0 cpu-migrations # 0.000 K/sec
122 page-faults # 0.092 M/sec ( +- 0.04% )
2,668,696 cycles # 2.016 GHz ( +- 0.28% )
3,090,908 instructions # 1.16 insn per cycle ( +- 0.04% )
611,827 branches # 462.297 M/sec ( +- 0.03% )
20,252 branch-misses # 3.31% of all branches ( +- 0.09% )
0.001630517 seconds time elapsed ( +- 0.82% )
real 0m1.089s
user 0m0.378s
sys 0m0.715s
Tenga en cuenta también que los ciclos informados por perf stat -a
no representan exactamente un cálculo productivo. perf record -a
seguido de perf report
mostró el punto de acceso superior de la siguiente manera:
# perf record -a sh -c "for i in {1..500}; do mount --make-rprivate /mnt/a; done"
...
# perf report
...
19.40% swapper [kernel.kallsyms] [k] intel_idle
...
Es decir, aunque la frecuencia de la CPU se está reduciendo en los núcleos inactivos, los ciclos contados por perf también parecen incluir un gran número "gastado" mientras el núcleo detuvo la CPU y entró en una CPU inactiva Expresar.
(O al menos el núcleo estaba tratando de poner la CPU en un estado inactivo de bajo -consumo de energía. No sé si perf
interrumpe la CPU con la suficiente frecuencia como para interferir completamente con el ralentí ).
sed 's/Red2/REDRED22/'
Пример:
sed 's/Red2/REDRED22/' redred
White
Black
Green1
Red1
Yellow1
Blue
----
White
Black
Green2
REDRED22
Yellow2
Blue
----
White
Black
Green3
Red3
Yellow3
Blue
Исходный файл выглядит следующим образом:
cat redred
White
Black
Green1
Red1
Yellow1
Blue
----
White
Black
Green2
Red2
Yellow2
Blue
----
White
Black
Green3
Red3
Yellow3
Blue
Обобщенный поиск, совместимый с Perl, должен быть таким:
(?<=Green2\n).*(?=(\n.*)+Yellow2)
Я понимаю, что шаблоны «до» и «после» - это Green2 и Yellow2, и следует выбрать всю строку после Green2. Этот шаблон работает, даже если перед Yellow2 есть больше линий. Однако из-за требований к экранированию в sed это очень сложно реализовать там.
В Perl это будет выглядеть так:
perl -0777 -pe 's/(?<=Green2\n).*(?=(\n.*)+Yellow2)/REDRED22/g' /path/to/file
Очень поздно, я знаю, но я не мог устоять перед задачей заставить это работать с sed.
С текстом, помещенным в файл с именем redred:
sed -E ':a;N;$!ba;s/(Green2\n)([a-zA-Z]*)([0-9]*)(\nYellow2)/\1\2\2\3\3\4/g' redred
Использует ЭТУ технику для чтения \n в sed и позиционных маркеров для разбиения и перестроения цели.
Это также разделяет любую цель, состоящую из текста и числа (, например. Aubergine123 )в компоненты [[ :alpha :]] и [[ :digit :]], а затем перестраивает целевую строку так, как этого хотел OP (AubergineAubergine123123 ).