cpu时间

Starting from fork(...)

纵然是瞬间 提交于 2020-02-21 04:48:55
作为计算机程序的基本单位,一切五花八门,新奇古怪的程序都源于一个fork。亚当夏娃之后,人类繁衍生息便出现了社会,fork繁衍生息之后便出现了windows,或者Linux,又或者你手中的iPhone5,双卡双待,大屏加超长待机,还有标配的炫酷铃声——《爱情买卖》。 fork不是一个C函数,而是一个系统调用。c通常是用户层的语言,比如简单的加减法,若要解决复杂的问题,比如申请一段内存,开多进程,这显然不是c 能办到的,或者你也不知如何实现这样一个函数。不同的操作系统有自己的标准,亦有自己定义的API,fork一个进程更不会是一套相同的代码。这种C自己办不到的事情,只能量力而行,通知系统(内核)帮自己处理下咯,内核处理好,将结果返回给c,这便是合作的道理。 创建一个进程 #include <unistd.h>pid_t fork(void); 系统调用的过程 --> 应用程序函数,也就是上面的pid fork(void) --> libc里的封装例程 , 向内核发送系统调用号 --> 系统调用处理函数,接收到系统调用号,通过sys_call_table找到相应服务例程地址 /* 0 */ CALL(sys_restart_syscall) CALL(sys_exit) CALL(sys_fork_wrapper) //--> CALL(sys_read) CALL(sys_write

C语言内存小结

人盡茶涼 提交于 2020-02-20 13:05:12
学习C语言是了解内存布局的最简单、最直接、最有效的途径, 它比任何一门高级编程语言都贴近内存。以前学习C语言内存也有一段时间,却也是零零散散,于是打算写一篇博客,整理一下关于内存的内容。 内存优化小结: 计算机内存是以字节(Byte)为单位划分的,理论上CPU可以访问任意编号的字节,但是由于内存对齐(编译器的优化),情况就有所不同; CPU 通过地址总线来访问内存,一次能处理几个字节的数据,就命令地址总线读取几个字节的数据。32 位的 CPU 一次可以处理4个字节的数据,那么每次就从内存读取4个字节的数据,这就是意味着CPU读取的内存单元的标号一定是4的倍数;对于程序来说,一个变量最好位于一个寻址步长的范围内,这样一次就可以读取到变量的值;如果跨步长存储,就需要读取两次,然后再拼接数据,效率显然降低了。 例如一个 int 类型的数据,如果地址为 8,那么很好办,对编号为 8 的内存寻址一次就可以。如果编号为 10,就比较麻烦,CPU需要先对编号为 8 的内存寻址,读取4个字节,得到该数据的前半部分,然后再对编号为 12 的内存寻址,读取4个字节,得到该数据的后半部分,再将这两部分拼接起来,才能取得数据的值。 64位的处理器也是这个道理,同样的分析。 虚拟地址小结: 虚拟地址在寄存器层面是段地址+偏移地址,这两个地址通过内部总线传输到CPU的内部结构—

并发编程之线程池

好久不见. 提交于 2020-02-20 10:57:08
并发编程之线程池 4. 自定义线程池 ThreadPoolExecutor 异步模式之工作线程 3. Fork/Join 4. 自定义线程池 步骤1 :自定义拒绝策略接口 ThreadPoolExecutor 1)线程池状态 ThreadPoolExecutor使用int的高3位来表示线程池状态,低29位表示线程数量 从数字上比较,TERMINATED>TIDYING>STOP>SHUTDOWN>RUNNING 这些信息存储在一个原子变量ctl中目的是将线程池状态与线程个数合二为一,这样就可以用一次cas原子操作进行赋值 2)构造方法 corePool :Size核心线程数目(最多保留的线程数) maximunPoolSize :最大线程数目 keepAliveTIme :生存时间- 针对救急线程 unit :时间单位 - 针对救急线程 workQueue :阻塞队列 threadFactory :线程工厂 - 可以为线程创建时起个好名字 handler :拒绝策略 工作方式 : 线程池中刚开始没有线程,当一个任务提交给线程池后,线程池会创建一个新线程来执行任务。 当线程数达到corePoolSize并没有线程空闲,这时再加入任务,新加的任务会被加入workQueue队列排队,直到有空闲的线程。 如果队列选择了有界队列,那么任务超过了队列大小时,会创建maximumPoolSize

