精华内容
下载资源
问答
  • 本文介绍了一些优化Linux系统资源和加快启动速度途径。
  • 本文介绍了Linux操作系统的优化方法
  • 对于MySQL数据库,优化查询的方法1.使用索引使用索引时,应尽量避免全表扫描,首先应考虑在 where 及 order by ,group by 涉及的列上建立索引。2.优化SQL语句1)分析查询语句:通过对查询语句的分析,可以了解查询...

    对于MySQL数据库,优化查询的方法

    1.使用索引

    使用索引时,应尽量避免全表扫描,首先应考虑在 where 及 order by ,group by 涉及的列上建立索引。

    2.优化SQL语句

    1)分析查询语句:通过对查询语句的分析,可以了解查询语句执行情况,找出查询语句执行的瓶颈,从而优化查询语句。

    通过explain(查询优化神器)用来查看SQL语句的执行结果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。

    例如:explain select * from news;

    2)任何地方都不要使用select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

    3)不在索引列做运算或者使用函数。

    4)查询尽可能使用 limit 减少返回的行数,减少数据传输时间和带宽浪费。

    3.优化数据库对象

    1)优化表的数据类型

    使用 procedure analyse()函数对表进行分析,该函数可以对表中列的数据类型提出优化建议。表数据类型第一个原则是:使用能正确地表示和存储数据的最短类型。这样可以减少对磁盘空间、内存、CPU缓存的使用。

    使用方法:select * from 表名 procedure analyse();

    2)对表进行拆分

    通过拆分表可以提高表的访问效率。有两种拆分方法:

    a.垂直拆分(按照功能模块)

    将表按照功能模块、关系密切程度划分出来,部署到不同的库上。例如:我们会建立定义数据库workDB、商品数据库payDB、用户数据库userDB等,分别用于存储项目数据定义表、商品定义表、用户数据表等。

    把主键和一些列放在一个表中,然后把主键和另外的列放在零一个表中。如果一个表中某些列常用,而另外一个些不常用,则可以采用垂直拆分。

    570a437f6992b63b5ea06d2defe438ce.png

    b.水平拆分(按照规则划分存储)

    当一个表中的数据量过大时,我们可以把该表的数据按照某种规则进行划分,例如userID散列,然后存储到多个结构相同的表和不同的库中。

    根据一列或者多列数据的值吧数据行放到两个独立的表中。

    6e5babbc93188f73bdca2afa7c5edb87.png

    3)使用中间表来提高查询速度

    创建中间表,表结构和源表结构完全相同,转移要统计的数据到中间表,然后在中间表上进行统计,得出想要的结果。

    4.硬件优化

    1)CPU优化

    选择多核和主频高的CPU。

    2)内存的优化

    使用更大的内存。将尽量多的内存分配给MySQL做缓存。

    3)磁盘I/O的优化

    a.使用磁盘阵列

    RAID 0没有数据冗余,没有数据校验的磁盘陈列。实现RAID 0至少需要两块以上的硬盘,它将两块以上的硬盘合并成一块,数据连续地分割在每块盘上。

    RAID 1是将一个两块硬盘所构成RAID硬盘阵列,其容量仅等于一块硬盘的容量,因为另一块只是当作数据“镜像”。

    使用RAID-0+1磁盘阵列。RAID 0+1是RAID 0和RAID 1的组合形式。它在提供与RAID 1一样的数据安全保障的同时,也提供了与RAID 1近似的存储性能。

    b.调整磁盘调度算法

    选择合适的磁盘调度算法,可以减少磁盘的寻道时间。

    5.MySQL自身的优化

    对MySQL自身的优化主要是对其配置文件my.cnf中的各项参数进行优化调整。如指定MySQL查询缓冲区的大小,指定MySQL允许的最大连接进程数等。

    6.应用优化

    1)使用数据库连接池

    2)实用查询缓存

    它的作用是存储 select 查询的文本及其相应结果。如果随后收到一个相同的查询,服务器会从查询缓存中直接得到查询结果。查询缓存适用的对象是更新不频繁的表,当表中数据更改后,查询缓存中的相关条目就会被清空。0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • linux系统优化方法

    2017-12-09 22:03:00
    新装centos系统刚开始是不能工作,需要进行初步基础优化 1、网络优化,修改ip地址,网关,主机名,DNS vim /etc/sysconfig/network-scripts/ifcfg-eth0 vim /etc/sysconfig/network vim /etc/resolv.conf service...

    新装centos系统刚开始是不能工作的,需要进行初步基础优化

    1、网络优化,修改ip地址,网关,主机名,DNS
        vim /etc/sysconfig/network-scripts/ifcfg-eth0   
        vim /etc/sysconfig/network   
        vim /etc/resolv.conf
        service network restart

    2、关闭selinux,防火墙优化,可以选择关闭,或者调整防火墙规则
        sed –i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
        setenforce 0
        iptables –F
        serviece iptables restart

    3、添加普通用户,进行sudo授权
        useradd 用户名
        echo "123456" | passwd --stdin 用户名 && history –c
        visudo(这个工具可以防止两个用户同时更改这个文件)
            在root    ALL=(ALL)    ALL此行下,添加如下内容
            用户名    ALL=(ALL)    ALL

    4、更新yum源以及相关服务软件
        将国外的yum源改为国内的yum源,如网易,阿里
          /etc/yum.repos.d/
          yum clean all
          yum makecache
          yum install screen -y 这个工具用来后台执行任务
          yum  upgrade -y  (
            不要升级系统内核,在/etc/yum.conf文件中[main]最后添加以下两项:
            exclude=kernel*
            exclude=centos-release*)

    5、定时更新服务器时间,校准

      请点击此链接

    6、精简开机启动选项
        刚装完操作系统可以只保留crond,network,rsyslog,sshd这四个服务。
        for sun in `chkconfig --list | grep "3:on" | awk '{print $1}'`;do
            chkconfig --level 3 $sun off;
        done
        for sun in crond rsyslog sshd network;do
            chkconfig --level 3 $sun on;
        done
        chkconfig --list|grep 3:on

    7、变更默认的ssh服务端口,禁止root用户远程连接
        cp  /etc/ssh/sshd_config  /etc/ssh/sshd_config.bak
        vim /etc/ssh/sshd_config
            Port 22022       #ssh连接默认的端口
            PermitRootLogin no   #root用户黑客都知道,禁止它远程登录
            PermitEmptyPasswords no #禁止空密码登录
            UseDNS no            #不使用DNS,禁止DNS反向解析
            service sshd reload
            重新以普通用户登录

    8、锁定关键文件系统(选用)

        # chattr +i /etc/passwd /etc/shadow /etc/groupp /etc/gshadow
        将系统中的passwd,shadow,group.gshadow等关键命令加i权限进行锁定。
        一旦锁定之后,即使是root用户也无法对这些文件进行操作。

        命令lsattr可以查看文件是否被锁定,如:
        # lsattr /etc/passwd

        要想对这些锁定的文件进行解锁,必须要先解锁这些文件。解锁文件则需要使用下面的命令:
        # chattr -i /etc/passwd /etc/shadow/etc/group /etc/gshadow

        除此之外,还可以对关键性的命令如chattr修改文件名,从而使常规命令无法在系统中进行相应的操作。
        # mv /usr/bin/chattr /usr/bin/long
        则需要使用chattr命令时,实际需要采用long命令


    10、调整文件描述符大小(每个进程能打开的最大文件数量)
        ulimit  –n
        echo '*  -  nofile  65535' >> /etc/security/limits.conf
        或者:
        vi /etc/security/limits.conf
            * soft nofile 65535
            * hard nofile 65535
            * soft nproc 65535
            * hard nproc 65535
            * soft nofile 65535
            * hard nofile 65535

     调整完成需要重启机器才能生效。

     

    11、关闭重启ctl-alt-delete组合键
        vi /etc/init/control-alt-delete.conf
        注释掉
        #exec /sbin/shutdown -r now "Control-Alt-Deletepressed"

     

    12、设置TMOUT环境变量

      在/etc/profile.d/创建TMOUT.sh, 添加以下内容:

          export TMOUT=900    # 设置900秒内用户无操作就字段断开终端
          readonly TMOUT     # 将值设置为readonly 防止用户更改


    13、系统内核优化

      暂未研究,后续更新

     

    转载于:https://www.cnblogs.com/choyaooo/p/8012908.html

    展开全文
  • linux系统优化的方法

    2017-09-05 17:01:00
    1.安装系统时精简安装(最小化安装) ...4.优化系统内核参数/etc/sysctl.conf. 5.增加系统文件描述符、堆栈等配置。 6.禁止root远程登录、修改ssh端口为特殊端口,禁止DNS,空密码 有外网IP...

    1.安装系统时精简安装(最小化安装)

    2.配置国内高速yum源。

    wget http://mirrors.sohu.com/help/CentOS-Base-sohu.repo

    3.禁用开机不需要的启动服务。

    4.优化系统内核参数/etc/sysctl.conf.

    5.增加系统文件描述符、堆栈等配置。

    6.禁止root远程登录、修改ssh端口为特殊端口,禁止DNS,空密码

    有外网IP的机器要开启配置防火墙,仅对外开启需要提供服务的端口,配置或关闭selinux

    7.清除无用的默认系统账户或组(添加运维成员的用户)

    8锁定敏感文件,如/etc/passwd(chattr +i /etc/passwd  然后无法再创建用户)

    (lsattr /etc/passwd)

    9配置服务器和互联网时间同步(定时任务)

    10配置sudo对普通用户权限精细控制(配置sudo)

    11把以上10点写成一键优化脚本。

     

    转载于:https://www.cnblogs.com/xiaoyongzhuo/p/7479545.html

    展开全文
  • 嵌入式Linux 系统优化的那些事儿嵌入式Linux 系统启动优化时间测量工具以及用法 Printk Times – 用于显示每个 printk 执行时间配置 CONFIG_PRINTK_TIME Kernel hacking –> Show timing information on printks...

    嵌入式Linux 系统启动优化的那些事儿

    嵌入式Linux 系统优化的那些儿事之系统启动时间的优化方法。。

    嵌入式Linux 系统时间测量工具以及用法

    • Printk Times – 用于显示每个 printk 的执行时间
      • 配置
        CONFIG_PRINTK_TIME
        Kernel hacking –> Show timing information on printks
      • 结果
        dmesg > boot.log
        [
        3.038027] Memory: 3154176k/3325940k available …
        [
        3.042366] SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=32, Nodes=1
        [
        3.050169] Hierarchical RCU implementation.
        [
        3.050558] RCU-based detection of stalled CPUs is enabled.
        [
        3.066428] console [ttyS0] enabled, bootconsole disabled
        [
        3.066965] Calibrating delay loop… 166.40 BogoMIPS (lpj=332800)

      • 分析
        scripts/show_delta boot.log | cut -d’ ’ -f2- | sort -k3 -gr
        < 3.179683 >] 0000:01:00.0: eth0: (PCI Express:2.5GB/s:Width x1) …
        < 1.834118 >] Initializing cgroup subsys cpuset
        < 1.555749 >] IP-Config: Complete:
        < 0.463878 >] Memory: 3154176k/3325940k available …
        < 0.119374 >] Initrd not found or empty - disabling initrd
        < 0.111845 >] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled

      • 避免丢失内核日志: CONFIG_LOG_BUF_SHIFT=21

      • 在printk中打印时间戳:kernel/printk.c: vprintk()

        if (printk_time) {
        ...
        t = cpu_clock(printk_cpu);
        nanosec_rem = do_div(t, 1000000000);
        tlen = sprintf(tbuf, "[%5lu.%06lu] ",
        (unsigned long) t,
        nanosec_rem / 1000);
        ...
        }
        
      • cpu_clock()调用sched_clock()

      • 时间单位us,但有些平台精度只有10ms
      • 默认实现:直接通过jiffies转换

        如果HZ=100,jiffies单位为1/HZ, 即10ms
        kernel/sched_clock.c: __weak sched_clock()
        return (unsigned long long)(jiffies - INITIAL_JIFFIES) * (NSEC_PER_SEC / HZ);
        
      • 高精度sched_clock():读硬件时钟计数器,如果时钟频率为400M,精度达2.5ns

        arch/x86/kernel/tsc.c: native_sched_clock()
        /* read the Time Stamp Counter: */
        rdtscll(this_offset);
        /* return the value in ns */
        return __cycles_2_ns(this_offset);

      • 潜在问题:计数器溢出?include/linux/cnt32_to_63.h

      • 相关信息:http://elinux.org/Printk_Times
    • 内核函数跟踪(Ftrace) – 用于报告内核中每个函数的调用时间。详细用法见Ftrace 简介

    • Linux 跟踪工具箱(LTT) – 用于报告确切的内核和进程事件的时间数据。
    • Oprofile(译注:最新替代品是 perf) – 通用的 Linux 分析器(Profile) - 详细用法见间Oprofile
    • Bootchart – 用于 Linux 启动过程的性能分析和数据展示。收集启动过程中的用户空间部分的资源使用情况和进程信息,然后渲染成 PNG、SVG 或者 EPS 格式的图表。
    • Bootprobe – 一组用于分析系统启动过程的 System Tap 脚本
    • 当然,别忘了 cat /proc/uptime (译注:统计系统已经运行的时间)
    • grabserial – Tim Bird (译注:CE Linux Forum 主席)写的一个非常赞的工具用于记录控制台输出并打上时间戳
    • 进程跟踪 –- 同样是 Tim Bird 写的一个简单补丁,用于记录 exec、fork 和 exit 系统调用。
    • ptx_ts – Pengutronix 的时间戳记录器(TimeStamper):一个简单的过滤器,可前置时间戳到标准输出(STDOUT)上,有点像 grabserial 但是不限于串口。
    • Initcall(内核初始化函数)调试 – 一个用于显示 initcalls 所花时间的内核命令行选项
    • 也可以看下: Kernel 检测工具,里头列举了一些已知的内核检测工具,这些对于测量内核启动时间来说可能会有帮助。

    基础常规优化方法

    • 禁用内核的IP地址自动配置
      net/ipv4/ipconfig.c: ip_auto_config() 1.58s
      /* Wait for devices to appear */
      err = wait_for_devices();
      if (err)
      return err;
      /* Setup all network devices */
      err = ic_open_devs();
      if (err)
      return err;
      /* Give drivers a chance to settle */
      ssleep(CONF_POST_OPEN); /* 1s */
      • 禁用办法
        不传递ip参数给内核
        禁用内核配置:CONFIG_IP_PNP*
      • 延迟到用户态配置IP地址:/etc/init.d/rcS
        将IP配置相关放在启动后交于业务去做这些事情。
      • 思路:分开两个相互依赖的操作,消除不必要的IO等待时间
    • 减少或禁用pseudo终端设备
      drivers/tty/pty.c: pty_init() 0.65 s
      • pseudo终端:用于远程连接(ssh)或者X下的虚拟终端(xterm)
      • 减少设备个数:LEGACY_PTY_COUNT=2
      • 直接禁用:UNIX98_PTYS, LEGACY_PTYS
      • 思路:根据实际需要减少或停用某些功能
    • 关闭控制台输出
      • 打印日志信息到控制台很耗时
        控制台设备:VGA、Framebuffer、串口
      • 关闭控制台输出
        关闭部分输出: quiet参数, console_loglevel=4
        关闭所有输出:loglevel=0,副作用:错误也不显示
      • 禁用控制台设备: e.g. 如果产品基于X11
        CONFIG_{SERIAL*,VGA*, FB}=n
      • 完全禁用printk:副作用:不能收集错误日志
        CONFIG_{EARLY_PRINTK, PRINTK}=n
        e.g. #define panic(…) do { } while (0) or loop or reboot
      • 效果:提速30 ˜ 60%
      • 思路:考虑研发阶段和产品阶段的不同需求
    • 计算loops_per_jiffy
      {u,n}delay(): 根据loops_per_jiffy执行相应的nops
      loops_per_jiffy: 每个jiffy需要执行的nop次数
      1个jiffy = 1/HZ = 10ms (HZ = 100)
      tick_periodic() -> do_timer(1) -> jiffies_64 += 1;
      loops_per_jiffy计算:init/calibrate.c: calibrate_delay()
      最慢:calibrate_delay_converge(): 250ms
      最快:启动一次记录下来,下次直接传lpj参数给内核
      $ dmesg | grep lpj
      … calculated using timer frequency.. (lpj=7181976)
      • 问题:下次启动时处理器主频变了怎么办?
      • 解决办法:实现不基于loops_per_jiffy的{u,n}delay()
        新办法:读取硬件计数器直到delay的时长:e.g. delay_tsc()
        在delay_tsc()里头设置lpj_fine
      • 思路:1、以静制动;2、转变思维方式寻求突破
    • 采用更快的内核解压算法

      • 为减少内核大小,一般都会对内核进行压缩

        算法 内核大小 解压时间
        不压缩 3.24M -
        LZO 1.76M 0.552s
        Gzip 1.62M 0.775s
        Bzip2
        LZMA
        XZ ? ?

        表1:不同压缩算法的解压速度比较

      • 数据来源:http://free-electrons.com/blog/lzo-kernel-compression/

      • 解压最快:LZO; 压缩比最高:XZ (针对可执行文件优化)
      • 不压缩:拷贝时间?从哪里拷贝?多大?够小无须压缩。
      • 思路:在不同需求之间进行权衡
    • 减少内核大小

      • 内核(未压缩的)越小,拷贝快,功能可能也少,执行快
      • 减少内核大小的详细方法见《减少系统和程序的大小》
      • 思路:启动速度的影响因素是多方面的
    • 减少或者消除动态探测

      • 基本思想:类似传lpj给内核避免计算loops_per_jiffy
        思想扩展
        把“不变”参数作为binary,类似DTB,传给内核
        把“不变”参数定义成宏等数据,重编译内核,例
        如:arch/mips/include/asm/cpu-features.h
      • 可采用的对象
        处理器:大部分属性都是固定的,比如tlbsize,
        cachesize等feature
        PCI:PCI的外设不变的情况下,可把各外设的配置定死
      • 效果:减少Probe过程,如果重编译,还可减少内核大小,
        减少大量分支跳转以及由此相应的分支预测失败等
      • 思路:以静制动

    统筹考虑整个启动过程
    - 一般启动过程:man boot
    硬件开机、重启、软件重启(reboot)
    BIOS(EFI)、Boot Loader(U-boot)
    OS Loader in MBR: Lilo, Grub
    装载Linux: cp.b, tftp
    启动Linux: boot, bootm
    运行Linux: 初始化、内核线程
    进入用户态
    - 优化后
    硬件开机、重启、软件重启(reboot)
    完成必要的硬件初始化: X-loader
    Kexecboot: 装载、启动、运行Linux并进入用户态
    - 切换其他Linux
    - 效果:减少若干秒
    - 思路:从整体上考虑问题

    • 更多内核启动加速方法
      • 快速重启: 直接装载、启动、运行Linux并进入用户态
        Kexec: Documentation/kdump/kdump.txt
        reboot=soft (?)
      • 快速分配内存:内存预留(mem, reserve_bootmem)映射(ioremap)后直接使用
      • 优化内存拷贝:DMA方式从Flash拷贝内核到RAM
      • initcalls优化
        串行转并行:异步API: http://lwn.net/Articles/314808/
        延迟initcalls到用户态: http://elinux.org/Deferred_Initcalls
      • 全速(或超速)启动、重启
        确保处理器在启动过程中全速运行,刚初始化时就设置处理器主频为全速
        在处理器启动过程中禁用变频、idle和节能模式
      • 设备驱动特定的优化

    加快程序运行速度

    • Init 进程
      • SysV init
        串行地启动预先配置好的服务
        启动下一个时需要等前一个完成
      • upstart
        基于事件驱动,基于系统状态的改变启用和停用相应的任务
        e.g. /etc/init/cron.conf
        start on runlevel [2345]
        stop on runlevel [!2345]

        exec cron
      • systemd
        基于socket和D-Bus激活来启动服务
        按需启动daemons,类似xinetd
    • 追踪Init启动服务过程
      • 在内核态跟踪进程执行
        在系统调用kernel/exec.c: sys_exec()入口打印时间戳
        可以用scripts/show_delta统计分析
      • bootchart
        统计资源利用率和各个进程的执行情况,导出SVG结果
        启动阶段资源利用率越高越好
      • timechart
        统计更多信息,结果更详细,导出SVG结果
        tools/perf/builtin-timechart.c
    • 从休眠的映像文件启动内核
      • 休眠接口:/sys/power/state
      • 开发:启动内核和必须的应用,把系统休眠到磁盘或者Flash设备中,产生一个休眠映像文件
        echo disk > /sys/power/state
      • 产品:启动内核,直接从休眠映像文件恢复系统
      • 效果:无需重新一个一个地启动程序,只需要恢复到一个早期休眠到内存的系统状态
    • 预读:readahead与tmpfs
      • readahead
        预先读取文件到内存中
        减少iowait
        用法:sys_readahead(), readahead-list
      • tmpfs
        Documentation/filesystems/tmpfs.txt
        tmpfs:内存中的文件系统+no swap
        如果内存足够可以考虑把程序预先复制到tmpfs中
    • 使用更快的文件系统
      • 文件系统影响程序的IO操作
      • Squashfs v.s. CramFS
      • UBIFS v.s. JFFS2
      • Reiser4 v.s. Ext3
      • XFS(mount) v.s. JFS(cpu utilization)
      • 文件系统操作属性:async,noatime,nodirtime,relatime
      • 文件系统性能评测:Dbench, Bonnie++, IOzone, Flexible,IO Tester
    • 使用更小的执行文件
      • 可执行文件更小,启动更快,占用内存更少
      • ash v.s. bash
      • busybox
      • buildroot
    • 编译器优化
      • 常规:-O2, -O3
      • gcc 4.5新特性:-flto
      • 处理器特定优化:-march=, -mtune=
      • 使用处理器优化指令: liboil
      • 更多参数:http://en.wikipedia.org/wiki/Compiler_optimization
      • 装载大量共享连接库很耗时
      • 一般情况下可执行文件和共享连接库不变
      • prelink通过修改可执行文件和共享连接库预先链接
      • 减少动态链接的开销
      • 更多信息:http://elinux.org/Pre_Linking
    • 优化程序本身
      • 记录程序执行时间: time
        $ time find /var/log/ -name “test” > /dev/null
        real 0m0.006s
        user 0m0.004s
        sys 0m0.000s
      • 跟踪程序函数执行开销: gprof
      • 跟踪程序代码执行覆盖情况:gcov
        -: 35:int main(int argc, char **argv)
        function main called 3 returned 100% blocks executed 60%
        3: 36:{
        3: 37: if (argc < 2) {
        #####: 38: a();
        -: 39: } else {
        3: 40: b();
        -: 41: }
        -: 42:}
      • 跟踪Cache miss, branch miss, page fault, tlb miss等:oprofile, perf, valgrind
        • Cache miss: cacheline对齐。
        • branch miss: 消除不必要分支,通过gcov把执行多的branch调到前面或者用likely。
        • page fault: mlock/munlock防止swap出去。
        • tlb miss: 增加page大小。

    优化系统调用和库函数

    • 优化库函数 Ltrace.

      • 用法:e.g. ltrace -T -f -o ltrace.log ls -l
      • ltrace跟踪可执行文件调用的系统库文件
      • pre_load(LD_PRELOAD)优化过后的函数,如memcpy

        $ ltrace -c -f ls -l
        % time seconds usecs/call calls function


        24.88 0.020998 42 491 strlen
        10.64 0.008981 41 216 __ctype_get_mb_cur_max
        9.02 0.007613 45 166 __overflow
        8.75 0.007388 47 156 __errno_location
        7.67 0.006472 41 156 memcpy
        5.33 0.004497 55 81 strcoll


        100.00 0.084397 1733 total

    • 优化系统调用: strace .

      • 用法:e.g. strace -T -f -o strace.log ls -l
      • 减少fork/exec,合并程序成applet
      • 优化shell程序:去掉不必要的pipe, pipe也使用fork/exec
      • 减少不必要的系统调用
      • fast system call: e.g. MIPS syscall指令有预留的指令域,
        可以用于实现快速系统调用,比如模拟rdtsc,在用户态读
        取硬件时钟计数器
    • 优化内核函数: Ftrace/Kgcov.
      • Ftrace: Documentation/trace/ftrace.txt
        Ftrace可以跟踪内核的函数执行情况
        执行程序前后开关Ftrace可追踪程序运行时的内核执行路径
        优化跟程序相关的内核路径
      • Kgcov: Documentation/gcov.txt
        内核代码覆盖率测试
        lgcov:把测试结果转换成HTML格式方便浏览和分析

    减少内核大小和内存使用

    • 内核配置.
      • 默认关闭所有配置: make allnoconfig
      • 开启一些必须的配置选项: lspci, lsusb…
      • 通过CONFIG_EMBEDDED去掉某些功能: futex?
      • 开启内核和initramfs压缩支持: lzo, lzma, gzip, bzip2, xz
      • 采用支持压缩的文件系统: squashfs, ubifs
      • 去掉内核调试支持: 调试功能、调试符号
      • 去掉模块支持?
      • -Os: CONFIG_CC_OPTIMIZE_FOR_SIZE
      • strip -X: CONFIG_STRIP_ASM_SYMS
    • Linux-Tiny.
      • 目标:致力于降低内核大小和内存开销
      • 下载:http://elinux.org/Linux_Tiny
      • 策略
        让更多选项可配置
        删除内核消息(printk, BUG, panic, die)
        不内联inline函数:性能跟大小折中
        内存分配: Slob v.s. slab
        减少内存数据结果大小:性能与大小折中
        相同功能的简单实现:BFS v.s. CFS
    • 降低内存消耗.
      • initramfs v.s initrd
        no block
        no filesystem
        no duplication
      • strip -x: 删除non-global符号,模块的non-global符号可删除
      • strip -s: 删除所有符号; strip -S: 删除跟调试相关符号
      • sstrip(来自buildroot): 删除可执行文件的section table
      • objcopy -O binary: 仅保留可直接执行的二进制映像
      • section garbage collection patchset
        -ffunction-sections -fdata-sections and -gc-sections
      • 动态probing转静态definition
      • 去掉更多的内核特性
        系统调用: ptrace
        内核和模块参数支持
        让某些宏可配置:NR_IRQS, COMMAND_LINE_SIZE…
        多选一:多个重复功能选其中一个,比如emulated
        FPU和hardware FPU
      • 减少长调用:-mno-long-calls, 合并内核和模块空间

    降低系统功耗

    • Tickless Kernel(Dynamic Ticks)
      • 配置:CONFIG_NO_HZ
      • HZ: 周期性的发出中断以便进行任务调度而支持多任务
      • NO_HZ: 时钟中断按需发出, Idle时无时钟中断
      • include/linux/clockchips.h: clock_event_device()
        CLOCK_EVT_FEAT_ONESHOT
        set_next_event
      • 2.6.24: 支持X86, ARM, MIPS和PowerPC架构
    • Powertop
      • 监测频繁唤醒系统的内核和应用
      • 提供一些减少功耗的建议
    • 其他节能措施
      • CPUFreq
        处理器支持多级频率支持且可软件调节
        自动调节策略:governor用户态可配置
        实现驱动:配置可调节频率范围和操作底层寄存器
      • 挂起隐藏的GUI
        Suspend: kill -SIGTSTP
        Resume: kill -SIGCONT
      • 软件休眠与挂起
        休眠到Disk: echo disk > /sys/power/state
        挂起到内存:echo mem > /sys/power/state
        设备驱动支持:dev_pm_ops: suspend/resume
      • 视频输出控制:video_output子系统
      • 背光控制: backlight子系统
      • 无线射频:rfkill子系统

    提高系统响应能力

    • 测试系统响应延迟
      yclictest: git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git
      • 更换调度策略
        BFS v.s. CFS
        低延迟桌面:PREEMPT
      • 中断线程化
      • 降低某些长中断处理的优先级
        request_threaded_irq()
      • 调整任务优先级:nice, chrt
      • 绑定任务到处理器:taskset
      • 资源分配:Session cgroup, ulimit

    文章引用自吴老师的ppt;

    展开全文
  • 嵌入式linux快速启动的一些优化的方法,主要是要掌握嵌入式linux系统的启动流程,以便能够在优化时有所指引。 下面是一些总结: 嵌入式linux系统快速启动的优化主要是硬件和软件。 1硬件: 1.1因为在系统启动的...
  • linux oracle 非常规的优化 非常规手段的优化: 1)由于P740只有物理16core cpu,CPU使用率到了65%,LOAD 接近40。为了LGWR可以任意时刻获取CUP资源,设置了_high_priority_processes 参数,保证LGWR可以随时获得CPU...
  • 《常见Linux系统优化方法,关闭不必要的服务》  2013-07.08 `  系统优化的方法,除了关闭防火墙,关闭 SElinux,去掉sshd配置里面的IP鉴权,加上 fstab 里面的 default,noatime 参数外, 还可以参考...
  • Linux系统中文件传输优化的几种方法 ####1、scp#### 远程复制: scp file root@ip:dir ##上传(dir为绝对路径) scp root@ip:file dir ##下载 ####2.rsync远程同步命令使用#### 注意:/mnt与/mnt/区别 /mnt...
  • Linux系统中对SSD硬盘优化的方法 2011-10-1 笑看风云 硬件 这里说的优化是针对EXT4格式,因为看了很多国外网站的很多读写评测,目前来说,EXT4在SSD硬盘是最快的,所以推荐使用SSD硬盘的使用EXT4格式。优化...
  • linux系统优化

    2020-03-02 17:29:26
    不管你想在你linux中跑什么,那也都是建立在linux操作系统之上,我们都知道xxx服务需要进行各种各样的优化,而在那之前,linux系统优化同样不能省略。 安全优化 1 linux中安全子系统是默认打开,若非有必要...
  • Linux内核配置与文件系统的优化方法研究,Linux内核配置与文件系统的优化方法研究
  • 系统优化的方法,除了关闭防火墙,关闭SElinux,去掉sshd配置里面的IP鉴权,加上fstab里面的default,noatime参数外,还可以参考下面说明关闭一些不必要的系统服务使用chkconfig--list|grep:on可以查看到(在RH系...
  • Linux系统性能优化思路和方法

    千次阅读 2018-09-28 20:35:08
    #影响Linux性能CPU、内存、磁盘、网络等因素分析 1.系统硬件资源:CPU,多核与超线程 消耗CPU业务:动态WEB服务,Mail服务器 2.内存:物理内存与swap取舍,64操作系统 消耗内存业务:内存数据库(Redis、...
  • 在测试虚拟机往分布式存储中写数据的最大性能时,做的一些系统修改 ...3、查看当前系统的I/O调度算法  cat /sys/block/sdb/queue/scheduler   4、IO的算法修改成noop,操作系统本身不做处理,让SSD本身处...
  • linux系统软件安装方法 1. yum安装 格式: yum [options] [command] [package ...] 安装: yum install yum install package1 yum groupinstall group1 更新和升级: yum update yum update package1 yum check...
  • Linux系统优化基础和系统监控

    万次阅读 2017-09-26 20:01:11
    一些linux的系统优化方法
  • scp远程复制 ...将 westos1 文件上传到了 ip地址为172.25.80.200/mnt 目录下了,到172.25.80.200/mnt 目录下进行查看: 上传/mnt目录到 ip地址为172.25.80.200/mnt 目录下: 然后到1...
  • Linux系统优化

    2014-07-18 17:59:52
    作为一名linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行,但是由于硬件问题、软件问题、网络环境等的复杂性和多变性,导致对系统的优化变得异常复杂,如何定位性能问题出在哪个方面...
  • Linux系统的FTP安全优化 FTP FTP(File Transfer Protocol,文件传输协议) 是 INTERNET上仍常使用的最老的网络协议之一,也是TCP/IP 协议组中的协议之一它为系统提供了通过网络与远程服务器进行传输的简单方法 ...
  • 参考资料: ...Linux系统的基础优化讲解 1.关闭SELinux(类似防火墙的安全机制,安全用别的方案解决) 方法1:vim修改 vim /etc/selinux/config (使SELINUX=disabled,彻底关掉) 方法2:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,486
精华内容 594
关键字:

优化linux系统的方法

linux 订阅