Category: 读书记录

  • 更改centos cpu 调频模式

    [TOC]

    CPU frequency scaling (简体中文)

    CPU优化建议使用cpupower设置CPU Performance模式

    CPU频率

    查看 cpu 的频率

    [root@mulangcloud ~]# lscpu|grep Hz
    Model name:            Intel(R) Xeon(R) Silver 4210 CPU @ 2.20GHz
    CPU MHz:               1616.296
    CPU max MHz:           3200.0000
    CPU min MHz:           1000.0000
    

    每 4.2 查询一次,所有 cpu 核心的实时频率

    watch -n4.2  "cat /proc/cpuinfo | grep \"^[c]pu MHz\""
    

    cpufreq

    cpufreq是一个动态调整cpu频率的模块,系统启动时生成一个文件夹/sys/devices/system/cpu/cpu0/cpufreq/,文件夹里有一些 cpu 频率信息.

    ###scaling_min_freq代表最低频率
    [root@mulangcloud ~]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
    1000000
    ###scaling_max_freq代表最高频率
    [root@mulangcloud ~]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
    3200000
    ###scalin_governor代表cpu频率调整模式
    [root@mulangcloud ~]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
    performance
    

    cpu 调频模式

    模式
    performance 将CPU频率固定工作在其支持的最高运行频率上,而不动态调节.追求系统高性能
    powersave 将CPU频率设置为最低的所谓“省电”模式,CPU会固定工作在其支持的最低运行频率上. 追求系统低功耗
    userspace 运行于用户指定的频率
    ondemand 按需快速动态调整CPU频率, 一有cpu计算量的任务,就会立即达到最大频率运行,空闲时间增加就降低频率
    conservative 与ondemand不同,平滑地调整CPU频率,频率的升降是渐变式的,会自动在频率上下限调整

    cpupower

    cpupower 是一组为辅助 CPU 调频而设计的用户空间工具。该软件包并非必须,但强烈建议安装,因为它提供了方便的命令行实用程序,并且内置 systemd 服务,可在启动时更改调频器。

    查看 cpu 频率

    [root@mulangcloud ~]# cpupower frequency-info
    analyzing CPU 0:
      driver: intel_pstate
      CPUs which run at the same hardware frequency: 0
      CPUs which need to have their frequency coordinated by software: 0
      maximum transition latency:  Cannot determine or is not supported.
      hardware limits: 1000 MHz - 3.20 GHz # 硬件限制色频率
      available cpufreq governors: performance powersave
      current policy: frequency should be within 1000 MHz and 3.20 GHz.
                      The governor "performance" may decide which speed to use
                      within this range.
      current CPU frequency: 2.68 GHz (asserted by call to hardware)
      boost state support:
        Supported: yes
        Active: yes
    

    cpupower设置performance

    cpupower frequency-set -g performance
    

    mac os 查询 cpu

    sysctl -a | grep machdep.cpu
    
  • 浮点数构成

    目录

    [TOC]

    来源

    CPU中的二进制数据(小数篇)

    计算机浮点数规格化表示

    单精度与双精度是什么意思,有什么区别?

    浮点数

    • 双进度 64 位,8byte

    • 单精度 32 位,4byte

    浮点数构成`

    浮点数构成_双精度

    浮点数构成_单精度

    1. IEEE 754標準規定:非正規形式的浮點數的指數偏移值比正規形式的浮點數的指數偏移值小1。例如,最小的正規形式的單精度浮點數的指數部分編碼值為1,指數的實際值為-126;而非規約的單精度浮點數的指數域編碼值為0,對應的指數實際值也是-126而不是-127。實際上非正規形式的浮點數仍然是有效可以使用的,只是它們的絕對值已經小於所有的規約浮點數的絕對值;即所有的非規約浮點數比規約浮點數更接近0。規約浮點數的尾數大於等於1且小於2,而非規約浮點數的尾數小於1且大於0

    2. 小数部分是原十进制数值变为二进制后再经过规格化,规格化后省去唯一的整数1之后剩下的0.0100000 00000000 00000000写进去的。

    3. 指数部分是由指数实际值-3再加上固定值(这里取IEEE754标准的固定值2**(e-1)-1,e为储存指数的比特长度,在这里是8 bit)(单精度时指数偏移度为127,目的是为了同时可以表示正和负的指数,即00000000-11111111分别对应-127 — 128)。

      # 十进制运算
      0.15625-(1.0/8)-0-(1.0/32) = 0
      # 因式分解,用二的倍数表示
      0.15625=(1.0/8)+0+(1.0/32)
      # 转为二进制
      0.15625=(1)*(0+0.00101)=(1)*(1+0.01)x2^(-3)
      # 二进制下小数位为0.01
      # 尾数为0100 0000 0000 0000 0000 000
      # 指数 -3
      (-3)-(-127)=134 => 0b0111_1100
      
      

    一个32位单精度浮点数-3.75表示的例子:

    #首先转化为2进制表示
    −3.75=−(2+1+1/2+1/4)=−1.111×2^1
    #整理符号位并进行规格化表示
    −1.111×21=(−1)(1)×(1+0.1110 0000 0000 0000 0000 000)×2^1
    # 尾数为1110 0000 0000 0000 0000 000
    # 指数为1-127=128=0b10000000
    

    精度

    浮点数的尾数是二进制的,转化之后,有一些数无法表示,这也是精度丢失的原因.

  • 追踪java 程序中的线程执行情况

    当我们希望观察java程序运行的堆栈情况,多次执行jstack,或者通过cpu 采用发现某个线程都在同一个函数函数.

    这可能是两种情况引起的:

    1. 在这个线程中,这个函数是高频函数.
    2. 线程当前阻塞在这个函数上.

    Linux中没有真正的线程,java线程是由进程来模拟实现的. 这种进程又称作:轻量级进程(LWP).

    因此可以通过strace -p 追踪其运行情况,来区分以上两种情况.

    但是通过ps -ef或者jps只能看到java程序的pid. 如果需要追踪线程,可以jstack查找线程的pid.

    线程第一个行中的 nid字段,就是该线程pid的16进制表示. 转化为10进制即可.

    例如下面,线程显示在执行io上,读数据相对这个操作是比重多的. 但是是频繁执行io,还是文件系统出现问题,卡在io上,这是无法区分. 就可以这样追踪一下.

    (more…)

  • 笔记_CPU缓存知识

    记录一下 cpu cache 相关内容

    (more…)