Linux 性能监控和调优

qingtang12

贡献于2012-10-19

字数:0 关键词: Linux

嵌入式培训专家 主讲:宋宝华 www.farsight.com.cn Linux性能监控和调优 华清远见 今天的内容 u性能的含义 u常用工具(top/vmstat/iostat/sysctl 等) u高级性能调试手段 Ø oprofile Ø gprofile u内核追踪手段:LTT uLinux实时性 华清远见 性能的含义 一般可以从以下两个角度来衡量系统性能状态: Ø响应时间(Response Time) 从用户的角度来看,系统处于良好的性能状 态是指系统能够快速响应用户的请求,即系统响 应时间短。 具体地说,响应时间是指发出请求的时刻到 用户的请求的相应结果返回用户的时间间隔。 Ø吞吐量(Throughput) 从系统管理员角度来看,系统的吞吐量成为 系统处于良好的性能状态的指标。 华清远见 性能的范畴 uCPU使用 u内存使用 uIO(磁盘)带宽 u网络带宽 u实时性 华清远见 5 性能分析常用工具 华清远见 常用工具-top Øtop命令显示处理器的活动状况。缺省情况下,显示占用 CPU最多的任务,并且每隔5秒钟做一次刷新。 Øsar -u baohua@baohua-laptop:~$ top top -22:53:18 up 25 min, 2 users, load average: 0.60, 0.45, 0.42 Tasks: 114 total, 4 running, 109 sleeping, 0 stopped, 1 zombie Cpu(s): 19.9%us, 3.7%sy, 0.0%ni, 76.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 961844k total, 933756k used, 28088k free, 90800kbuffers Swap: 997880k total, 0k used, 997880k free, 429928kcached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5810 baohua 15 0 154m 37m 16m S 15.3 4.0 1:11.69 totem 5667 baohua 15 0 328m 108m 70m S 4.7 11.5 1:46.23 soffice.bin 5602 baohua 15 0 287m 71m 30m R 3.0 7.6 1:12.42 firefox-bin 2171 root 10 -5 0 0 0 S 0.3 0.0 0:00.47 scsi_eh_0 5774 baohua 15 0 95140 22m 14m R 0.3 2.4 0:00.60 gnome-terminal 1 root 15 0 2948 1856 532 S 0.0 0.2 0:01.23 init 2 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/0 4 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 5 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0 6 root 10 -5 0 0 0 S 0.0 0.0 0:00.05 events/0 7 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khelper 26 root 10 -5 0 0 0 S 0.0 0.0 0:00.01 kblockd/0 华清远见 常用工具-iostat Øiostat命令分析各个磁盘的传输闲忙状况 baohua@baohua-laptop:~$ iostat -t 5 2 Linux 2.6.22-15-generic (baohua-laptop) 2009年06月12日 Time: 22时56分12秒 avg-cpu: %user %nice %system %iowait %steal %idle 19.55 1.26 4.21 18.12 0.00 56.86 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 43.84 750.34 187.00 1294367 322589 Time: 22时56分17秒 avg-cpu: %user %nice %system %iowait %steal %idle 17.60 0.00 4.20 0.20 0.00 78.00 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 5.40 4.80 68.80 24 344 华清远见 常用工具-vmstat Øvmstat 命令报告关于内核线程、虚拟内存、磁盘、 陷阱和CPU 活动的统计信息 baohua@baohua-laptop:~$ vmstat procs -----------memory-------------swap-------io-----system------cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 0 44312 88120 410236 0 0 335 89 375 1463 22 4 58 16 华清远见 常用工具-sar Øsar用于收集、报告或者保存系统活动信息:sar显示数据、sar1和sar2 用于收集和保存数据。 使用sar1和sar2,系统能够配置成自动抓取信息和日志,以备分析使 用。 从收集的信息中,可以得到详细的CPU使用情况(%user, %nice, %system, %idle)、内存页面调度、网络I/O、进程活动、块设备活动 、以及interrupts/second baohua@baohua-laptop:~$ sar -u 3 5 Linux 2.6.22-15-generic (baohua-laptop) 2009年06月12日 23时06分44秒 CPU %user %nice %system %iowait %steal %idle 23时06分47秒 all 16.05 0.00 2.34 0.00 0.00 81.61 23时06分50秒 all 15.72 0.00 3.01 0.00 0.00 81.27 23时06分53秒 all 16.28 0.00 3.65 0.00 0.00 80.07 23时06分56秒 all 22.00 0.00 3.67 0.00 0.00 74.33 23时06分59秒 all 35.67 0.00 9.33 0.00 0.00 55.00 Average: all 21.15 0.00 4.40 0.00 0.00 74.45 华清远见 常用工具-netstat Ønetstat 是用来检测网络信息的工具 baohua@baohua-laptop:~$ netstat Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 baohua-laptop.loc:52394 61.164.60.135:1755 ESTABLISHED tcp 0 1 baohua-laptop.loc:39043 216.239.34.21:www SYN_SENT tcp 0 0 baohua-laptop.loc:53268 173-11-44-147-Minne:www ESTABLISHED tcp 0 1 baohua-laptop.loc:47923 p3nw8sh020.shr.prod:www FIN_WAIT1 Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 3 [ ] DGRAM 19201 /var/run/wpa_supplicant3/eth1 unix 2 [ ] DGRAM 19203 /var/run/NetworkManager/wpa_ctrl_4511-6 unix 2 [ ] DGRAM 8499 @/com/ubuntu/upstart unix 2 [ ] DGRAM 8636 @/org/kernel/udev/udevd unix 2 [ ] DGRAM 15030 @/org/freedesktop/hal/udev_event unix 9 [ ] DGRAM 14827 /dev/log unix 2 [ ] DGRAM 19180 /var/run/wpa_supplicant-global3 unix 3 [ ] STREAM CONNECTED 28301 @/tmp/dbus-blbXx7gr66 华清远见 常用工具-sysctl Øsysctl是一个可用于改变正在运行中的Linux系统的接口 。用sysctl可以读取设置超过几百个系统变量。 Øsysctl –a读取所有变量 Ø实现原理:所有的内核参数在/proc/sys形成一个树状结 构,sysctl系统调用调用到的内核函数是sys_sysctl,匹配 项目后,最后的读写在do_sysctl_strategy中完成,如: ·echo “1” > /proc/sys/net/ipv4/ip_forward 等价于: sysctl –w net.ipv4.ip_forward ="1“ 或者修改/etc/sysctl.conf # Enables packet forwarding net.ipv4.ip_forward = 1 华清远见 Linux 性能调优的几种方法 1、Disabling daemons (关闭 daemons) 2、Shutting down the GUI (关闭GUI) 3、Changing kernel parameters (改变内核参数 ) 4、Kernel parameters (内核参数) 5、Tuning the processor subsystem(处理器子 系统调优) 6、Tuning the memory subsystem (内存子系 统调优) 7、Tuning the file system(文件系统子系统调 优) 8、Tuning the network subsystem(网络子系 统调优) 华清远见 LMbench ØFree software, covered by the GNU General Public License. ØBandwidth benchmarks uCached file read uMemory copy (bcopy) uMemory read uMemory write uPipe uTCP ØLatency benchmarks uContext switching. uNetworking: connection establishment, pipe, TCP, UDP, and RPC hot potato uFile system creates and deletes. uProcess creation. uSignal handling uSystem call overhead uMemory read latency ØMiscellanious uProcessor clock rate calculation 华清远见 LTP ØLinux Test Project是 SGI、IBM、OSDL、Bull 和 Wipro Technologies 合作的项目,目的是为开放源代码团体提供 测试套件,以测试 Linux 的可靠性、健壮性和稳定性。 Linux Test Project 是测试 Linux 内核和相关部件的工具的 集合。目的是通过使内核测试工作自动化来帮助改进 Linux 内核。 华清远见 15 Linux性能分析高级工具 华清远见 oprofile Ø其支持两种采样(sampling)方式:基于事件的采样(event based)和 基于时间的采样(time based)。 •基于事件的采样是oprofile只记录特定事件(比如L2 cache miss)的发生次数,当达到用 户设定的定值时oprofile 就记录一下(采一个样)。这种方式需要CPU 内部有性能计数器 (performace counter)。 •基于时间的采样是oprofile 借助OS时钟中断的机制,每个时钟中断 oprofile 都会记录一 次(采一次样)。引入的目的在于,提供对没有性能计数器 CPU 的支持。其精度相对于基 于事件的采样要低。因为要借助OS时钟中断的支持,对禁用中断的代码oprofile不能对其进 行分析。 Øoprofile在Linux上分两部分,一个是内核模块(oprofile.ko),一个为 用户空间的守护进程(oprofiled)。 •前者负责访问性能计数器或者注册基于时间采样的函数(使用register_timer_hook注册之, 使时钟中断处理程序最后执行profile_tick 时可以访问之),并采样置于内核的缓冲区内。后 者在后台运行,负责从内核空间收集数据,写入文件。 Ø步骤 a. 初始化 opcontrol --init b. 配置 opcontrol --setup --event=... c. 启动 opcontrol --start d. 运行待分析之程序 xxx e. 取出数据 opcontrol --dump opcontrol --stop f. 分析结果 opreport -l ./xxx 华清远见 gprof ØGprof功能: •打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的函 数。 •产生程序运行时候的函数调用关系,包括调用次数,可以帮助程序员分析程序的运行流 程。 ØGprof 实现原理: •通过在编译和链接程序的时候(使用 -pg 编译和链接选项),gcc 在应用程序的每个函数 中都加入名为mcount ( or “_mcount” , or “__mcount” , 依赖于编译器或操作系统)的函数, 也就是说应用程序里的每一个函数都会调用mcount, 而mcount 会在内存中保存一张函数调 用图,并通过函数调用堆栈的形式查找子函数和父函数的地址。这张调用图也保存了所有 与函数相关的调用时间,调用次数等等的所有信息。 ØGprof基本用法: •1. 使用 -pg 编译和链接应用程序。 •2. 执行应用程序使之生成供gprof 分析的数据。 •3. 使用gprof 程序分析应用程序生成的数据。 华清远见 LTT ØLTT是一个用于跟踪系统详细运行状态和流程的工具,它可以跟踪记录系统中 的特定事件。这些事件包括: • 系统调用的进入和退出 • 陷阱/中断(Trap / Irq)的进入和退出 • 进程调度事件 • 内核定时器 • 进程管理相关事件:创建 ,唤醒,信号处理等等 • 文件系统相关事件:Open / Read / Write / Seek / Ioctl 等等 • 内存管理相关事件:内存分配/释放等 • 其他事件:IPC / Socket/ 网络等等 华清远见 MontaVista DevRocket 华清远见 20 Linux实时性 华清远见 实时性 所谓实时,就是一个特定任务的执行时间必须是确定 的,可预测的,并且在任何情况下都能保证任务的时 限(最大执行时间限制)。 Ø软实时:就是对任务执行时限的要求不那么严苛,即使在一些 情况下不能满足时限要求,也不会对系统本身产生致命影响; Ø硬实时:就是对任务的执行时限的要求非常严格,无论在什么 情况下,任务的执行实现必须得到绝对保证,否则将产生灾难性 后果。 华清远见 实时性衡量指标 u中断延迟 从一个外部事件发生到相应的中断处理函数的第一条指令开始执行所需 要的时间。很多实时任务是靠中断驱动的,而且中断事件必须在限定的 时限内处理,否则将产生灾难性后果,因此中断延迟对于实时系统来说 ,是一个非常重要的指标。 u抢占延迟 也称调度延迟,抢占延迟就是从一个外部事件发生到相应的处理该事件 的任务的第一条命令开始执行的时间。大多数实时系统都是处理一些周 期性的或非周期性的重复事件,事件产生的频度就确定了任务的执行时 限,因此每次事件发生时,相应的处理任务必须及时响应处理,否则将 无法满足时限。抢占延迟就反映了系统的响应及时程度。 如果以上两个指标是确定的,可预测的,那么就可以说系统是实时的。 华清远见 Linux进程生命周期 等待队列wait_queues 华清远见 Linux进程调度 Ø进程的类型: a.I/O消耗型 b.CPU消耗型 Ø调度的目标 a.快速响应 b.高吞吐率 Ø抢占调度 Ø非抢占调度 Ø优先级,动态优先级 华清远见 Linux进程调度:调度时机 Øneed_resched标志 a.程序显示调用schedule() b.某进程耗完时间片,scheduler_tick() 设置need_resched标志 c.高优先级的进程进入可执行状态,try_to_wake_up()设置 need_resched标志 Ø用户抢占的发生时刻 a.从内核返回用户空间, need_resched会被检查 b.从中断返回用户空间, need_resched会被检查 Ø内核抢占的发生时刻 a.从中断返回内核,need_resched和preempt_count会被检查, preempt_count在持有锁的时候+1; b.被阻塞或显式调用schedule(); c. preempt_count变为0(内核可抢占)的时候。 华清远见 Linux进程调度:实时进程 ØSCHED_FIFO:没有时间片 ØSCHED_RR:有时间片的SCHED_FIFO ØSCHED_OTHER:动态优先级和时间片 Ø与调度和实时相关的系统调用: 华清远见 Linux进程调度:rt-patch和 RTLinux ØLinux RT preempt patch: Ingo Molnar 下载地址:http://www.kernel.org/pub/linux/kernel/projects/rt/ 设计思想:采用类似Timesys的思想,将IRQ和softIRQ线程化,实时任务可以有比 中断线程更高的优先级;使用mutex替代spinlock来使得自旋锁可抢占。 # ps -A PID TTY TIME CMD 1 ? 00:00:00 init 2 ? 00:00:00 softirq-high/0 ... 18 ? 00:00:00 IRQ 12 19 ? 00:00:00 IRQ 14 20 ? 00:00:00 kjournald 21 ? 00:00:00 IRQ 1 ØRTLinux:FSMLab 子内核方法,把Linux内核作为一个新实现的子内核的闲暇任务,子内核位于Linux 内核和硬件抽象层之间,实时任务运行于子内核之上,只有当没有实时任务需要 运行时,Linux内核才有机会运行。 www.farsight.com.cn 谢谢! The success's road

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 3 人已下载

下载文档

相关文档