linux 查看系统资源使用信息的一些命令集合

痴心易碎 提交于 2020-02-20 10:47:19
linux上的进程查看及管理工具: pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup,nice,renice,killall。。。 linux开机时,会启动第一个进程,由这个进程去启动别的进程,这个第一个进程在centos5,6,7上实现的都不一样。 centos5:Sysv init:串行通过脚本去启动别的进程,速度慢 centos6:upstart:参考ubuntu的upstart,并行启动脚本,速度快 centos7:systemd:参考mac启动的过程,速度更快 这个第一个进程:/sbin/init 在centos7上执行pstree:可以看到父进程是systemd # pstree systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager─┬─dhclient │ └─2*[{NetworkManager}] ├─2*[VBoxClient───VBoxClient] ├─2*[VBoxClient───VBoxClient───{VBoxClient}] ├─VBoxClient───VBoxClient───2*[{VBoxClient}] ├─VBoxService───7*[

并发编程之线程池

孤者浪人 提交于 2020-02-20 10:17:08
并发编程之线程池 4. 自定义线程池 ThreadPoolExecutor 异步模式之工作线程 3. Fork/Join 4. 自定义线程池 步骤1 :自定义拒绝策略接口 ThreadPoolExecutor 1)线程池状态 ThreadPoolExecutor使用int的高3位来表示线程池状态,低29位表示线程数量 从数字上比较,TERMINATED>TIDYING>STOP>SHUTDOWN>RUNNING 这些信息存储在一个原子变量ctl中目的是将线程池状态与线程个数合二为一,这样就可以用一次cas原子操作进行赋值 2)构造方法 corePool :Size核心线程数目(最多保留的线程数) maximunPoolSize :最大线程数目 keepAliveTIme :生存时间- 针对救急线程 unit :时间单位 - 针对救急线程 workQueue :阻塞队列 threadFactory :线程工厂 - 可以为线程创建时起个好名字 handler :拒绝策略 工作方式 : 线程池中刚开始没有线程,当一个任务提交给线程池后,线程池会创建一个新线程来执行任务。 当线程数达到corePoolSize并没有线程空闲,这时再加入任务,新加的任务会被加入workQueue队列排队,直到有空闲的线程。 如果队列选择了有界队列,那么任务超过了队列大小时,会创建maximumPoolSize

Linux服务器优化

风格不统一 提交于 2020-02-19 16:33:25
1 cpu性能查看 1、查看物理cpu个数: cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l 2、查看每个物理cpu中的core个数: cat /proc/cpuinfo | grep "cpu cores" | wc -l 3、逻辑cpu的个数: cat /proc/cpuinfo | grep "processor" | wc -l 物理cpu个数*核数=逻辑cpu个数(不支持超线程技术的情况下) 1.2 内存查看 1、查看内存使用情况: #free -m total used free shared buffers cached Mem: 3949 2519 1430 0 189 1619 -/+ buffers/cache: 710 3239 Swap: 3576 0 3576 total:内存总数 used:已经使用的内存数 free:空闲内存数 shared:多个进程共享的内存总额 buffers/cache:(已用)的内存数,即used-buffers-cached buffers/cache:(可用)的内存数,即free+buffers+cached Buffer Cache用于针对磁盘块的读写; Page Cache用于针对文件inode的读写,这些Cache能有效地缩短I/O系统调用的时间

如何在 Linux 中找出 CPU 占用高的进程

谁说胖子不能爱 提交于 2020-02-18 11:51:38
1) 怎样使用 top 命令找出 Linux 中 CPU 占用高的进程 在所有监控 Linux 系统性能的工具中,Linux 的 top 命令是最好的也是最知名的一个。 top 命令提供了 Linux 系统运行中的进程的动态实时视图。它能显示系统的概览信息和 Linux 内核当前管理的进程列表。它显示了大量的系统信息,如 CPU 使用、内存使用、交换内存、运行的进程数、目前系统开机时间、系统负载、缓冲区大小、缓存大小、进程 PID 等等。默认情况下, top 命令的输出结果按 CPU 占用进行排序,每 5 秒中更新一次结果。如果你想要一个更清晰的视图来更深入的分析结果, 以批处理模式运行 top 命令 是最好的方法。同时,你需要 理解 top 命令输出结果的含义 ,这样才能解决系统的性能问题 # top -b | head -50 top - 00:19:17 up 14:23, 1 user, load average: 2.46, 2.18, 1.97 Tasks: 306 total, 1 running, 305 sleeping, 0 stopped, 0 zombie %Cpu0 : 10.4 us, 3.0 sy, 0.0 ni, 83.9 id, 0.0 wa, 1.3 hi, 1.3 si, 0.0 st %Cpu1 : 17.0 us, 3.0 sy, 0.0

