介绍

本文将对Linux常用的各种命令进行介绍。

alias

说明: 为了支持在shell脚本中使用alias命令对其他命令进行重命名

shopt –s expand_aliases   #可以这样进行enable

ascii

说明: 得到一个完整的ASCII表,有对应的16进制和10进制的值

# man ascii

ausyscall

说明: 查看系统调用名和调用号的映射

# ausyscall  --dump

Read More

介绍

  1. CPU负责程序指令的执行,内存负责数据的存储,但CPU的执行速度远大于内存的访问速度, 为了缓和两者之间的速度差异,于是CPU Cache就应运而生了。

  2. CPU Cache由硬件实现,速度介于寄存器和内存之间,系统会把经常使用的数据放到Cache中, 当对相同数据进行多次操作时,就可以避免从内存中获取数据,而直接从CPU Cache中获取数据,这样就会提高程序性能。

  3. CPU Cache 在高级语言(C,C++,Java等)程序员的角度来看,它是透明的,无法直接干预它, 也无法察觉它是如何运行的,因为它是完全依赖硬件设施来实现的。但是,我们可以利用它, 在并发编程中善于运用CPU Cache,会给程序性能带来“质”的提升。

本文主要通过3个知识点入口,每个知识点将结合一个程序来说明CPU Cache的工作原理及相关技术。

Read More

介绍

  1. 首先,本文将对3种体系结构的内存访问方式进行介绍,分别为:
    • 对称多处理器结构 (SMP:Symmetric Multi-Processor)
    • 海量并行处理结构 (MPP:Massive Parallel Processing)
    • 非一致存储访问结构 (NUMA:Non-Uniform Memory Access)
  2. 然后,通过3种不同体系结构的内存访问实现原理,来对比它们在性能、扩展以及应用方面的优缺点。

  3. 最后,对NUMA结构的内存分配策略以及如何使用numactl工具优化程序进行介绍。

在详细介绍不同体系架构的内存访问方式之前,先对CPU的相关概念、各种总线技术以及内存带宽等概念进行介绍。

Read More

介绍

Linux操作系统中的内存管理分为两个部分:

  • 物理内存的管理:该部分由Linux内核的buddy系统和slab分配器合作管理, 管理着物理内存资源的分配及回收。

  • 虚拟内存的管理:该部分由Glibc进行管理,给用户层提供了多个关于内存管理方面的函数, 其中malloc()和free()最为常用。

本文主要讨论Glibc对虚拟内存的管理,分为如下几个部分:

  • 首先,通过对Glibc的内存管理机制进行研究,认识到某些情况下不适合用Glibc来管理内存, 因为其设计的管理机制在某些情况下可能导致内存泄露、大量的内存碎片、内存暴增等问题。

  • 然后,通过一些案例来说Glibc管理机制的特性以及如何运用适当的方法来规避Glibc在某些 情况下对内存管理的缺陷。

Read More

介绍

  1. 本文主要通过一个简单实例来引发对函数调用过程的说明。
  2. 为了深入理解函数调用过程,主要从汇编代码的角度去剖析它。
  3. 通过一个实例来扩展对函数调用的理解。

Read More

介绍

###关于debuginfo的疑惑

程序员应该都知道,为了能够使用gdb跟踪程序,需要在编译期使用gcc的-g选项。 而对于系统库或是Linux内核,使用gdb调试或使用systemtap探测时,还需要安装相应的debuginfo包。

Read More

介绍

  1. irqbalance 服务用于自动优化硬件中断分配。它通过对定期采集(每隔10秒采集一次) 的系统数据(CPU softirq和irq负载)进行分析,根据分析的结果来修改文件(/proc/irq/N/smp_affinity) 的值(即改变中断号的亲属性),从而达到优化硬件中断分配的目的。

  2. irqbalance分为两种模式:Performance mode(默认模式)和 Power-save mode。 1) Performance mode时,irqbalance会将中断尽可能均匀地分配给每个CPU,从而充分利用CPU多核特性来提升性能。 2) Power-save mode时,irqbalance会将中断集中分配给某个CPU,从而保证其它空闲 CPU的睡眠时间,降低系统能耗。

Read More