• 【FLY】Android IO性能优化


    一、磁盘

    1、基础知识

    大多数现代Linux系统都有一个或多个磁盘驱动。如果它们是IDE驱动,那么常常将被命名为hda、hdb、hdc等;而SCSI驱动则常常被命名为sda、sdb、sdc等。磁盘通常要分为多个分区,分区设备名称的创建方法是在基础驱动名称的后面直接添加分区编号。比如,系统中首个IDE硬驱动的第二个分区通常被标记为/dev/hda2。一般每个独立分区要么包含一个文件系统,要么包含一个交换分区。这些分区被挂载到Linux根文件系统,该系统由/etc/fstab指定。这些被挂载的文件系统包含了应用程序要读写的文件。
    当一个应用程序进行读写时,Linux内核可以在其高速缓存或缓冲区中保存文件的副本,并且可以在不访问磁盘的情况下返回被请求的信息。但是,如果Linux内核没有在内存中保存数据副本,那它就向磁盘I/O队列添加一个请求。若Linux内核注意到多个请求都指向磁盘内相邻的区域,它会把它们合并为一个大的请求。这种合并能消除第二次请求的寻道时间,以此来提高磁盘整体性能。当请求被放入磁盘队列,而磁盘当前不忙时,它就开始为I/O请求服务。如果磁盘正忙,则请求就在队列中等待,直到该设备可用,请求将被服务。

    2、vmstat

    vmstat可以提供系统整体上的I/O性能情况。

    usage: vmstat [-n] [DELAY [COUNT]]
    Print virtual memory statistics, repeating each DELAY seconds, COUNT times.
    (With no DELAY, prints one line. With no COUNT, repeats until killed.)
    Show processes running and blocked, kilobytes swapped, free, buffered, and
    cached, kilobytes swapped in and out per second, file disk blocks input and
    output per second, interrupts and context switches per second, percent
    of CPU time spent running user code, system code, idle, and awaiting I/O.
    First line is since system started, later lines are since last line.
    -n      Display the header only once
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    vmstat中与IO相关的字段包括bi(file disk blocks input per second)、bo(file disk blocks output per second)、wa(percent of CPU time spent awaiting I/O)。
    下面是vmstat 1 10的输出。
    在这里插入图片描述

    3、iostat

    iostat是一个专门用于显示磁盘I/O子系统统计信息的工具。

    Usage: iostat [-c] [-d] [-t] [-z] [-k|-m] [ALL|BLOCKDEV...] [INTERVAL [COUNT]]
    Report CPU and I/O statistics
        -c      Show CPU utilization
        -d      Show device utilization
        -t      Print current time
        -z      Omit devices with no activity
        -k      Use kb/s
        -m      Use Mb/s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    下面是iostat的默认输出。
    在这里插入图片描述

    4、iotop

    iotop根据IO使用情况进行排序。

    Usage: iotop [-h] [-P] [-d ] [-n ] [-s ]
    -a  Show byte count instead of rate
    -d  Set the delay between refreshes in seconds.
    -h  Display this help screen.
    -m  Set the number of processes or threads to show
    -n  Set the number of refreshes before exiting.
    -P  Show processes instead of the default threads.
    -s  Set the column to sort by:
    pid, read, write, total, io, swap, sched, mem or delay.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    下面是iotop -d 1 -m 5 -n 3的输出。
    在这里插入图片描述

    5、lsof

    lsof提供了一种方法来确定哪些进程打开了一个特定的文件。

    usage: lsof [-lt] [-p PID1,PID2,...] [FILE...]
    List all open files belonging to all active processes, or processes using
    listed FILE(s).
    -l      list uids numerically
    -p      for given comma-separated pids only (default all pids)
    -t      terse (pid only) output
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    下面是lsof -p pid_surfaceflinger的部分输出。
    在这里插入图片描述

    6、Android dumpsys

    Android中dumpsys diskstats命令可以查看当前用户数据分区的使用情况。
    下面是dumpsys diskstats的输出。
    在这里插入图片描述

    二、网络

    1、基础知识

    在网络层次结构的最低几层,Linux可以侦测到流经链路层的数据流量的速率。链路层,通常是以太网,以帧序列的形式将信息发送到网络上。即便是其上层次的信息片段的大小比帧大很多,链路层也会将它们分割为帧,再发送到网络上。数据帧的最大尺寸被称为最大传输单位(MTU)。你可以使用网络配置工具,如ip或ifconfig来设置MTU。对以太网而言,最大大小一般为1500字节,虽然有些硬件支持的巨型帧可以高达9000字节。MTU的大小对网络效率有直接影响。链路层上的每一个帧都有一个小容量的头部,因此,使用大尺寸的MTU就提高了用户数据对开销(头部)的比例。但是,使用大尺寸的MTU,每个数据帧被损坏或丢弃的几率会更高。对清洁物理链路来说,大尺寸MTU通常会带来更好的性能,因为它需要的开销更小;反之,对嘈杂的链路来说,更小的MTU则通常会提升性能,因为,当单个帧被损坏时,它要重传的数据更少。
    在物理层,帧流经物理网络,Linux内核可以收集大量有关帧数量和类型的不同统计数据:

    • 发送/接收——如果一个帧成功地流出或流入机器,那么它就会被计为一个已发送或已接收的帧。
    • 错误——有错误的帧(可能是因为网络电缆坏了,或双工不匹配)。
    • 丢弃——被丢弃帧的(很可能是因为内存或缓冲区容量小)。
    • 溢出——由于内核或网卡有过多的帧,因此被网络丢弃的帧。通常这种情况不应该发生。
    • 帧——由于物理级问题导致被丢弃的帧。其原因可能是循环冗余校验(CRC)错误或其他低级别的问题。
    • 多播——这些帧不直接寻址到当前系统,而是同时广播到一组节点。
    • 压缩——一些底层接口,如点对点协议(PPP)或串行线路网际协议(SLIP)设备在把帧发送到网络上之前,会对其进行压缩。该值表示的就是被压缩帧的数量。
      对TCP或UDP流量而言,Linux使用套接字/端口来抽象两台机器的连接。当与远程机器连接时,本地应用程序用一个网络套接字来打开远程机器上的一个端口。常见网络服务都有约定的端口号,因此,给定的应用程序就能连接到远程机器的正确端口上。比如,端口80通常用于HTTP。在加载一个Web页面时,浏览器就连接到远程机器的80端口上。远程机器上的Web服务器监听80端口上的连接,当连接发生时,Web服务器就为Web页面的传输设置该连接。

    2、常用工具

    ifconfig
    ip
    netsat
    ping
    iptables
    tcpdump
    Android Studio Profiler

  • 相关阅读:
    xctf攻防世界 MISC之CatFlag
    Java EE——定时器
    [NCTF 2018]flask真香
    HummerRisk V1.4.1 发布
    Python in Visual Studio Code 2023年10月发布
    R语言时间序列数据算术运算:使用diff函数计算时间序列数据的逐次差分、使用除法将两个长度不等时间序列数据进行相除、使用固定值乘以指定的时间序列
    POJ 3684 Physics Experiment 弹性碰撞
    zabbix 7.0 SNMP Hex数据预处理新功能
    健康防猝指南1:体重和减肥的秘密
    容器编排工具之Kubernetes -- k8s
  • 原文地址:https://blog.csdn.net/iEearth/article/details/126828540