性能调优攻略|系统调优

来源:互联网 发布:最小公倍数的算法 编辑:程序博客网 时间:2024/05/01 14:03

1/ I/O 模型

我们都知道,Unix/Linux 下把所有的设备都当成文件来进行 I/O,所以大部分操作都是 I/O 相关的系统调用。主要的 I/O 方式如下:

  1. 同步阻塞式 I/O;

  2. 同步无阻塞式;

  3. I/O 异步;

  4. AIO 方式。这种 I/O 模型是一种处理与I/O 并行的模型。I/O 请求会立即返回,说明请求已经成功发起。

AIO 方式因为没有任务的阻塞,无论是 I/O,还是事件通知上,都可以充分利用 CPU,比起同步无阻塞好处就是不需要轮询。

Nignx 的高效,就是通过使用 epoll 的 AIO 方式来进行 I/O 的。

2/ 多核CPU 调优

关于 CPU 的多核技术,我们知道,CPU0是很关键,如果0号 CPU 利用率比较高,则性能下降比较利害,因为 CPU0具有调整功能,所以,不能任由操作系统负载均衡。通过手动分配 CPU 核,让其不过多占用 CPU0,或者通过分离关键进程和非关键进程各占其核。

多核CPU 还有一个技术叫 NUMA 技术(Non-Uniform Memory Access)。传统的多核运算是使用 SMP(Symmetric Multi-Processor)模型,多个处理器共享一个集中的存储器和I/O 总线。因此才会有一致存储器访问的问题,一致性意味着性能问题。

性能调优攻略|系统调优

在 Linux 下,对 NUMA 调优的命令是:numactl。如下面的命令:(指定命令“program arg1 arg2”运行在node 0 上,其内存分配在node 0 和 1上)

numactl --cpubind=0 --membind=0,1 program arg1 arg2

上面这个命令并不好,因为内存跨越了两个node,这非常不好。最好的方式是只让程序访问和自己运行一样的node,如:

numactl --membind 1 --cpunodebind 1 --localalloc application

3/ 文件系统调优

关于文件系统,因为文件系统也是有 cache 的,所以,为了文件系统有最大的性能。首要的事情就是分配足够大的内存,这个非常关键,在 Linux 下可以使用 free 命令来查看 free/used/buffers/cached,总的来说,buffers 和 cached 应该有40%左右。目前速度比较快还 Intel SSD 固态硬盘,但是写次数有限。

对于文件系统调优,是通过修改配置,对于 Linux 的 Ext3/4来说,几乎在所有情况下都有所帮助的一个参数是关闭文件系统访问时间,在/etc/fstab 下可以看文件系统有没有 noatime 参数,还有一个是 dealloc,它可以让系统在最后时刻决定写入文件发生时使用哪个块,可优化这个写入程序。

对于日志模式:joumal、ordered、writeback。默认设置 data=ordered 提供性能和防护之间的最佳平衡。对于 Ext4默认设置基本上是最佳优化了。

在 Linux 下查看 I/O 的使用——iotop,可以帮助你查看各个进程的磁盘读写负载情况。

4/ 总结

真正提高 I/O 性能方式是把和外设 I/O 的次数降到最低,最好没有。通常对于读来说,内存 cache 可以从质上提升性能,因为内存比外设快太多。对于写来说,cache 主要写的数据,少写几次,但是 cache 带来的问题就是实时性的问题,也就是 Latency 会变大。我们就需要在写的次数上做相应平衡。

谢谢!大家读完此文,欢迎大家留言讨论系统调优过程中还有哪些解决方案。

0 0
原创粉丝点击