转载:深度学习电脑配置

喜欢而已 提交于 2020-02-18 07:15:50
半夜睡不着,想谈谈自己对深度学习主机配置的一些经验,想自己diy深度学习硬件的朋友可以参考一下,因为本人也不是特别资深的电脑diy爱好者,所以很多地方也是一知半解,有错误请大家指正。首先我会谈几点必须注意的事项;然后我阐述一些配件选择的原则,因为硬件更新是很快的;最后会给出一下当下的配置清单。下面我们步入正题。 配置深度学习主机的注意事项: 1.一定计算好需要多大功率的电源!我们配置深度学习主机最核心的就是显卡,GPU的功耗往往很大,尤其我们经常使用两块以上的显卡。因此电源功率很重要,这是我们主机稳定工作的保障,我看到很多服务器甚至会选择双电源,但是我自己没有试过,不是很清楚双电源。 2.双显卡以上时必须注意处理器和主板的选择。如果是双显卡以上,那么pcie就面临是工作在x16还是x8的状态,这里应该是说带宽。我们在选择CPU是就要关注他们的pcie通道数,通道数大约40条以上两个GPU才会都工作在x16状态。另外可以选择双CPU的主板,这样就可以支持两个甚至更多的GPU工作在x16状态。 3.使用m.2固态硬盘时注意是否影响GPU工作在x16状态。这点也是个第二点有关的,就是pcie的通道资源是有限的,有的主板会写你使用m.2的固态会占用谁的资源,导致那个接口不能用。所以我一般会用sata那种接口。不过通道多的一般没什么影响,还是要看一下主板说明。 硬件选择原则 1.GPU选择

性能优化--CPU使用率

允我心安 提交于 2020-02-18 05:25:15
usr 用户态CPU时间 nice 低优先级用户态CPU时间 system 系统态CPU时间 idle 空闲时间 iowait 等待IO的时间 irq 硬中断的时间 softirq 软中断的时间 steal 当系统运行在虚拟机中时,被其他CPU占用的时间。 gust 通过虚拟化,运行其他操作系统的时间。 gust_nice 以低优先级运行虚拟化的时候。 CPU使用率 = 1- 空闲时间/CPU总时间 用户态占用过多的CPU,应着重排查用户进程的性能问题。 系统态占用过多的CPU,应着重排查系统调用,内核进程的问题。 IO等待时机过长,应着重排查系统存储的IO问题。 软中断硬中断,应着重排查内核中的中断服务程序。 top,perf top -g 进程号 必须加-g才能显示函数调用信息。看exectue_ex下的函数调用。 碰到CPU占用率过高,但是top看不到CPU占用高的进程的情况可能是: 1、进程不断因为某种原因(段错误等)退出之后,被监视进程不断重启。 2、在进程内部通过exec调用的外部命令。这些命令进程只运行很短的时间就退出,一般很难用top来监控。 用工具 https://github.com/brendangregg/perf-tools/blob/master/execsnoop 可以监视出存在时间很短的进程。 也可以用perf record -g观察15秒

TOP性能分析相关信息总结

≯℡__Kan透↙ 提交于 2020-02-18 04:48:35
一、截取的样本 top - 23:21:23 up 10:47, 1 user, load average: 0.00, 0.01, 0.05 # 系统基本信息 Tasks: 128 total, 1 running, 127 sleeping, 0 stopped, 0 zombie # 进程总信息 %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st # CPU总信息 KiB Mem : 3881424 total, 1198704 free, 422460 used, 2260260 buff/cache # 内存信息 KiB Swap: 4063228 total, 4063228 free, 0 used. 3160756 avail Mem # 内存信息 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND # 每个进程占用相关资源的信息 1 root 20 0 125460 3916 2584 S 0.0 0.1 0:02.48 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:01.34 ksoftirqd