• ltp-ddt smp_basic


    SMP_S_FUNC_DUAL_CORE source functions.sh;
    cmd="stress-ng --matrix 4 -t 10s --perf --matrix-size 16 --metrics-brief";
    run_and_capture_values "taskset -c 0 $cmd" 's/.+matrix[[:space:]]+([[:digit:]]+)[[:space:]]+.*/1/p' single_core;
    run_and_capture_values "taskset -c 0-1 $cmd" 's/.+matrix[[:space:]]+([[:digit:]]+)[[:space:]]+.*/1/p' dual_core;
    check_array_values dual_core[@] single_core[@] "-gt" 0.9
     
     
    run_and_capture_values() {
        local __arrayvalues=$3
        eval $__arrayvalues="($($1 2>&1 | sed -rn $2))"
    }
     
    run_and_capture_values "taskset -c 0 $cmd" 's/.+matrix[[:space:]]+([[:digit:]]+)[[:space:]]+.*/1/p' single_core;
     
    local __arrayvalues=single_core
    eval $single_core="($(taskset -c 0 stress-ng --matrix 4 -t 10s --perf --matrix-size 16 --metrics-brief 2>&1 | sed -rn 's/.+matrix[[:space:]]+([[:digit:]]+)[[:space:]]+.*/1/p'))"
     
     
    taskset -c 0 stress-ng --matrix 4 -t 10s --perf --matrix-size 16 --metrics-brief 2>&1 输出:
     
    stress-ng: info:  [251] dispatching hogs: 4 matrix
    stress-ng: info:  [251] cache allocate: using built-in defaults as unable to determine cache details
    stress-ng: info:  [251] cache allocate: default cache size: 2048K
    stress-ng: info:  [251] successful run completed in 10.32s
    stress-ng: info:  [251] stressor       bogo ops real time  usr time  sys time   bogo ops/s    bogo ops/s
    stress-ng: info:  [251]                                       (secs)    (secs)        (secs)      (real time)    (usr+sys time)
    stress-ng: info:  [251] matrix            80157     10.04      9.93          0.21           7979.93            7905.03
    stress-ng: info: [251] matrix:
    stress-ng: info:  [251]                  692737288 CPU Cycles                    67.13 M/sec
    stress-ng: info:  [251]                  483721828 Instructions                  46.87 M/sec (0.698 instr. per cycle)
    stress-ng: info:  [251]                  167637816 Cache References              16.24 M/sec
    stress-ng: info:  [251]                     361004 Cache Misses                  34.98 K/sec ( 0.22%)
    stress-ng: info:  [251]                   53225292 Branch Instructions            5.16 M/sec
    stress-ng: info:  [251]                    1580816 Branch Misses                  0.15 M/sec ( 2.97%)
    stress-ng: info:  [251]                  346474064 Bus Cycles                   33.57 M/sec
    stress-ng: info:  [251]                         16 Page Faults Minor              1.55 /sec
    stress-ng: info:  [251]                          0 Page Faults Major              0.00 /sec
    stress-ng: info:  [251]                        992 Context Switches              96.12 /sec
    stress-ng: info:  [251]                          0 CPU Migrations                 0.00 /sec
    stress-ng: info:  [251]                          0 Alignment Faults               0.00 /sec
     
    sed -rn 's/.+matrix[[:space:]]+([[:digit:]]+)[[:space:]]+.*/1/p'))"
     
    -r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
    -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
    s 替换指定字符 p 表示打印行
    .+  .匹配一个非换行符的任意字符  +重复一个或一个以上前一个字符 ab+ a后面至少跟着一个b
    matrix[[:space:]]+  matrix后面至少跟着一个空格
    ([[:digit:]]+)[[:space:]]+    ([[:digit:]]+)后面至少跟着一个空格
    .* 代表零个或多个任意字符
    ()匹配子串,保存匹配的字符
    ([[:digit:]]+)表示数字 重复一个或一个以上前一个字符(数字)
    1 子串匹配标记
     
    实例:
    echo idyll  1984  cheung |sed -rn 's/.*+[[:space:]]+([[:digit:]]+)[[:space:]]+([[:alpha:]]+)/12/p'
    输出1984cheung
     
    sed -rn 's/.+matrix[[:space:]]+([[:digit:]]+)[[:space:]]+.*/1/p'
    80157
     
     
     
    sed命令
    命令说明
    d 删除,删除选择的行
    D 删除模板块的第一行
    s 替换指定字符
    h 拷贝模板块的内容到内存中的缓冲区
    H 追加模板块的内容到内存中的缓冲区
    g 获得内存缓冲区的内容,并替代当前模板块中文本
    G 获得内存缓冲区的内容,并追加到当前模板块文本的后面
    l 列表不能打印字符的清单
    n 读取下一个输入行,用下一个命令处理新的行而不是第一个命令
    N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码
    p 打印模板块的行
    P 打印模板块的第一行
    q 退出sed
    b label 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾
    r file 从file中读行
    t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
    T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
    w file 写并追加模板块到file末尾
    W file 写并追加模板块的第一行到file末尾
    ! 表示后面的命令对所有没有被选定的行发生作用
    = 打印当前行号
    #
    把注释扩展到第一个换行符以前
     
    sed替换标记
     
    命令说明
    g 表示行内全面替换
    p 表示打印行
    w 表示把行写入一个文件
    x 表示互换模板块中的文本和缓冲区中的文本
    y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
    1 子串匹配标记
    & 已匹配字符串标记
    sed元字符集
    命令说明
    ^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
    $ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
    . 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
    * 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
    [] 匹配一个指定范围内的字符,如/[sS]ed/匹配sed和Sed。
    [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
    (..) 匹配子串,保存匹配的字符,如s/(love)able/1rs,loveable被替换成lovers。
    & 保存搜索字符用来替换其他字符,如s/love/&/,love这成love
    < 匹配单词的开始,如:/<love/匹配包含以love开头的单词的行。
     > 匹配单词的结束,如/love>/匹配包含以love结尾的单词的行。
    x{m} 重复字符x,m次,如:/0{5}/匹配包含5个0的行。
    x{m,} 重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行。
    x{m,n}
    重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行。
     
    check_array_values dual_core[@] single_core[@] "-gt" 0.9
     
    check_array_values() {
        local multiplier=1
        if [ -n "$4" ]; then
            multiplier=$4
        fi
        local old=("${!1}")
        local new=("${!2}")
        for i in "${!old[@]}"; do
            echo "Checking assertion for index $i"
        echo "->calc: "${old[$i]}*$multiplier $3 ${new[$i]}""
            adjusted_value=$(echo "(${old[$i]} * $multiplier)/1" | bc)
            assert [ $adjusted_value $3 ${new[$i]} ]
        done
    }
     
    multiplier=0.9
    local old=("${!1}")  =》local old=("${!dual_core[@]}")
    local new=("${!2}") =》local new=("${!single_core[@]}")
     
    比较一下:
    #  ${数组名}并不会获得所有值,它只会获得到第一个元素的值。即${数组名}等价于${数组名[0]}
     
    dual_core=(190 100)
     
    check_array_values dual_core[@] single_core[@] "-gt" 0.9
     
    local old=${1} =>old=dual_core[@]  #字符串
     
    echo ${old[@]}  输出:dual_core[@]
        for i in "${!old[@]}"; do
            echo "${old[$i]}"
        done
    输出:dual_core[@]
     
    local old=${!1} =>old=${!dual_core[@]}  #带数组下标的遍历,当需要使用到数组的下标时,可以使用${!数组名[@]}
    以上理解是错误的,这个!和遍历没有关系,这个是shell脚本中的间接变量引用。
    ##########################################################################

    间接变量引用

    如果第一个变量的值是第二个变量的名字,从第一个变量引用第二个变量的值就称为间接变量应用。
    variable1的值是variable2,而variable2又是变量名, variable2的值为value,间接变量引用是指通过variable1获 得变量值value的行为
    variable1=variable2
    variable2=value
    bash shell提供了两种格式实现间接变量引用
    eval tempvar=$$variable1
    tempvar=${!variable1}

      1. aaa=123  
      2. bbb=aaa  
      3. echo $bbb  
      4. echo ${!bbb} 

      5. 输出结果:

         aaa

        123

    ##############################################################################

    echo ${old[@]}  输出:190 100 这是一个整体
        for i in "${!old[@]}"; do
            echo "${old[$i]}"
        done
    输出:190 100
    这一步比较奇怪,在函数里可以,但是在函数外,是 0 1感觉是序号。
     
    local old=("${!1}") =>old=(${!dual_core[@]})=(190 100) #带数组下标的遍历 外面有()再次成为一个数组
      echo ${old[@]}  输出:190 100 这是数组
        for i in "${!old[@]}"; do
            echo "${old[$i]}"
        done
    输出:
    190
    100
     
     
    #!/bin/bash
    #数组遍历
    
    days=(one two three four)
    #for循环遍历
    for day in ${days[*]}  #或${days[@]}
    do
            echo $day
    done
    echo "***************"
    #for循环带下标遍历 ${!days[@]}==》(0 1 2 3)
    for i in ${!days[@]}
    do
            echo ${days[$i]}
    done
    assert [ $adjusted_value $3 ${new[$i]} ] #比较大小
     
    assert() {
      eval "${@}"
      if [ $? -ne 0 ]
      then
        echo "Assertion ${@} failed"
        i=0
        while caller $i
        do
          i=$((i+1))
        done
        exit 2
      fi
    }
     
    关于数组的操作,参考:https://www.cnblogs.com/sco1234/p/8906527.html
     
    备用的test.sh
     
    #!/bin/sh

    dual_core=(190 100)

    check_array_values() {
        #local old=${1}
        #local old=${!1}
        local old=("${!1}")
        echo ${old[@]}
        for i in "${!old[@]}"; do
            echo "${old[$i]}"
        done
    }

    check_array_values dual_core[@]

    echo "*************"
    new1=${!dual_core[@]}
    echo ${new1[@]}
    for i in ${!new1[@]}; do
        echo "${new1[$i]}"
    done

    new=("${!dual_core[@]}")
    echo ${new[@]}
    for i in ${!new[@]}; do
        echo "${new[$i]}"
    done

  • 相关阅读:
    uniq 只能相邻行去重
    uniq 只能相邻行去重
    uniq 只能相邻行去重
    KVO(1)
    KVO(1)
    KVO(1)
    KVO(1)
    解决 Retrofit 多 BaseUrl 及运行时动态改变 BaseUrl ?
    jquery 请求成功后
    事故现场:MySQL 中一个双引号的错位引发的血案
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/10904018.html
Copyright © 2020-2023  润新知