深入浅出Android dmabuf_dump工具

打印 上一主题 下一主题

主题 629|帖子 629|积分 1887

目录
dmabuf是什么?
dmabuf_dump工具介绍(基于Android 14)
Android.bp
dmabuf_dump.cpp
团体架构结构如下
dmabuf_dump主要包含以下功能
前置背景知识
fdinfo
思考
bufinfo
Dump整个手机体系的dmabuf
Dump某个进程的dmabuf​​​​​​​
以Table[buffer x process]方式出现dmabuf
Dump整个体系DMA-BUF per-buffer, per-exporter and per-device statistics
DMA_BUF 在内核中的实现
dmabuf_dump原理分析
源码路径:
DmaBuffer
主要成员变量
FD和Inode的关系
dump整个体系流程原理
ReadDmaBufFdRefs
AddFdRef
ReadDmaBufMapRefs
AddMapRef
dmabuf_dump
dmabuf_dump -a
dmabuf_dump -b
代码流程
dmabuf的运用
实例分析
背景
解决方案
加tracepoint
tracepoint实现patch
使用simpleperf抓取dmabuf申请点所有backtrace
举例
Provider进程基于vendor.qti.hardware.display.allocator-service申请驻留分析


dmabuf是什么?

 可以参考我之前写的一篇文章,在这篇文章中有介绍dma_buf:BufferManager_驱动的buffermanager-CSDN博客


dmabuf_dump工具介绍(基于Android 14)

dmabuf_dump是一个可执行文件,接收参数调用libdmabufinfo.a的接口完成dump功能,源码在:system/memory/libmeminfo/libdmabufinfo/tools/
安卓源代码目录下主要有下面2个文件,一个 Android.bp ,一个是 dmabuf_dump.cpp
Android.bp

  
  1. // Copyright (C) 2019 The Android Open Source Project
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. //      http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package {
  15.     default_applicable_licenses: ["Android-Apache-2.0"],
  16. }
  17. cc_binary {
  18.     name: "dmabuf_dump",
  19.     cflags: [
  20.         "-Wall",
  21.         "-Werror",
  22.     ],
  23.     srcs: ["dmabuf_dump.cpp"],
  24.     shared_libs: [
  25.         "libbase",
  26.     ],
  27.     static_libs: [
  28.         "libdmabufinfo",
  29.     ],
  30.     vendor_available: true,
  31. }
复制代码

dmabuf_dump.cpp

  
  1. xref: /mivendor_u_sm8650/system/memory/libmeminfo/libdmabufinfo/tools/dmabuf_dump.cpp (revision unknown)
  2. HomeHistoryAnnotateLine# Scopes# Navigate#Raw Download
  3.   current directory
  4. /*
  5. * Copyright (C) 2019 The Android Open Source Project
  6. *
  7. * Licensed under the Apache License, Version 2.0 (the "License");
  8. * you may not use this file except in compliance with the License.
  9. * You may obtain a copy of the License at
  10. *
  11. *      http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing, software
  14. * distributed under the License is distributed on an "AS IS" BASIS,
  15. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. * See the License for the specific language governing permissions and
  17. * limitations under the License.
  18. */
  19. #include <dirent.h>
  20. #include <errno.h>
  21. #include <getopt.h>
  22. #include <inttypes.h>
  23. #include <stdio.h>
  24. #include <stdlib.h>
  25. #include <unistd.h>
  26. #include <fstream>
  27. #include <iostream>
  28. #include <map>
  29. #include <set>
  30. #include <sstream>
  31. #include <string>
  32. #include <vector>
  33. #include <android-base/stringprintf.h>
  34. #include <dmabufinfo/dmabufinfo.h>
  35. #include <dmabufinfo/dmabuf_sysfs_stats.h>
  36. using DmaBuffer = ::android::dmabufinfo::DmaBuffer;
  37. [[noreturn]] static void usage(int exit_status) {
  38.     fprintf(stderr,
  39.             "Usage: %s [-abh] [per-process/per-buffer stats] \n"
  40.             "-a\t show all dma buffers (ion) in big table, [buffer x process] grid \n"
  41.             "-b\t show DMA-BUF per-buffer, per-exporter and per-device statistics \n"
  42.             "-h\t show this help\n"
  43.             "  \t If PID is supplied, the dmabuf information for that process is shown.\n"
  44.             "  \t Per-buffer DMA-BUF stats do not take an argument.\n",
  45.             getprogname());
  46.     exit(exit_status);
  47. }
  48. static std::string GetProcessComm(const pid_t pid) {
  49.     std::string pid_path = android::base::StringPrintf("/proc/%d/comm", pid);
  50.     std::ifstream in{pid_path};
  51.     if (!in) return std::string("N/A");
  52.     std::string line;
  53.     std::getline(in, line);
  54.     if (!in) return std::string("N/A");
  55.     return line;
  56. }
  57. static void PrintDmaBufTable(const std::vector<DmaBuffer>& bufs) {
  58.     if (bufs.empty()) {
  59.         printf("dmabuf info not found ¯\\_(ツ)_/¯\n");
  60.         return;
  61.     }
  62.     // Find all unique pids in the input vector, create a set
  63.     std::set<pid_t> pid_set;
  64.     for (auto& buf : bufs) {
  65.         pid_set.insert(buf.pids().begin(), buf.pids().end());
  66.     }
  67.     // Format the header string spaced and separated with '|'
  68.     printf("    Dmabuf Inode |            Size |   Fd Ref Counts |  Map Ref Counts |");
  69.     for (auto pid : pid_set) {
  70.         printf("%16s:%-5d |", GetProcessComm(pid).c_str(), pid);
  71.     }
  72.     printf("\n");
  73.     // holds per-process dmabuf size in kB
  74.     std::map<pid_t, uint64_t> per_pid_size = {};
  75.     uint64_t dmabuf_total_size = 0;
  76.     // Iterate through all dmabufs and collect per-process sizes, refs
  77.     for (auto& buf : bufs) {
  78.         printf("%16ju |%13" PRIu64 " kB |%16zu |%16zu |",
  79.                static_cast<uintmax_t>(buf.inode()), buf.size() / 1024, buf.fdrefs().size(),
  80.                buf.maprefs().size());
  81.         // Iterate through each process to find out per-process references for each buffer,
  82.         // gather total size used by each process etc.
  83.         for (pid_t pid : pid_set) {
  84.             int pid_fdrefs = 0, pid_maprefs = 0;
  85.             if (buf.fdrefs().count(pid) == 1) {
  86.                 // Get the total number of ref counts the process is holding
  87.                 // on this buffer. We don't differentiate between mmap or fd.
  88.                 pid_fdrefs += buf.fdrefs().at(pid);
  89.             }
  90.             if (buf.maprefs().count(pid) == 1) {
  91.                 pid_maprefs += buf.maprefs().at(pid);
  92.             }
  93.             if (pid_fdrefs || pid_maprefs) {
  94.                 // Add up the per-pid total size. Note that if a buffer is mapped
  95.                 // in 2 different processes, the size will be shown as mapped or opened
  96.                 // in both processes. This is intended for visibility.
  97.                 //
  98.                 // If one wants to get the total *unique* dma buffers, they can simply
  99.                 // sum the size of all dma bufs shown by the tool
  100.                 per_pid_size[pid] += buf.size() / 1024;
  101.                 printf("%9d(%6d) refs |", pid_fdrefs, pid_maprefs);
  102.             } else {
  103.                 printf("%22s |", "--");
  104.             }
  105.         }
  106.         dmabuf_total_size += buf.size() / 1024;
  107.         printf("\n");
  108.     }
  109.     printf("------------------------------------\n");
  110.     printf("%-16s  %13" PRIu64 " kB |%16s |%16s |", "TOTALS", dmabuf_total_size, "n/a", "n/a");
  111.     for (auto pid : pid_set) {
  112.         printf("%19" PRIu64 " kB |", per_pid_size[pid]);
  113.     }
  114.     printf("\n");
  115.     return;
  116. }
  117. static void PrintDmaBufPerProcess(const std::vector<DmaBuffer>& bufs) {
  118.     if (bufs.empty()) {
  119.         printf("dmabuf info not found ¯\\_(ツ)_/¯\n");
  120.         return;
  121.     }
  122.     // Create a reverse map from pid to dmabufs
  123.     std::unordered_map<pid_t, std::set<ino_t>> pid_to_inodes = {};
  124.     uint64_t userspace_size = 0;  // Size of userspace dmabufs in the system
  125.     for (auto& buf : bufs) {
  126.         for (auto pid : buf.pids()) {
  127.             pid_to_inodes[pid].insert(buf.inode());
  128.         }
  129.         userspace_size += buf.size();
  130.     }
  131.     // Create an inode to dmabuf map. We know inodes are unique..
  132.     std::unordered_map<ino_t, DmaBuffer> inode_to_dmabuf;
  133.     for (auto buf : bufs) {
  134.         inode_to_dmabuf[buf.inode()] = buf;
  135.     }
  136.     uint64_t total_rss = 0, total_pss = 0;
  137.     for (auto& [pid, inodes] : pid_to_inodes) {
  138.         uint64_t pss = 0;
  139.         uint64_t rss = 0;
  140.         printf("%16s:%-5d\n", GetProcessComm(pid).c_str(), pid);
  141.         printf("%22s %16s %16s %16s %16s\n", "Name", "Rss", "Pss", "nr_procs", "Inode");
  142.         for (auto& inode : inodes) {
  143.             DmaBuffer& buf = inode_to_dmabuf[inode];
  144.             printf("%22s %13" PRIu64 " kB %13" PRIu64 " kB %16zu %16" PRIuMAX "\n",
  145.                    buf.name().empty() ? "<unknown>" : buf.name().c_str(), buf.size() / 1024,
  146.                    buf.Pss() / 1024, buf.pids().size(), static_cast<uintmax_t>(buf.inode()));
  147.             rss += buf.size();
  148.             pss += buf.Pss();
  149.         }
  150.         printf("%22s %13" PRIu64 " kB %13" PRIu64 " kB %16s\n", "PROCESS TOTAL", rss / 1024,
  151.                pss / 1024, "");
  152.         printf("----------------------\n");
  153.         total_rss += rss;
  154.         total_pss += pss;
  155.     }
  156.     uint64_t kernel_rss = 0;  // Total size of dmabufs NOT mapped or opened by a process
  157.     if (android::dmabufinfo::GetDmabufTotalExportedKb(&kernel_rss)) {
  158.         kernel_rss *= 1024;  // KiB -> bytes
  159.         if (kernel_rss >= userspace_size)
  160.             kernel_rss -= userspace_size;
  161.         else
  162.             printf("Warning: Total dmabufs < userspace dmabufs\n");
  163.     } else {
  164.         printf("Warning: Could not get total exported dmabufs. Kernel size will be 0.\n");
  165.     }
  166.     printf("dmabuf total: %" PRIu64 " kB kernel_rss: %" PRIu64 " kB userspace_rss: %" PRIu64
  167.            " kB userspace_pss: %" PRIu64 " kB\n ",
  168.            (userspace_size + kernel_rss) / 1024, kernel_rss / 1024, total_rss / 1024,
  169.            total_pss / 1024);
  170. }
  171. static void DumpDmabufSysfsStats() {
  172.     android::dmabufinfo::DmabufSysfsStats stats;
  173.     if (!android::dmabufinfo::GetDmabufSysfsStats(&stats)) {
  174.         printf("Unable to read DMA-BUF sysfs stats from device\n");
  175.         return;
  176.     }
  177.     auto buffer_stats = stats.buffer_stats();
  178.     auto exporter_stats = stats.exporter_info();
  179.     printf("\n\n----------------------- DMA-BUF per-buffer stats -----------------------\n");
  180.     printf("    Dmabuf Inode |     Size(bytes) |             Exporter Name             |\n");
  181.     for (const auto& buf : buffer_stats) {
  182.         printf("%16lu |%" PRIu64 " | %16s \n", buf.inode, buf.size, buf.exp_name.c_str());
  183.     }
  184.     printf("\n\n----------------------- DMA-BUF exporter stats -----------------------\n");
  185.     printf("      Exporter Name              | Total Count |     Total Size(bytes)   |\n");
  186.     for (const auto& it : exporter_stats) {
  187.         printf("%32s | %12u| %" PRIu64 "\n", it.first.c_str(), it.second.buffer_count,
  188.                it.second.size);
  189.     }
  190.     printf("\n\n----------------------- DMA-BUF total stats --------------------------\n");
  191.     printf("Total DMA-BUF count: %u, Total DMA-BUF size(bytes): %" PRIu64 "\n", stats.total_count(),
  192.            stats.total_size());
  193. }
  194. int main(int argc, char* argv[]) {
  195.     struct option longopts[] = {{"all", no_argument, nullptr, 'a'},
  196.                                 {"per-buffer", no_argument, nullptr, 'b'},
  197.                                 {"help", no_argument, nullptr, 'h'},
  198.                                 {0, 0, nullptr, 0}};
  199.     int opt;
  200.     bool show_table = false;
  201.     bool show_dmabuf_sysfs_stats = false;
  202.     while ((opt = getopt_long(argc, argv, "abh", longopts, nullptr)) != -1) {
  203.         switch (opt) {
  204.             case 'a':
  205.                 show_table = true;
  206.                 break;
  207.             case 'b':
  208.                 show_dmabuf_sysfs_stats = true;
  209.                 break;
  210.             case 'h':
  211.                 usage(EXIT_SUCCESS);
  212.             default:
  213.                 usage(EXIT_FAILURE);
  214.         }
  215.     }
  216.     pid_t pid = -1;
  217.     if (optind < argc) {
  218.         if (show_table || show_dmabuf_sysfs_stats) {
  219.             fprintf(stderr, "Invalid arguments: -a and -b does not need arguments\n");
  220.             usage(EXIT_FAILURE);
  221.         }
  222.         if (optind != (argc - 1)) {
  223.             fprintf(stderr, "Invalid arguments - only one [PID] argument is allowed\n");
  224.             usage(EXIT_FAILURE);
  225.         }
  226.         pid = atoi(argv[optind]);
  227.         if (pid == 0) {
  228.             fprintf(stderr, "Invalid process id %s\n", argv[optind]);
  229.             usage(EXIT_FAILURE);
  230.         }
  231.     }
  232.     if (show_dmabuf_sysfs_stats) {
  233.         DumpDmabufSysfsStats();
  234.         return 0;
  235.     }
  236.     std::vector<DmaBuffer> bufs;
  237.     if (pid != -1) {
  238.         if (!ReadDmaBufInfo(pid, &bufs)) {
  239.             fprintf(stderr, "Unable to read dmabuf info for %d\n", pid);
  240.             exit(EXIT_FAILURE);
  241.         }
  242.     } else {
  243.         if (!ReadProcfsDmaBufs(&bufs)) {
  244.             fprintf(stderr, "Failed to ReadProcfsDmaBufs, check logcat for info\n");
  245.             exit(EXIT_FAILURE);
  246.         }
  247.     }
  248.     // Show the old dmabuf table, inode x process
  249.     if (show_table) {
  250.         PrintDmaBufTable(bufs);
  251.         return 0;
  252.     }
  253.     PrintDmaBufPerProcess(bufs);
  254.     return 0;
  255. }
复制代码
团体架构结构如下

   

  
dmabuf_dump主要包含以下功能


  • Dump整个体系DMA-BUF per-buffer, per-exporter and per-device statistics(dmabuf_dump -b),在kernel版本>= 5.10上见效。
  • Dump整个体系的dmabuf info (dmabuf_dump)
  • Dump某个PID的dmabuf info (dmabuf_dump )
  • 以Table[buffer x process]方式出现dmabuf info (dmabuf_dump -a)

前置背景知识


  • Rss的含义:是当前段现实加载到物理内存中的大小。
  • Pss 指的是:进程按比例分配当前段所占物理内存的大小。
  • 下面dump整个手机体系在某一时刻的 dmabuf信息,可以看到有 binder进程的dmabuf信息、surfaceflinger进程的dmabuf信息、system_server进程的dmabuf信息等等。
  • nr_procs是指有多少个进程在使用这块dmabuf。
  • Name是指dmabuf的名字
  • Inode是这块 dmabuf的唯一标识,注意Inode是全局唯一的。
  • PROCESS TOTAL 是统计 Rss 或者 Pss的总和。
  • dmabuf total 是整个体系dambuf的总和
  • userspace_rss 是用户空间 rss的总和。
  • userspace_pss 是用户空间 pss的总和。
  • kernel_rss 目前初步以为是 内核空间rss的总和,但不特殊准确,这个kernel_rss大有来头,后面有时间详细深度剖析。真实的项目过程中,会偶先 kernel_rss占用过大,或泄露的情况,这种问题还特殊难分析和解决。

fdinfo

/proc/<pid>/fdinfo/ 下面的所有fd,针对每个fd读取如下信息:


  • count
  • exp_name,有exp_name则表示是 dmabuf 的file。
  • name
  • size
  • ino:inode
以下是camera provider的 fdinfo
  1. wj@wj:~/Downloads$ adb shell ps -e | grep camera
  2. cameraserver  1601     1   14307344 680656 binder_ioctl_write_read 0 S vendor.qti.camera.provider-service_64
  3. cameraserver  2785     1    2720288  25620 binder_ioctl_write_read 0 S cameraserver
  4. u0_a139      11065  1444    9305388 343752 do_epoll_wait       0 S com.android.camera
  5. wj@wj:~/Downloads$ adb shell
  6. aurora:/ # cd /proc/1601/fdinfo/                                                                                                                                                                                 
  7. aurora:/proc/1601/fdinfo # ls
  8. 0   110  1137  117  123  15  19  22  26  3   33   36   383  399  406  43  47  50  54   56  6   63  67   7   73   745  751  79  82  899
  9. 1   111  114   118  124  16  2   23  27  30  336  37   384  4    407  44  48  51  55   57  60  64  68   70  731  748  76   8   84  9
  10. 10  112  115   121  13   17  20  24  28  31  34   38   386  40   41   45  49  52  557  58  61  65  687  71  74   75   77   80  85
  11. 11  113  116   122  14   18  21  25  29  32  35   382  39   400  42   46  5   53  558  59  62  66  69   72  743  750  78   81  86
复制代码
可以看到 fdinfo 有以下这些:
  1. aurora:/proc/1601/fdinfo # ls
  2. 0   110  1137  117  123  15  19  22  26  3   33   36   383  399  406  43  47  50  54   56  6   63  67   7   73   745  751  79  82  899
  3. 1   111  114   118  124  16  2   23  27  30  336  37   384  4    407  44  48  51  55   57  60  64  68   70  731  748  76   8   84  9
  4. 10  112  115   121  13   17  20  24  28  31  34   38   386  40   41   45  49  52  557  58  61  65  687  71  74   75   77   80  85
  5. 11  113  116   122  14   18  21  25  29  32  35   382  39   400  42   46  5   53  558  59  62  66  69   72  743  750  78   81  86
复制代码
思考

我们知道每一个进程都有一个 fd,用户空间差别进程的 fd,是可以共享内核空间的同一块 dmabuf的,那么怎么样找到进程 fd 和对应 dmabuf的对应关系呢?
那么这个时候 inode 就要出场了,因为 dmabuf的inode是唯一确定的,所以这个时候我们可以把同一时刻的,这个进程的 dmabuf_dump给 dump下来,如下所示。
  1. wj@wj:~$ adb shell ps -e | grep camera
  2. cameraserver  1601     1   14307344 680656 binder_ioctl_write_read 0 S vendor.qti.camera.provider-service_64
  3. cameraserver  2785     1    2720288  25620 binder_ioctl_write_read 0 S cameraserver
  4. u0_a139      11065  1444    9305388 343752 do_epoll_wait       0 S com.android.camera
  5. wj@wj:~$ adb shell dmabuf_dump 1601
  6. vendor.qti.came:1601
  7.                   Name              Rss              Pss         nr_procs            Inode
  8.                 system             4 kB             4 kB                1              134
  9.                 system             4 kB             4 kB                1              135
  10.                 system             4 kB             4 kB                1              723
  11.                 system             4 kB             4 kB                1              724
  12.                 system             4 kB             4 kB                1              725
  13.                 system          4320 kB          4320 kB                1              727
  14.                 system           736 kB           736 kB                1              729
  15.                 system           148 kB           148 kB                1              731
  16.                 system         32768 kB         32768 kB                1              733
  17.                 system             4 kB             4 kB                1              996
  18.                 system             4 kB             4 kB                1             1010
  19.                 system             4 kB             4 kB                1             1011
  20.                 system           736 kB           736 kB                1             1017
  21.                 system           148 kB           148 kB                1             1019
  22.                 system          6848 kB          6848 kB                1             1342
  23.                 system          1024 kB          1024 kB                1             1359
  24.                 system         32768 kB         32768 kB                1             1363
  25.                 system             4 kB             4 kB                1             1367
  26.                 system             4 kB             4 kB                1             1371
  27.                 system             4 kB             4 kB                1             1372
  28.          PROCESS TOTAL         79540 kB         79540 kB                 
  29. ----------------------
  30. dmabuf total: 298652 kB kernel_rss: 219112 kB userspace_rss: 79540 kB userspace_pss: 79540 kB
复制代码

然后我们可以用 grep -nr 命令进行查察,如下所示:
  1. aurora:/proc/1601/fdinfo # grep -nr 733                                                                                                                                                                           
  2. ./124:4:ino:        733
  3. aurora:/proc/1601/fdinfo # grep -nr 1372                                                                                                                                                                          
  4. ./751:4:ino:        1372
复制代码
 inode为733的dmabuf 所对应的进程为:124
 inode为1372的dmabuf所对应的进程为:751

bufinfo

我们可以通过获取 bufferinfo 来获取 dmabuf的详细信息。
adb shell cat /sys/kernel/debug/dma_buf/bufinfo
  1. wj@wj:~/Downloads$ adb shell cat /sys/kernel/debug/dma_buf/bufinfo
  2. Dma-buf Objects:
  3. size            flags           mode            count           exp_name        ino             name
  4. 00032768        00000002        00080007        00000002        qcom,system        00002275        qcom,system
  5.         Attached Devices:
  6. Total 0 devices attached
  7. 00770048        00000002        00080007        00000001        qcom,system        00002274        qcom,system
  8.         Attached Devices:
  9. Total 0 devices attached
  10. 00032768        00000002        00080007        00000002        qcom,system        00002273        qcom,system
  11.         Attached Devices:
  12. Total 0 devices attached
  13. 00770048        00000002        00080007        00000001        qcom,system        00002272        qcom,system
  14.         Attached Devices:
  15. Total 0 devices attached
  16. 00032768        00000002        00080007        00000002        qcom,system        00002271        qcom,system
  17.         Attached Devices:
  18. Total 0 devices attached
  19. 00770048        00000002        00080007        00000001        qcom,system        00002270        qcom,system
  20.         Attached Devices:
  21. Total 0 devices attached
  22. 00032768        00000002        00080007        00000004        qcom,system        00002269        qcom,system
  23.         Attached Devices:
  24. Total 0 devices attached
  25. 10522624        00000002        00080007        00000004        qcom,system        00002268        qcom,system
  26.         Attached Devices:
  27.         kgsl-3d0
  28.         kgsl-3d0
  29. Total 2 devices attached
  30. 00032768        00000002        00080007        00000002        qcom,system        00002267        qcom,system
  31.         Attached Devices:
  32. Total 0 devices attached
  33. 10522624        00000002        00080007        00000001        qcom,system        00002266        qcom,system
  34.         Attached Devices:
  35. Total 0 devices attached
  36. 00032768        00000002        00080007        00000002        qcom,system        00002265        qcom,system
  37.         Attached Devices:
  38. Total 0 devices attached
  39. 10522624        00000002        00080007        00000001        qcom,system        00002264        qcom,system
  40.         Attached Devices:
  41. Total 0 devices attached
  42. 00032768        00000002        00080007        00000002        qcom,system        00002263        qcom,system
  43.         Attached Devices:
  44. Total 0 devices attached
  45. 10522624        00000002        00080007        00000001        qcom,system        00002262        qcom,system
  46.         Attached Devices:
  47. Total 0 devices attached
  48. 00032768        00000002        00080007        00000004        qcom,system        00002261        qcom,system
  49.         Attached Devices:
  50. Total 0 devices attached
  51. 10522624        00000002        00080007        00000004        qcom,system        00002260        qcom,system
  52.         Attached Devices:
  53.         kgsl-3d0
  54.         kgsl-3d0
  55. Total 2 devices attached
  56. 00032768        00000002        00080007        00000004        qcom,system        00002249        qcom,system
  57.         Attached Devices:
  58. Total 0 devices attached
  59. 10522624        00000002        00080007        00000003        qcom,system        00002248        qcom,system
  60.         Attached Devices:
  61.         kgsl-3d0
  62. Total 1 devices attached
  63. 00032768        00000002        00080007        00000004        qcom,system        00002188        qcom,system
  64.         Attached Devices:
  65. Total 0 devices attached
  66. 10444800        00000002        00080007        00000003        qcom,system        00002187        qcom,system
  67.         Attached Devices:
  68.         kgsl-3d0
  69. Total 1 devices attached
  70. 00004096        00000002        00080007        00000003        system        00002039        system
  71.         Attached Devices:
  72.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb5
  73. Total 1 devices attached
  74. 00004096        00000002        00080007        00000003        system        00002034        system
  75.         Attached Devices:
  76.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb5
  77. Total 1 devices attached
  78. 00004096        00000002        00080007        00000003        system        00002033        system
  79.         Attached Devices:
  80.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb5
  81. Total 1 devices attached
  82. 33554432        00000002        00080007        00000003        system        00002029        system
  83.         Attached Devices:
  84.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb5
  85. Total 1 devices attached
  86. 00151552        00000002        00080007        00000003        system        00002025        system
  87.         Attached Devices:
  88.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb5
  89. Total 1 devices attached
  90. 00106496        00000002        00080007        00000002        system        00002018        system
  91.         Attached Devices:
  92. Total 0 devices attached
  93. 00753664        00000002        00080007        00000003        system        00002017        system
  94.         Attached Devices:
  95.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb5
  96. Total 1 devices attached
  97. 07012352        00000002        00080007        00000003        system        00002008        system
  98.         Attached Devices:
  99.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb5
  100. Total 1 devices attached
  101. 00004096        00000002        00080007        00000003        system        00002005        system
  102.         Attached Devices:
  103.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb5
  104. Total 1 devices attached
  105. 00004096        00000002        00080007        00000003        system        00002004        system
  106.         Attached Devices:
  107.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb5
  108. Total 1 devices attached
  109. 00004096        00000002        00080007        00000003        system        00001958        system
  110.         Attached Devices:
  111.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb5
  112. Total 1 devices attached
  113. 00032768        00000002        00080007        00000002        qcom,system        00001953        qcom,system
  114.         Attached Devices:
  115. Total 0 devices attached
  116. 10444800        00000002        00080007        00000001        qcom,system        00001952        qcom,system
  117.         Attached Devices:
  118. Total 0 devices attached
  119. 00032768        00000002        00080007        00000002        qcom,system        00001502        qcom,system
  120.         Attached Devices:
  121. Total 0 devices attached
  122. 10522624        00000002        00080007        00000002        qcom,system        00001501        qcom,system
  123.         Attached Devices:
  124.         kgsl-3d0
  125. Total 1 devices attached
  126. 00073728        00000002        00080007        00000002        qcom,system        00001460        qcom,system
  127.         Attached Devices:
  128. Total 0 devices attached
  129. 02506752        00000002        00080007        00000002        qcom,system        00001459        qcom,system
  130.         Attached Devices:
  131.         kgsl-3d0
  132. Total 1 devices attached
  133. 00004096        00000002        00080007        00000003        system        00001372        system
  134.         Attached Devices:
  135.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb4
  136. Total 1 devices attached
  137. 00004096        00000002        00080007        00000003        system        00001371        system
  138.         Attached Devices:
  139.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb4
  140. Total 1 devices attached
  141. 00004096        00000002        00080007        00000003        system        00001367        system
  142.         Attached Devices:
  143.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb4
  144. Total 1 devices attached
  145. 33554432        00000002        00080007        00000003        system        00001363        system
  146.         Attached Devices:
  147.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb4
  148. Total 1 devices attached
  149. 01048576        00000002        00080007        00000003        system        00001359        system
  150.         Attached Devices:
  151.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb4
  152. Total 1 devices attached
  153. 07012352        00000002        00080007        00000003        system        00001342        system
  154.         Attached Devices:
  155.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb4
  156. Total 1 devices attached
  157. 00151552        00000002        00080007        00000003        system        00001019        system
  158.         Attached Devices:
  159.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb4
  160. Total 1 devices attached
  161. 00753664        00000002        00080007        00000003        system        00001017        system
  162.         Attached Devices:
  163.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb4
  164. Total 1 devices attached
  165. 00004096        00000002        00080007        00000002        system        00001011        system
  166.         Attached Devices:
  167. Total 0 devices attached
  168. 00004096        00000002        00080007        00000003        system        00001010        system
  169.         Attached Devices:
  170.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb4
  171. Total 1 devices attached
  172. 00004096        00000002        00080007        00000003        system        00000996        system
  173.         Attached Devices:
  174.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb4
  175. Total 1 devices attached
  176. 33554432        00000002        00080007        00000003        system        00000733        system
  177.         Attached Devices:
  178.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb3
  179. Total 1 devices attached
  180. 00151552        00000002        00080007        00000003        system        00000731        system
  181.         Attached Devices:
  182.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb3
  183. Total 1 devices attached
  184. 00753664        00000002        00080007        00000003        system        00000729        system
  185.         Attached Devices:
  186.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb3
  187. Total 1 devices attached
  188. 04423680        00000002        00080007        00000003        system        00000727        system
  189.         Attached Devices:
  190.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb3
  191. Total 1 devices attached
  192. 00004096        00000002        00080007        00000002        system        00000725        system
  193.         Attached Devices:
  194. Total 0 devices attached
  195. 00004096        00000002        00080007        00000003        system        00000724        system
  196.         Attached Devices:
  197.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb3
  198. Total 1 devices attached
  199. 00004096        00000002        00080007        00000003        system        00000723        system
  200.         Attached Devices:
  201.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb3
  202. Total 1 devices attached
  203. 00032768        00000002        00080007        00000002        qcom,system        00000669        qcom,system
  204.         Attached Devices:
  205. Total 0 devices attached
  206. 10522624        00000002        00080007        00000002        qcom,system        00000668        qcom,system
  207.         Attached Devices:
  208.         kgsl-3d0
  209. Total 1 devices attached
  210. 00032768        00000002        00080007        00000004        qcom,system        00000665        qcom,system
  211.         Attached Devices:
  212. Total 0 devices attached
  213. 10522624        00000002        00080007        00000005        qcom,system        00000664        qcom,system
  214.         Attached Devices:
  215.         soc:qcom,smmu_sde_unsec_cb
  216.         kgsl-3d0
  217. Total 2 devices attached
  218. 00032768        00000002        00080007        00000004        qcom,system        00000663        qcom,system
  219.         Attached Devices:
  220. Total 0 devices attached
  221. 10522624        00000002        00080007        00000004        qcom,system        00000662        qcom,system
  222.         Attached Devices:
  223.         soc:qcom,smmu_sde_unsec_cb
  224.         kgsl-3d0
  225. Total 2 devices attached
  226. 00032768        00000002        00080007        00000004        qcom,system        00000343        qcom,system
  227.         Attached Devices:
  228. Total 0 devices attached
  229. 00491520        00000002        00080007        00000004        qcom,system        00000342        qcom,system
  230.         Attached Devices:
  231.         kgsl-3d0
  232.         kgsl-3d0
  233. Total 2 devices attached
  234. 00032768        00000002        00080007        00000004        qcom,system        00000341        qcom,system
  235.         Attached Devices:
  236. Total 0 devices attached
  237. 00491520        00000002        00080007        00000004        qcom,system        00000340        qcom,system
  238.         Attached Devices:
  239.         kgsl-3d0
  240.         kgsl-3d0
  241. Total 2 devices attached
  242. 00032768        00000002        00080007        00000004        qcom,system        00000339        qcom,system
  243.         Attached Devices:
  244. Total 0 devices attached
  245. 00491520        00000002        00080007        00000004        qcom,system        00000338        qcom,system
  246.         Attached Devices:
  247.         kgsl-3d0
  248.         kgsl-3d0
  249. Total 2 devices attached
  250. 00032768        00000002        00080007        00000004        qcom,system        00000337        qcom,system
  251.         Attached Devices:
  252. Total 0 devices attached
  253. 00491520        00000002        00080007        00000004        qcom,system        00000336        qcom,system
  254.         Attached Devices:
  255.         kgsl-3d0
  256.         kgsl-3d0
  257. Total 2 devices attached
  258. 00032768        00000002        00080007        00000002        qcom,system        00000321        qcom,system
  259.         Attached Devices:
  260. Total 0 devices attached
  261. 00131072        00000002        00080007        00000003        qcom,system        00000320        qcom,system
  262.         Attached Devices:
  263.         kgsl-3d0
  264. Total 1 devices attached
  265. 00032768        00000002        00080007        00000004        qcom,system        00000319        qcom,system
  266.         Attached Devices:
  267. Total 0 devices attached
  268. 00212992        00000002        00080007        00000004        qcom,system        00000318        qcom,system
  269.         Attached Devices:
  270.         kgsl-3d0
  271.         kgsl-3d0
  272. Total 2 devices attached
  273. 00032768        00000002        00080007        00000004        qcom,system        00000317        qcom,system
  274.         Attached Devices:
  275. Total 0 devices attached
  276. 00212992        00000002        00080007        00000004        qcom,system        00000316        qcom,system
  277.         Attached Devices:
  278.         kgsl-3d0
  279.         kgsl-3d0
  280. Total 2 devices attached
  281. 00032768        00000002        00080007        00000004        qcom,system        00000315        qcom,system
  282.         Attached Devices:
  283. Total 0 devices attached
  284. 00212992        00000002        00080007        00000004        qcom,system        00000314        qcom,system
  285.         Attached Devices:
  286.         kgsl-3d0
  287.         kgsl-3d0
  288. Total 2 devices attached
  289. 00032768        00000002        00080007        00000004        qcom,system        00000313        qcom,system
  290.         Attached Devices:
  291. Total 0 devices attached
  292. 00212992        00000002        00080007        00000004        qcom,system        00000312        qcom,system
  293.         Attached Devices:
  294.         kgsl-3d0
  295.         kgsl-3d0
  296. Total 2 devices attached
  297. 00032768        00000002        00080007        00000004        qcom,system        00000311        qcom,system
  298.         Attached Devices:
  299. Total 0 devices attached
  300. 00352256        00000002        00080007        00000004        qcom,system        00000310        qcom,system
  301.         Attached Devices:
  302.         kgsl-3d0
  303.         kgsl-3d0
  304. Total 2 devices attached
  305. 00032768        00000002        00080007        00000004        qcom,system        00000309        qcom,system
  306.         Attached Devices:
  307. Total 0 devices attached
  308. 00974848        00000002        00080007        00000004        qcom,system        00000308        qcom,system
  309.         Attached Devices:
  310.         kgsl-3d0
  311.         kgsl-3d0
  312. Total 2 devices attached
  313. 00032768        00000002        00080007        00000004        qcom,system        00000307        qcom,system
  314.         Attached Devices:
  315. Total 0 devices attached
  316. 00974848        00000002        00080007        00000004        qcom,system        00000306        qcom,system
  317.         Attached Devices:
  318.         kgsl-3d0
  319.         kgsl-3d0
  320. Total 2 devices attached
  321. 00032768        00000002        00080007        00000004        qcom,system        00000305        qcom,system
  322.         Attached Devices:
  323. Total 0 devices attached
  324. 00974848        00000002        00080007        00000004        qcom,system        00000304        qcom,system
  325.         Attached Devices:
  326.         kgsl-3d0
  327.         kgsl-3d0
  328. Total 2 devices attached
  329. 00032768        00000002        00080007        00000004        qcom,system        00000303        qcom,system
  330.         Attached Devices:
  331. Total 0 devices attached
  332. 00974848        00000002        00080007        00000004        qcom,system        00000302        qcom,system
  333.         Attached Devices:
  334.         kgsl-3d0
  335.         kgsl-3d0
  336. Total 2 devices attached
  337. 00032768        00000002        00080007        00000004        qcom,system        00000293        qcom,system
  338.         Attached Devices:
  339. Total 0 devices attached
  340. 00974848        00000002        00080007        00000004        qcom,system        00000292        qcom,system
  341.         Attached Devices:
  342.         kgsl-3d0
  343.         kgsl-3d0
  344. Total 2 devices attached
  345. 00032768        00000002        00080007        00000004        qcom,system        00000291        qcom,system
  346.         Attached Devices:
  347. Total 0 devices attached
  348. 00974848        00000002        00080007        00000004        qcom,system        00000290        qcom,system
  349.         Attached Devices:
  350.         kgsl-3d0
  351.         kgsl-3d0
  352. Total 2 devices attached
  353. 00032768        00000002        00080007        00000004        qcom,system        00000289        qcom,system
  354.         Attached Devices:
  355. Total 0 devices attached
  356. 00974848        00000002        00080007        00000004        qcom,system        00000288        qcom,system
  357.         Attached Devices:
  358.         kgsl-3d0
  359.         kgsl-3d0
  360. Total 2 devices attached
  361. 00032768        00000002        00080007        00000004        qcom,system        00000286        qcom,system
  362.         Attached Devices:
  363. Total 0 devices attached
  364. 00974848        00000002        00080007        00000004        qcom,system        00000285        qcom,system
  365.         Attached Devices:
  366.         kgsl-3d0
  367.         kgsl-3d0
  368. Total 2 devices attached
  369. 00032768        00000002        00080007        00000004        qcom,system        00000258        qcom,system
  370.         Attached Devices:
  371. Total 0 devices attached
  372. 00352256        00000002        00080007        00000004        qcom,system        00000257        qcom,system
  373.         Attached Devices:
  374.         kgsl-3d0
  375.         kgsl-3d0
  376. Total 2 devices attached
  377. 00032768        00000002        00080007        00000004        qcom,system        00000220        qcom,system
  378.         Attached Devices:
  379. Total 0 devices attached
  380. 00393216        00000002        00080007        00000004        qcom,system        00000219        qcom,system
  381.         Attached Devices:
  382.         kgsl-3d0
  383.         kgsl-3d0
  384. Total 2 devices attached
  385. 00032768        00000002        00080007        00000004        qcom,system        00000218        qcom,system
  386.         Attached Devices:
  387. Total 0 devices attached
  388. 00393216        00000002        00080007        00000004        qcom,system        00000217        qcom,system
  389.         Attached Devices:
  390.         kgsl-3d0
  391.         kgsl-3d0
  392. Total 2 devices attached
  393. 00032768        00000002        00080007        00000004        qcom,system        00000216        qcom,system
  394.         Attached Devices:
  395. Total 0 devices attached
  396. 00393216        00000002        00080007        00000004        qcom,system        00000215        qcom,system
  397.         Attached Devices:
  398.         kgsl-3d0
  399.         kgsl-3d0
  400. Total 2 devices attached
  401. 00032768        00000002        00080007        00000004        qcom,system        00000214        qcom,system
  402.         Attached Devices:
  403. Total 0 devices attached
  404. 00393216        00000002        00080007        00000004        qcom,system        00000213        qcom,system
  405.         Attached Devices:
  406.         kgsl-3d0
  407.         kgsl-3d0
  408. Total 2 devices attached
  409. 00020480        00000002        00080007        00000003        qcom,system        00000172        qcom,system
  410.         Attached Devices:
  411.         soc:qcom,smmu_sde_unsec_cb
  412. Total 1 devices attached
  413. 00020480        00000002        00080007        00000003        qcom,system        00000171        qcom,system
  414.         Attached Devices:
  415.         soc:qcom,smmu_sde_unsec_cb
  416. Total 1 devices attached
  417. 00020480        00000002        00080007        00000003        qcom,system        00000170        qcom,system
  418.         Attached Devices:
  419.         soc:qcom,smmu_sde_unsec_cb
  420. Total 1 devices attached
  421. 00032768        00000002        00080007        00000002        qcom,system        00000167        qcom,system
  422.         Attached Devices:
  423. Total 0 devices attached
  424. 14745600        00000002        00080007        00000003        qcom,system        00000166        qcom,system
  425.         Attached Devices:
  426.         soc:qcom,smmu_sde_unsec_cb
  427. Total 1 devices attached
  428. 02097152        00000002        00080007        00000002        qcom,qseecom        00000165        qcom,qseecom
  429.         Attached Devices:
  430. Total 0 devices attached
  431. 00004096        00000002        00080007        00000002        qcom,qseecom        00000164        qcom,qseecom
  432.         Attached Devices:
  433. Total 0 devices attached
  434. 00012288        00000002        00080007        00000002        qcom,qseecom        00000162        qcom,qseecom
  435.         Attached Devices:
  436. Total 0 devices attached
  437. 00262144        00000002        00080007        00000003        system        00000160        system
  438.         Attached Devices:
  439.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb1
  440. Total 1 devices attached
  441. 00004096        00000002        00080007        00000003        system        00000158        system
  442.         Attached Devices:
  443.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb1
  444. Total 1 devices attached
  445. 00262144        00000002        00080007        00000003        system        00000157        system
  446.         Attached Devices:
  447.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb10
  448. Total 1 devices attached
  449. 00004096        00000002        00080007        00000002        system        00000156        system
  450.         Attached Devices:
  451. Total 0 devices attached
  452. 00004096        00000002        00080007        00000003        system        00000155        system
  453.         Attached Devices:
  454.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb10
  455. Total 1 devices attached
  456. 00032768        00000002        00080007        00000003        system        00000154        <none>
  457.         Attached Devices:
  458.         soc:spf_core_platform:qcom,msm-audio-ion
  459. Total 1 devices attached
  460. 00032768        00000002        00080007        00000004        qcom,system        00000153        qcom,system
  461.         Attached Devices:
  462. Total 0 devices attached
  463. 10522624        00000002        00080007        00000005        qcom,system        00000152        qcom,system
  464.         Attached Devices:
  465.         soc:qcom,smmu_sde_unsec_cb
  466.         kgsl-3d0
  467. Total 2 devices attached
  468. 00004096        00000002        00080007        00000002        system        00000135        system
  469.         Attached Devices:
  470. Total 0 devices attached
  471. 00004096        00000002        00080007        00000003        system        00000134        system
  472.         Attached Devices:
  473.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb11
  474. Total 1 devices attached
  475. 00004096        00000002        00080007        00000002        system        00000079        system
  476.         Attached Devices:
  477. Total 0 devices attached
  478. 00004096        00000002        00080007        00000003        system        00000078        system
  479.         Attached Devices:
  480.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb12
  481. Total 1 devices attached
  482. 00032768        00000002        00080007        00000002        qcom,system        00000074        qcom,system
  483.         Attached Devices:
  484. Total 0 devices attached
  485. 00065536        00000002        00080007        00000002        qcom,system        00000073        qcom,system
  486.         Attached Devices:
  487.         kgsl-3d0
  488. Total 1 devices attached
  489. 00004096        00000002        00080007        00000002        system        00000072        system
  490.         Attached Devices:
  491. Total 0 devices attached
  492. 00004096        00000002        00080007        00000003        system        00000071        system
  493.         Attached Devices:
  494.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb11
  495. Total 1 devices attached
  496. 00004096        00000002        00080007        00000002        qcom,qseecom        00000057        qcom,qseecom
  497.         Attached Devices:
  498. Total 0 devices attached
  499. 00004096        00000002        00080007        00000002        system        00000048        system
  500.         Attached Devices:
  501. Total 0 devices attached
  502. 00004096        00000002        00080007        00000003        system        00000047        system
  503.         Attached Devices:
  504.         soc:qcom,msm_fastrpc:qcom,msm_fastrpc_compute_cb2
  505. Total 1 devices attached
  506. 00008192        00000002        00080007        00000002        qcom,qseecom        00000046        qcom,qseecom
  507.         Attached Devices:
  508. Total 0 devices attached
  509. 00008192        00000002        00080007        00000002        qcom,qseecom        00000045        qcom,qseecom
  510.         Attached Devices:
  511. Total 0 devices attached
  512. 01200128        00000002        00080007        00000001        qcom,system        00000043        <none>
  513.         Attached Devices:
  514.         soc:qcom,cam_smmu:msm_cam_smmu_icp
  515. Total 1 devices attached
  516. 00024576        00000002        00080007        00000002        qcom,qseecom        00000036        qcom,qseecom
  517.         Attached Devices:
  518. Total 0 devices attached
  519. 01048576        00000000        00080005        00000001        qcom,system        00000018        <none>
  520.         Attached Devices:
  521.         ab00000.qcom,cvp:cvp_non_secure_cb
  522. Total 1 devices attached
  523. 03141632        00000000        00080005        00000001        qcom,system        00000017        <none>
  524.         Attached Devices:
  525.         ab00000.qcom,cvp:cvp_non_secure_cb
  526. Total 1 devices attached
  527. 00004096        00000002        00080007        00000002        qcom,qseecom        00000016        qcom,qseecom
  528.         Attached Devices:
  529. Total 0 devices attached
  530. 00028672        00000002        00080007        00000003        qcom,qseecom        00000013        qcom,qseecom
  531.         Attached Devices:
  532.         firmware:qcom_smcinvoke
  533. Total 1 devices attached
  534. 00004096        00000002        00080007        00000003        qcom,qseecom        00000012        qcom,qseecom
  535.         Attached Devices:
  536.         firmware:qcom_smcinvoke
  537. Total 1 devices attached
  538. 00028672        00000002        00080007        00000003        qcom,qseecom        00000011        qcom,qseecom
  539.         Attached Devices:
  540.         firmware:qcom_smcinvoke
  541. Total 1 devices attached
  542. 00020480        00000002        00080007        00000003        qcom,qseecom        00000010        qcom,qseecom
  543.         Attached Devices:
  544.         firmware:qcom_smcinvoke
  545. Total 1 devices attached
  546. 00516096        00000002        00080007        00000003        qcom,qseecom        00000009        qcom,qseecom
  547.         Attached Devices:
  548.         firmware:qcom_smcinvoke
  549. Total 1 devices attached
  550. 00020480        00000002        00080007        00000003        qcom,qseecom        00000008        qcom,qseecom
  551.         Attached Devices:
  552.         firmware:qcom_smcinvoke
  553. Total 1 devices attached
  554. 00020480        00000002        00080007        00000003        qcom,qseecom        00000007        qcom,qseecom
  555.         Attached Devices:
  556.         firmware:qcom_smcinvoke
  557. Total 1 devices attached
  558. 00020480        00000002        00080007        00000003        qcom,qseecom        00000006        qcom,qseecom
  559.         Attached Devices:
  560.         firmware:qcom_smcinvoke
  561. Total 1 devices attached
  562. 00020480        00000002        00080007        00000003        qcom,qseecom        00000005        qcom,qseecom
  563.         Attached Devices:
  564.         firmware:qcom_smcinvoke
  565. Total 1 devices attached
  566. 00028672        00000002        00080007        00000003        qcom,qseecom        00000004        qcom,qseecom
  567.         Attached Devices:
  568.         firmware:qcom_smcinvoke
  569. Total 1 devices attached
  570. 00004096        00000000        00080005        00000001        qcom,system        00000003        <none>
  571.         Attached Devices:
  572.         aa00000.qcom,vidc:non_secure_cb
  573. Total 1 devices attached
  574. 00004096        00000000        00080005        00000001        qcom,system        00000002        <none>
  575.         Attached Devices:
  576.         aa00000.qcom,vidc:non_secure_cb
  577. Total 1 devices attached
  578. 03133440        00000000        00080005        00000001        qcom,system        00000001        <none>
  579.         Attached Devices:
  580.         aa00000.qcom,vidc:non_secure_cb
  581. Total 1 devices attached
  582. Total 154 objects, 305819648 bytes
复制代码
可以看到有更多的dmabuf信息输出:size 、 flags、Attached Devices、mode  、count  、exp_name  、ino  、name

Dump整个手机体系的dmabuf

  
  1. wj@wj:~/Downloads$ adb shell
  2. aurora:/ # dmabuf_dump
  3.    binder:3072_2:3072
  4.                   Name              Rss              Pss         nr_procs            Inode
  5.           qcom,qseecom            12 kB            12 kB                1              160
  6.          PROCESS TOTAL            12 kB            12 kB                 
  7. ----------------------
  8.       mfp-daemon:3041
  9.                   Name              Rss              Pss         nr_procs            Inode
  10.           qcom,qseecom             4 kB             4 kB                1              163
  11.           qcom,qseecom          2048 kB          2048 kB                1              164
  12.          PROCESS TOTAL          2052 kB          2052 kB                 
  13. ----------------------
  14.         cdsprpcd:2824
  15.                   Name              Rss              Pss         nr_procs            Inode
  16.                 system             4 kB             4 kB                1              139
  17.                 system           256 kB           256 kB                1              141
  18.                 system           104 kB           104 kB                1             1994
  19.          PROCESS TOTAL           364 kB           364 kB                 
  20. ----------------------
  21.    binder:1817_2:1817
  22.                   Name              Rss              Pss         nr_procs            Inode
  23.           qcom,qseecom             8 kB             8 kB                1               37
  24.          PROCESS TOTAL             8 kB             8 kB                 
  25. ----------------------
  26. .android.camera:8920
  27.                   Name              Rss              Pss         nr_procs            Inode
  28.                 system             4 kB             4 kB                1             1979
  29.                 system             4 kB             4 kB                1             1987
  30.                 system             4 kB             4 kB                1             1988
  31.                 system          6848 kB          6848 kB                1             1990
  32.                 system           736 kB           736 kB                1             1993
  33.                 system           148 kB           148 kB                1             1996
  34.                 system         32768 kB         32768 kB                1             1997
  35.                 system             4 kB             4 kB                1             2000
  36.                 system             4 kB             4 kB                1             2001
  37.                 system             4 kB             4 kB                1             2002
  38.            qcom,system          2392 kB          2392 kB                1             2415
  39.            qcom,system            72 kB            72 kB                1             2416
  40.            qcom,system          2448 kB          2448 kB                1             2636
  41.            qcom,system            72 kB            72 kB                1             2637
  42.          PROCESS TOTAL         45508 kB         45508 kB                 
  43. ----------------------
  44. iui.miwallpaper:4872
  45.                   Name              Rss              Pss         nr_procs            Inode
  46.            qcom,system         10276 kB          5138 kB                2             3711
  47.            qcom,system            32 kB            16 kB                2             3712
  48.            qcom,system         10276 kB          5138 kB                2             3723
  49.            qcom,system            32 kB            16 kB                2             3724
  50.          PROCESS TOTAL         20616 kB         10308 kB                 
  51. ----------------------
  52.           fidoca:1813
  53.                   Name              Rss              Pss         nr_procs            Inode
  54.           qcom,qseecom            24 kB            24 kB                1               25
  55.          PROCESS TOTAL            24 kB            24 kB                 
  56. ----------------------
  57.    binder:1808_2:1808
  58.                   Name              Rss              Pss         nr_procs            Inode
  59.                 system             4 kB             4 kB                1               43
  60.                 system             4 kB             4 kB                1               44
  61.          PROCESS TOTAL             8 kB             8 kB                 
  62. ----------------------
  63.    binder:3079_2:3079
  64.                   Name              Rss              Pss         nr_procs            Inode
  65.            qcom,system         14400 kB         14400 kB                1              165
  66.            qcom,system            32 kB            32 kB                1              166
  67.          PROCESS TOTAL         14432 kB         14432 kB                 
  68. ----------------------
  69. android.hardwar:1607
  70.                   Name              Rss              Pss         nr_procs            Inode
  71.           qcom,qseecom             4 kB             4 kB                1               22
  72.          PROCESS TOTAL             4 kB             4 kB                 
  73. ----------------------
  74.   surfaceflinger:1929
  75.                   Name              Rss              Pss         nr_procs            Inode
  76.            qcom,system            64 kB            64 kB                1               71
  77.            qcom,system            32 kB            32 kB                1               72
  78.            qcom,system         10276 kB          5138 kB                2              133
  79.            qcom,system            32 kB            16 kB                2              134
  80.            qcom,system           384 kB           192 kB                2              225
  81.            qcom,system            32 kB            16 kB                2              226
  82.            qcom,system           384 kB           192 kB                2              227
  83.            qcom,system            32 kB            16 kB                2              228
  84.            qcom,system           384 kB           192 kB                2              229
  85.            qcom,system            32 kB            16 kB                2              230
  86.            qcom,system           384 kB           192 kB                2              231
  87.            qcom,system            32 kB            16 kB                2              232
  88.            qcom,system           344 kB           172 kB                2              247
  89.            qcom,system            32 kB            16 kB                2              248
  90.            qcom,system           952 kB           476 kB                2              292
  91.            qcom,system            32 kB            16 kB                2              293
  92.            qcom,system           952 kB           476 kB                2              298
  93.            qcom,system            32 kB            16 kB                2              299
  94.            qcom,system           952 kB           476 kB                2              302
  95.            qcom,system            32 kB            16 kB                2              303
  96.            qcom,system           952 kB           476 kB                2              304
  97.            qcom,system            32 kB            16 kB                2              305
  98.            qcom,system           952 kB           476 kB                2              308
  99.            qcom,system            32 kB            16 kB                2              309
  100.            qcom,system           952 kB           476 kB                2              310
  101.            qcom,system            32 kB            16 kB                2              311
  102.            qcom,system           952 kB           476 kB                2              312
  103.            qcom,system            32 kB            16 kB                2              313
  104.            qcom,system           952 kB           476 kB                2              314
  105.            qcom,system            32 kB            16 kB                2              315
  106.            qcom,system           344 kB           172 kB                2              323
  107.            qcom,system            32 kB            16 kB                2              324
  108.            qcom,system           208 kB           104 kB                2              325
  109.            qcom,system            32 kB            16 kB                2              326
  110.            qcom,system           208 kB           104 kB                2              327
  111.            qcom,system            32 kB            16 kB                2              328
  112.            qcom,system           208 kB           104 kB                2              329
  113.            qcom,system            32 kB            16 kB                2              330
  114.            qcom,system           208 kB           104 kB                2              331
  115.            qcom,system            32 kB            16 kB                2              332
  116.            qcom,system           128 kB           128 kB                1              333
  117.            qcom,system            32 kB            32 kB                1              334
  118.            qcom,system           480 kB           240 kB                2              349
  119.            qcom,system            32 kB            16 kB                2              350
  120.            qcom,system           480 kB           240 kB                2              351
  121.            qcom,system            32 kB            16 kB                2              352
  122.            qcom,system           480 kB           240 kB                2              353
  123.            qcom,system            32 kB            16 kB                2              354
  124.            qcom,system           480 kB           240 kB                2              355
  125.            qcom,system            32 kB            16 kB                2              356
  126.            qcom,system         10276 kB          5138 kB                2              645
  127.            qcom,system            32 kB            16 kB                2              646
  128.            qcom,system         10276 kB          5138 kB                2              647
  129.            qcom,system            32 kB            16 kB                2              648
  130.            qcom,system         10276 kB         10276 kB                1              829
  131.            qcom,system            32 kB            32 kB                1              830
  132.            qcom,system         10276 kB         10276 kB                1             2694
  133.            qcom,system            32 kB            32 kB                1             2695
  134.            qcom,system         10276 kB          5138 kB                2             3711
  135.            qcom,system            32 kB            16 kB                2             3712
  136.            qcom,system         10276 kB          5138 kB                2             3723
  137.            qcom,system            32 kB            16 kB                2             3724
  138.            qcom,system         10276 kB          5138 kB                2             3731
  139.            qcom,system            32 kB            16 kB                2             3732
  140.          PROCESS TOTAL         96016 kB         58444 kB                 
  141. ----------------------
  142.             mrmd:1809
  143.                   Name              Rss              Pss         nr_procs            Inode
  144.           qcom,qseecom             8 kB             8 kB                1               27
  145.          PROCESS TOTAL             8 kB             8 kB                 
  146. ----------------------
  147.    binder:1671_2:1671
  148.                   Name              Rss              Pss         nr_procs            Inode
  149.            qcom,system         10276 kB          5138 kB                2              133
  150.            qcom,system            32 kB            16 kB                2              134
  151.            qcom,system            20 kB            20 kB                1              169
  152.            qcom,system            20 kB            20 kB                1              170
  153.            qcom,system            20 kB            20 kB                1              171
  154.            qcom,system         10276 kB          5138 kB                2              645
  155.            qcom,system            32 kB            16 kB                2              646
  156.            qcom,system         10276 kB          5138 kB                2              647
  157.            qcom,system            32 kB            16 kB                2              648
  158.          PROCESS TOTAL         30984 kB         15522 kB                 
  159. ----------------------
  160. vendor.qti.came:1650
  161.                   Name              Rss              Pss         nr_procs            Inode
  162.                 system             4 kB             4 kB                1              142
  163.                 system             4 kB             4 kB                1              143
  164.                 system             4 kB             4 kB                1             1180
  165.                 system             4 kB             4 kB                1             1194
  166.                 system             4 kB             4 kB                1             1195
  167.                 system           736 kB           736 kB                1             1201
  168.                 system           148 kB           148 kB                1             1203
  169.                 system          6848 kB          6848 kB                1             1601
  170.                 system          1024 kB          1024 kB                1             1620
  171.                 system         32768 kB         32768 kB                1             1621
  172.                 system             4 kB             4 kB                1             1625
  173.                 system             4 kB             4 kB                1             1627
  174.                 system             4 kB             4 kB                1             1628
  175.          PROCESS TOTAL         41556 kB         41556 kB                 
  176. ----------------------
  177.         adsprpcd:2822
  178.                   Name              Rss              Pss         nr_procs            Inode
  179.                 system             4 kB             4 kB                1              136
  180.                 system             4 kB             4 kB                1              137
  181.                 system           256 kB           256 kB                1              138
  182.          PROCESS TOTAL           264 kB           264 kB                 
  183. ----------------------
  184.    system_server:2293
  185.                   Name              Rss              Pss         nr_procs            Inode
  186.            qcom,system         10200 kB          5100 kB                2             3693
  187.            qcom,system            32 kB            16 kB                2             3694
  188.          PROCESS TOTAL         10232 kB          5116 kB                 
  189. ----------------------
  190. ndroid.systemui:5329
  191.                   Name              Rss              Pss         nr_procs            Inode
  192.            qcom,system           952 kB           476 kB                2              292
  193.            qcom,system            32 kB            16 kB                2              293
  194.            qcom,system           952 kB           476 kB                2              298
  195.            qcom,system            32 kB            16 kB                2              299
  196.            qcom,system           952 kB           476 kB                2              302
  197.            qcom,system            32 kB            16 kB                2              303
  198.            qcom,system           952 kB           476 kB                2              304
  199.            qcom,system            32 kB            16 kB                2              305
  200.            qcom,system           952 kB           476 kB                2              308
  201.            qcom,system            32 kB            16 kB                2              309
  202.            qcom,system           952 kB           476 kB                2              310
  203.            qcom,system            32 kB            16 kB                2              311
  204.            qcom,system           952 kB           476 kB                2              312
  205.            qcom,system            32 kB            16 kB                2              313
  206.            qcom,system           952 kB           476 kB                2              314
  207.            qcom,system            32 kB            16 kB                2              315
  208.            qcom,system           208 kB           104 kB                2              325
  209.            qcom,system            32 kB            16 kB                2              326
  210.            qcom,system           208 kB           104 kB                2              327
  211.            qcom,system            32 kB            16 kB                2              328
  212.            qcom,system           208 kB           104 kB                2              329
  213.            qcom,system            32 kB            16 kB                2              330
  214.            qcom,system           208 kB           104 kB                2              331
  215.            qcom,system            32 kB            16 kB                2              332
  216.            qcom,system           480 kB           240 kB                2              349
  217.            qcom,system            32 kB            16 kB                2              350
  218.            qcom,system           480 kB           240 kB                2              351
  219.            qcom,system            32 kB            16 kB                2              352
  220.            qcom,system           480 kB           240 kB                2              353
  221.            qcom,system            32 kB            16 kB                2              354
  222.            qcom,system           480 kB           240 kB                2              355
  223.            qcom,system            32 kB            16 kB                2              356
  224.            qcom,system           752 kB           752 kB                1              463
  225.            qcom,system            32 kB            32 kB                1              464
  226.            qcom,system           752 kB           752 kB                1              465
  227.            qcom,system            32 kB            32 kB                1              466
  228.            qcom,system           752 kB           752 kB                1              467
  229.            qcom,system            32 kB            32 kB                1              468
  230.            qcom,system         10276 kB         10276 kB                1             3725
  231.            qcom,system            32 kB            32 kB                1             3726
  232.            qcom,system         10276 kB         10276 kB                1             3727
  233.            qcom,system            32 kB            32 kB                1             3728
  234.            qcom,system         10276 kB         10276 kB                1             3729
  235.            qcom,system            32 kB            32 kB                1             3730
  236.            qcom,system         10276 kB          5138 kB                2             3731
  237.            qcom,system            32 kB            16 kB                2             3732
  238.            qcom,system           752 kB           752 kB                1             3733
  239.            qcom,system            32 kB            32 kB                1             3734
  240.            qcom,system           752 kB           752 kB                1             3735
  241.            qcom,system            32 kB            32 kB                1             3736
  242.            qcom,system           752 kB           752 kB                1             3737
  243.            qcom,system            32 kB            32 kB                1             3738
  244.          PROCESS TOTAL         56816 kB         46222 kB                 
  245. ----------------------
  246.          sscrpcd:1281
  247.                   Name              Rss              Pss         nr_procs            Inode
  248.                 system             4 kB             4 kB                1               76
  249.                 system             4 kB             4 kB                1               77
  250.          PROCESS TOTAL             8 kB             8 kB                 
  251. ----------------------
  252.    binder:1589_2:1589
  253.                   Name              Rss              Pss         nr_procs            Inode
  254.              <unknown>            32 kB            32 kB                1              135
  255.          PROCESS TOTAL            32 kB            32 kB                 
  256. ----------------------
  257.    com.miui.home:5380
  258.                   Name              Rss              Pss         nr_procs            Inode
  259.            qcom,system           384 kB           192 kB                2              225
  260.            qcom,system            32 kB            16 kB                2              226
  261.            qcom,system           384 kB           192 kB                2              227
  262.            qcom,system            32 kB            16 kB                2              228
  263.            qcom,system           384 kB           192 kB                2              229
  264.            qcom,system            32 kB            16 kB                2              230
  265.            qcom,system           384 kB           192 kB                2              231
  266.            qcom,system            32 kB            16 kB                2              232
  267.            qcom,system           344 kB           172 kB                2              247
  268.            qcom,system            32 kB            16 kB                2              248
  269.            qcom,system           344 kB           172 kB                2              323
  270.            qcom,system            32 kB            16 kB                2              324
  271.            qcom,system         10200 kB         10200 kB                1             3665
  272.            qcom,system            32 kB            32 kB                1             3666
  273.            qcom,system         10200 kB          5100 kB                2             3693
  274.            qcom,system            32 kB            16 kB                2             3694
  275.          PROCESS TOTAL         22880 kB         16556 kB                 
  276. ----------------------
  277.         qseecomd:1079
  278.                   Name              Rss              Pss         nr_procs            Inode
  279.           qcom,qseecom            28 kB            28 kB                1                1
  280.           qcom,qseecom            20 kB            20 kB                1                2
  281.           qcom,qseecom            20 kB            20 kB                1                3
  282.           qcom,qseecom            20 kB            20 kB                1                4
  283.           qcom,qseecom            20 kB            20 kB                1                5
  284.           qcom,qseecom           504 kB           504 kB                1                6
  285.           qcom,qseecom            20 kB            20 kB                1                7
  286.           qcom,qseecom            28 kB            28 kB                1                8
  287.           qcom,qseecom             4 kB             4 kB                1                9
  288.           qcom,qseecom            28 kB            28 kB                1               10
  289.          PROCESS TOTAL           692 kB           692 kB                 
  290. ----------------------
  291.   tee-supplicant:1525
  292.                   Name              Rss              Pss         nr_procs            Inode
  293.           qcom,qseecom             4 kB             4 kB                1               16
  294.          PROCESS TOTAL             4 kB             4 kB                 
  295. ----------------------
  296.    audioadsprpcd:490  
  297.                   Name              Rss              Pss         nr_procs            Inode
  298.                 system             4 kB             4 kB                1               79
  299.                 system             4 kB             4 kB                1               80
  300.          PROCESS TOTAL             8 kB             8 kB                 
  301. ----------------------
  302. dmabuf total: 265484 kB kernel_rss: 8332 kB userspace_rss: 342528 kB userspace_pss: 257152 kB
复制代码

Dump某个进程的dmabuf

下面Dump Camera Provider进程的dmabuf使用情况。
  1. wj@wj:~/Downloads$ adb shell ps -e | grep camera
  2. cameraserver  1650     1   14121844 661800 binder_ioctl_write_read 0 S vendor.qti.camera.provider-service_64
  3. cameraserver  2691     1    3069520  23404 binder_ioctl_write_read 0 S cameraserver
  4. u0_a139       8920  1478    9591760 333440 do_epoll_wait       0 S com.android.camera
  5. wj@wj:~/Downloads$ adb shell dmabuf_dump 1650
  6. vendor.qti.came:1650
  7.                   Name              Rss              Pss         nr_procs            Inode
  8.                 system             4 kB             4 kB                1              142
  9.                 system             4 kB             4 kB                1              143
  10.                 system             4 kB             4 kB                1             1180
  11.                 system             4 kB             4 kB                1             1194
  12.                 system             4 kB             4 kB                1             1195
  13.                 system           736 kB           736 kB                1             1201
  14.                 system           148 kB           148 kB                1             1203
  15.                 system          6848 kB          6848 kB                1             1601
  16.                 system          1024 kB          1024 kB                1             1620
  17.                 system         32768 kB         32768 kB                1             1621
  18.                 system             4 kB             4 kB                1             1625
  19.                 system             4 kB             4 kB                1             1627
  20.                 system             4 kB             4 kB                1             1628
  21.          PROCESS TOTAL         41556 kB         41556 kB                 
  22. ----------------------
  23. dmabuf total: 265484 kB kernel_rss: 223928 kB userspace_rss: 41556 kB userspace_pss: 41556 kB
复制代码


以Table[buffer x process]方式出现dmabuf

 注意,该方式只能看整个体系的dambuf
  1. wj@wj:~/Downloads$ adb shell
  2. aurora:/ # dmabuf_dump -a
  3.     Dmabuf Inode |            Size |   Fd Ref Counts |  Map Ref Counts |   audioadsprpcd:499   |        qseecomd:1012  |         sscrpcd:1254  |  tee-supplicant:1491  |   binder:1548_2:1548  | android.hardwar:1568  | vendor.qti.came:1601  |   binder:1611_2:1611  |   binder:1734_2:1734  |            mrmd:1735  |          fidoca:1743  |   binder:1750_2:1750  |  surfaceflinger:1846  |        adsprpcd:2891  |        cdsprpcd:2895  |      mfp-daemon:3096  |   binder:3104_2:3104  |   binder:3118_2:3118  | iui.miwallpaper:4832  | ndroid.systemui:5265  |   com.miui.home:5302  |
  4.               78 |            4 kB |               1 |               1 |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  5.               79 |            4 kB |               1 |               1 |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  6.                4 |           28 kB |               1 |               0 |                    -- |        2(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  7.                5 |           20 kB |               1 |               0 |                    -- |        2(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  8.                6 |           20 kB |               1 |               0 |                    -- |        2(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  9.                7 |           20 kB |               1 |               0 |                    -- |        2(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  10.                8 |           20 kB |               1 |               0 |                    -- |        2(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  11.                9 |          504 kB |               1 |               0 |                    -- |        2(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  12.               10 |           20 kB |               1 |               0 |                    -- |        2(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  13.               11 |           28 kB |               1 |               0 |                    -- |        2(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  14.               12 |            4 kB |               1 |               0 |                    -- |        2(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  15.               13 |           28 kB |               1 |               0 |                    -- |        2(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  16.               71 |            4 kB |               1 |               1 |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  17.               72 |            4 kB |               1 |               1 |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  18.               16 |            4 kB |               1 |               1 |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  19.              154 |           32 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  20.               57 |            4 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  21.              134 |            4 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  22.              135 |            4 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  23.              170 |           20 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  24.              171 |           20 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  25.              172 |           20 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  26.              152 |        10276 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        2(     0) refs |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  27.              153 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  28.               47 |            4 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  29.               48 |            4 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  30.               46 |            8 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  31.               36 |           24 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  32.               45 |            8 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  33.               62 |        18500 kB |               1 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  34.               63 |           32 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  35.               64 |        18500 kB |               1 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  36.               65 |           32 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  37.               73 |           64 kB |               1 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  38.               74 |           32 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  39.              320 |          128 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  40.              215 |          384 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |
  41.              213 |          384 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |
  42.              214 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |
  43.              216 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |
  44.              217 |          384 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |
  45.              218 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |
  46.              219 |          384 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |
  47.              220 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |
  48.              257 |          344 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |
  49.              258 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |
  50.              285 |          952 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  51.              286 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  52.              302 |          952 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  53.              303 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  54.              321 |           32 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  55.              310 |          344 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |
  56.              311 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |
  57.              292 |          952 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  58.              293 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  59.              308 |          952 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  60.              309 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  61.              318 |          208 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  62.              319 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  63.              328 |        10276 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  64.              329 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  65.              342 |          480 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  66.              343 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  67.              326 |        10276 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  68.              327 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  69.              348 |        10276 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |
  70.              349 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |
  71.              316 |          208 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  72.              317 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  73.              340 |          480 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  74.              341 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  75.              324 |        10276 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  76.              325 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  77.              314 |          208 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  78.              315 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  79.              322 |        10276 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  80.              323 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  81.              338 |          480 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  82.              339 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  83.              312 |          208 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  84.              313 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  85.              332 |          752 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  86.              333 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  87.              330 |          752 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  88.              331 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  89.              336 |          480 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  90.              334 |          752 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  91.              335 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  92.              337 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  93.              288 |          952 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  94.              289 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  95.              290 |          952 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  96.              291 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  97.              306 |          952 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  98.              307 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  99.              433 |        10276 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |
  100.              434 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |
  101.              304 |          952 kB |               2 |               0 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     0) refs |                    -- |
  102.              305 |           32 kB |               2 |               2 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |
  103.              155 |            4 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  104.              156 |            4 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  105.              157 |          256 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  106.              158 |            4 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  107.              159 |            4 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  108.              160 |          256 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |
  109.              164 |            4 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |
  110.              165 |         2048 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |                    -- |
  111.              162 |           12 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |                    -- |
  112.              166 |        14400 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |
  113.              167 |           32 kB |               1 |               1 |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |                    -- |        1(     1) refs |                    -- |                    -- |                    -- |
  114. ------------------------------------
  115. TOTALS                   143012 kB |             n/a |             n/a |                  8 kB |                692 kB |                  8 kB |                  4 kB |                 32 kB |                  4 kB |                  8 kB |              10368 kB |                  8 kB |                  8 kB |                 24 kB |                  8 kB |             125124 kB |                264 kB |                264 kB |               2052 kB |                 12 kB |              14432 kB |              20616 kB |              54464 kB |               2416 kB |
复制代码
上述dump说明:


  • Fd Ref Counts :表示该FD有多少个进程在引用
  • Map Ref Counts:表示该FD当前有多少个进程已经做过Map
  • FD( Map) refs : 该进程持有该Buffer的参考计数的总数量以及Map的总次数

Dump整个体系DMA-BUF per-buffer, per-exporter and per-device statistics

在kernel版本>= 5.10上见效。
执行:dmabuf_dump -b
会从sysfs(/sys/kernel/dmabuf/buffers)中dump dmabuf统计信息,显示如下内容:
  1. wj@wj:~/Downloads$ adb shell
  2. aurora:/ # dmabuf_dump -b
  3. ----------------------- DMA-BUF per-buffer stats -----------------------
  4.     Dmabuf Inode |     Size(bytes) |             Exporter Name             |
  5.             2262 |10522624 |      qcom,system
  6.             2017 |753664 |           system
  7.             1372 |4096 |           system
  8.              315 |32768 |      qcom,system
  9.               17 |3141632 |      qcom,system
  10.              343 |32768 |      qcom,system
  11.              220 |32768 |      qcom,system
  12.              164 |4096 |     qcom,qseecom
  13.               45 |8192 |     qcom,qseecom
  14.              305 |32768 |      qcom,system
  15.               73 |65536 |      qcom,system
  16.              154 |32768 |           system
  17.              663 |32768 |      qcom,system
  18.                7 |20480 |     qcom,qseecom
  19.             2270 |770048 |      qcom,system
  20.             2025 |151552 |           system
  21.             1342 |7012352 |           system
  22.             2260 |10522624 |      qcom,system
  23.              172 |20480 |      qcom,system
  24.              313 |32768 |      qcom,system
  25.              257 |352256 |      qcom,system
  26.              134 |4096 |           system
  27.              341 |32768 |      qcom,system
  28.              285 |974848 |      qcom,system
  29.              219 |393216 |      qcom,system
  30.              162 |12288 |     qcom,qseecom
  31.             2005 |4096 |           system
  32.               43 |1200128 |      qcom,system
  33.              303 |32768 |      qcom,system
  34.             2033 |4096 |           system
  35.             1501 |10522624 |      qcom,system
  36.               71 |4096 |           system
  37.              152 |10522624 |      qcom,system
  38.                5 |20480 |     qcom,qseecom
  39.             2269 |32768 |      qcom,system
  40.              321 |32768 |      qcom,system
  41.             1010 |4096 |           system
  42.              293 |32768 |      qcom,system
  43.              170 |20480 |      qcom,system
  44.              311 |32768 |      qcom,system
  45.               13 |28672 |     qcom,qseecom
  46.              217 |393216 |      qcom,system
  47.             2249 |32768 |      qcom,system
  48.              160 |262144 |           system
  49.             1359 |1048576 |           system
  50.             1952 |10444800 |      qcom,system
  51.             1019 |151552 |           system
  52.                3 |4096 |      qcom,system
  53.             2267 |32768 |      qcom,system
  54.              291 |32768 |      qcom,system
  55.             1367 |4096 |           system
  56.               78 |4096 |           system
  57.               11 |28672 |     qcom,qseecom
  58.              338 |491520 |      qcom,system
  59.              215 |393216 |      qcom,system
  60.             2247 |32768 |      qcom,system
  61.              724 |4096 |           system
  62.              668 |10522624 |      qcom,system
  63.             2275 |32768 |      qcom,system
  64.             1017 |753664 |           system
  65.                1 |3133440 |      qcom,system
  66.             2265 |32768 |      qcom,system
  67.              318 |212992 |      qcom,system
  68.              167 |32768 |      qcom,system
  69.               48 |4096 |           system
  70.              308 |974848 |      qcom,system
  71.              336 |491520 |      qcom,system
  72.              213 |393216 |      qcom,system
  73.              157 |262144 |           system
  74.              996 |4096 |           system
  75.             2273 |32768 |      qcom,system
  76.             2263 |32768 |      qcom,system
  77.             2018 |106496 |           system
  78.              316 |212992 |      qcom,system
  79.               18 |1048576 |      qcom,system
  80.              288 |974848 |      qcom,system
  81.              165 |2097152 |     qcom,qseecom
  82.             2008 |7012352 |           system
  83.               46 |8192 |     qcom,qseecom
  84.             1363 |33554432 |           system
  85.              306 |974848 |      qcom,system
  86.               74 |32768 |      qcom,system
  87.              155 |4096 |           system
  88.             2187 |10444800 |      qcom,system
  89.              664 |10522624 |      qcom,system
  90.               36 |24576 |     qcom,qseecom
  91.                8 |20480 |     qcom,qseecom
  92.             2271 |32768 |      qcom,system
  93.             2261 |32768 |      qcom,system
  94.             1371 |4096 |           system
  95.              314 |212992 |      qcom,system
  96.              258 |32768 |      qcom,system
  97.              135 |4096 |           system
  98.               16 |4096 |     qcom,qseecom
  99.              342 |491520 |      qcom,system
  100.              286 |32768 |      qcom,system
  101.              729 |753664 |           system
  102.              304 |974848 |      qcom,system
  103.             2034 |4096 |           system
  104.             1502 |32768 |      qcom,system
  105.               72 |4096 |           system
  106.              153 |32768 |      qcom,system
  107.              662 |10522624 |      qcom,system
  108.                6 |20480 |     qcom,qseecom
  109.             1011 |4096 |           system
  110.              171 |20480 |      qcom,system
  111.              312 |212992 |      qcom,system
  112.              340 |491520 |      qcom,system
  113.              218 |32768 |      qcom,system
  114.              727 |4423680 |           system
  115.             2004 |4096 |           system
  116.              302 |974848 |      qcom,system
  117.             1953 |32768 |      qcom,system
  118.                4 |28672 |     qcom,qseecom
  119.             2268 |10522624 |      qcom,system
  120.              320 |131072 |      qcom,system
  121.              292 |974848 |      qcom,system
  122.              310 |352256 |      qcom,system
  123.               79 |4096 |           system
  124.               12 |4096 |     qcom,qseecom
  125.              339 |32768 |      qcom,system
  126.              216 |32768 |      qcom,system
  127.             2248 |10522624 |      qcom,system
  128.              725 |4096 |           system
  129.              669 |32768 |      qcom,system
  130.                2 |4096 |      qcom,system
  131.             2266 |10522624 |      qcom,system
  132.              319 |32768 |      qcom,system
  133.             1460 |73728 |      qcom,system
  134.              290 |974848 |      qcom,system
  135.              733 |33554432 |           system
  136.              309 |32768 |      qcom,system
  137.             2039 |4096 |           system
  138.               10 |20480 |     qcom,qseecom
  139.              337 |32768 |      qcom,system
  140.              214 |32768 |      qcom,system
  141.             2246 |10444800 |      qcom,system
  142.              158 |4096 |           system
  143.              723 |4096 |           system
  144.             2274 |770048 |      qcom,system
  145.             2029 |33554432 |           system
  146.             2264 |10522624 |      qcom,system
  147.               57 |4096 |     qcom,qseecom
  148.              317 |32768 |      qcom,system
  149.             1459 |2506752 |      qcom,system
  150.              289 |32768 |      qcom,system
  151.              166 |14745600 |      qcom,system
  152.              731 |151552 |           system
  153.               47 |4096 |           system
  154.              307 |32768 |      qcom,system
  155.             1958 |4096 |           system
  156.              156 |4096 |           system
  157.             2188 |32768 |      qcom,system
  158.              665 |32768 |      qcom,system
  159.                9 |516096 |     qcom,qseecom
  160.             2272 |770048 |      qcom,system
  161. ----------------------- DMA-BUF exporter stats -----------------------
  162.       Exporter Name              | Total Count |     Total Size(bytes)   |
  163.                      qcom,system |           95| 189779968
  164.                           system |           43| 123645952
  165.                     qcom,qseecom |           18| 2871296
  166. ----------------------- DMA-BUF total stats --------------------------
  167. Total DMA-BUF count: 156, Total DMA-BUF size(bytes): 316297216
复制代码


DMA_BUF 在内核中的实现

源代码位置:kernel_platform/msm-kernel/drivers/dma-buf/
这篇文章不深入这块内容,后面有时间可以专门写文章进行深入分析。

dmabuf_dump原理分析

源码路径:

system/memory/libmeminfo/libdmabufinfo/
DmaBuffer

DmaBuffer结构体定义如下:
  1. struct DmaBuffer {
  2.   public:
  3.     DmaBuffer(ino_t inode, uint64_t size, uint64_t count, const std::string& exporter,
  4.               const std::string& name)
  5.         : inode_(inode), size_(size), count_(count), exporter_(exporter), name_(name) {
  6.         total_refs_ = 0;
  7.     }
  8.     DmaBuffer() = default;
  9.     ~DmaBuffer() = default;
  10.     // Adds one file descriptor reference for the given pid
  11.     void AddFdRef(pid_t pid) {
  12.         AddRefToPidMap(pid, &fdrefs_);
  13.         total_refs_++;
  14.     }
  15.     // Adds one map reference for the given pid
  16.     void AddMapRef(pid_t pid) {
  17.         AddRefToPidMap(pid, &maprefs_);
  18.         total_refs_++;
  19.     }
  20.     // Getters for each property
  21.     uint64_t size() const { return size_; }
  22.     const std::unordered_map<pid_t, int>& fdrefs() const { return fdrefs_; }
  23.     const std::unordered_map<pid_t, int>& maprefs() const { return maprefs_; }
  24.     ino_t inode() const { return inode_; }
  25.     uint64_t total_refs() const { return total_refs_; }
  26.     uint64_t count() const { return count_; };
  27.     const std::set<pid_t>& pids() const { return pids_; }
  28.     const std::string& name() const { return name_; }
  29.     const std::string& exporter() const { return exporter_; }
  30.     void SetName(const std::string& name) { name_ = name; }
  31.     void SetExporter(const std::string& exporter) { exporter_ = exporter; }
  32.     void SetCount(uint64_t count) { count_ = count; }
  33.     uint64_t Pss() const { return size_ / pids_.size(); }
  34.     bool operator==(const DmaBuffer& rhs) {
  35.         return (inode_ == rhs.inode()) && (size_ == rhs.size()) && (name_ == rhs.name()) &&
  36.                (exporter_ == rhs.exporter());
  37.     }
  38.   private:
  39.     ino_t inode_;
  40.     uint64_t size_;
  41.     uint64_t count_;
  42.     uint64_t total_refs_;
  43.     std::set<pid_t> pids_;
  44.     std::string exporter_;
  45.     std::string name_;
  46.     std::unordered_map<pid_t, int> fdrefs_;
  47.     std::unordered_map<pid_t, int> maprefs_;
  48.     void AddRefToPidMap(pid_t pid, std::unordered_map<pid_t, int>* map) {
  49.         // The first time we find a ref, we set the ref count to 1
  50.         // otherwise, increment the existing ref count
  51.         auto [it, inserted] = map->insert(std::make_pair(pid, 1));
  52.         if (!inserted) it->second++;
  53.         pids_.insert(pid);
  54.     }
  55. };
复制代码
主要成员变量



  • name_ : 该dmabuf的name,如果读不到name,默以为 ‘<unknown>’
  • pids_: 有dup或map该dmabuf的pid 集合
  • count_: fdinfo内里的count,目前看dambuf_dump并没有用。
  • size_: 该dmabuf占用的内存大小,单元是byte。
  • inode_: 该dmabuf的inode。
  • exporter_: 申请该dmabuf的name,如果读不到name,默以为'<unknown>’。
  • total_refs_: fdrefs 个数 + maprefs 个数,目前看dambuf_dump并没有用。
  • fdrefs_: 有open或dup该dmabuf的pid集合。注:一个pid对同一个dmabuf(inode)可能有多个reference。
  • maprefs_: 有map该dmabuf的pid集合。注:一个pid对同一个dmabuf(inode)可能有多个reference。

FD和Inode的关系



为了实现buffer的共享,在内核中将DMA-BUF将buffer与file关联起来,一个Buffer对应唯一一个File,一个File对应唯一一个 inode,将这个file的fd返回给应用层,通过binder实现进程之间的fd传递(dup),进而拿到唯一的File 和 Buffer。
 


dump整个体系流程原理

直接执行dmabuf_dump会dump 整个体系的dmabuf 信息,代码执行流程如下:


ReadDmaBufFdRefs

  1. // Public methods
  2. bool ReadDmaBufFdRefs(int pid, std::vector<DmaBuffer>* dmabufs,
  3.                              const std::string& procfs_path) {
  4.     constexpr char permission_err_msg[] =
  5.             "Failed to read fdinfo - requires either PTRACE_MODE_READ or root depending on "
  6.             "the device kernel";
  7.     static bool logged_permission_err = false;
  8.     std::string fdinfo_dir_path =
  9.             ::android::base::StringPrintf("%s/%d/fdinfo", procfs_path.c_str(), pid);
  10.     std::unique_ptr<DIR, decltype(&closedir)> dir(opendir(fdinfo_dir_path.c_str()), &closedir);
  11.     if (!dir) {
  12.         // Don't log permission errors to reduce log spam on devices where fdinfo
  13.         // of other processes can only be read by root.
  14.         if (errno != EACCES) {
  15.             PLOG(ERROR) << "Failed to open " << fdinfo_dir_path << " directory";
  16.         } else if (!logged_permission_err) {
  17.             LOG(ERROR) << permission_err_msg;
  18.             logged_permission_err = true;
  19.         }
  20.         return false;
  21.     }
  22.     struct dirent* dent;
  23.     while ((dent = readdir(dir.get()))) {
  24.         int fd;
  25.         if (!::android::base::ParseInt(dent->d_name, &fd)) {
  26.             continue;
  27.         }
  28.         // Set defaults in case the kernel doesn't give us the information
  29.         // we need in fdinfo
  30.         std::string name = "<unknown>";
  31.         std::string exporter = "<unknown>";
  32.         uint64_t count = 0;
  33.         uint64_t size = 0;
  34.         uint64_t inode = -1;
  35.         bool is_dmabuf_file = false;
  36.         auto fdinfo_result = ReadDmaBufFdInfo(pid, fd, &name, &exporter, &count, &size, &inode,
  37.                                               &is_dmabuf_file, procfs_path);
  38.         if (fdinfo_result != OK) {
  39.             if (fdinfo_result == NOT_FOUND) {
  40.                 continue;
  41.             }
  42.             // Don't log permission errors to reduce log spam when the process doesn't
  43.             // have the PTRACE_MODE_READ permission.
  44.             if (errno != EACCES) {
  45.                 LOG(ERROR) << "Failed to read fd info for pid: " << pid << ", fd: " << fd;
  46.             } else if (!logged_permission_err) {
  47.                 LOG(ERROR) << permission_err_msg;
  48.                 logged_permission_err = true;
  49.             }
  50.             return false;
  51.         }
  52.         if (!is_dmabuf_file) {
  53.             continue;
  54.         }
  55.         if (inode == static_cast<uint64_t>(-1)) {
  56.             // Fallback to stat() on the fd path to get inode number
  57.             std::string fd_path =
  58.                     ::android::base::StringPrintf("%s/%d/fd/%d", procfs_path.c_str(), pid, fd);
  59.             struct stat sb;
  60.             if (stat(fd_path.c_str(), &sb) < 0) {
  61.                 if (errno == ENOENT) {
  62.                   continue;
  63.                 }
  64.                 PLOG(ERROR) << "Failed to stat: " << fd_path;
  65.                 return false;
  66.             }
  67.             inode = sb.st_ino;
  68.             // If root, calculate size from the allocated blocks.
  69.             size = sb.st_blocks * 512;
  70.         }
  71.         auto buf = std::find_if(dmabufs->begin(), dmabufs->end(),
  72.                                 [&inode](const DmaBuffer& dbuf) { return dbuf.inode() == inode; });
  73.         if (buf != dmabufs->end()) {
  74.             if (buf->name() == "" || buf->name() == "<unknown>") buf->SetName(name);
  75.             if (buf->exporter() == "" || buf->exporter() == "<unknown>") buf->SetExporter(exporter);
  76.             if (buf->count() == 0) buf->SetCount(count);
  77.             buf->AddFdRef(pid);
  78.             continue;
  79.         }
  80.         DmaBuffer& db = dmabufs->emplace_back(inode, size, count, exporter, name);
  81.         db.AddFdRef(pid);
  82.     }
  83.     return true;
  84. }
复制代码
读取 /proc/<pid>/fdinfo/ 下面的所有fd,针对每个fd读取如下信息


  • count
  • exp_name,有exp_name则表示是 dmabuf 的file。
  • name
  • size
  • ino:inode
如果是dmabuf file,但没有读到inode,则:
读取 /proc/<pid>/fdinfo/fd的stat,从内里去读取size和inode
  1.         if (inode == static_cast<uint64_t>(-1)) {
  2.             // Fallback to stat() on the fd path to get inode number
  3.             std::string fd_path =
  4.                     ::android::base::StringPrintf("%s/%d/fd/%d", procfs_path.c_str(), pid, fd);
  5.             struct stat sb;
  6.             if (stat(fd_path.c_str(), &sb) < 0) {
  7.                 if (errno == ENOENT) {
  8.                   continue;
  9.                 }
  10.                 PLOG(ERROR) << "Failed to stat: " << fd_path;
  11.                 return false;
  12.             }
  13.             inode = sb.st_ino;
  14.             // If root, calculate size from the allocated blocks.
  15.             size = sb.st_blocks * 512;
  16.         }
复制代码
末了,调用DmaBuffer的AddFdRef,添加到fdrefs_ map内里去。
AddFdRef

  1.     // Adds one file descriptor reference for the given pid
  2.     void AddFdRef(pid_t pid) {
  3.         AddRefToPidMap(pid, &fdrefs_);
  4.         total_refs_++;
  5.     }
复制代码

ReadDmaBufMapRefs

  1. bool ReadDmaBufMapRefs(pid_t pid, std::vector<DmaBuffer>* dmabufs,
  2.                               const std::string& procfs_path,
  3.                               const std::string& dmabuf_sysfs_path) {
  4.     std::string mapspath = ::android::base::StringPrintf("%s/%d/maps", procfs_path.c_str(), pid);
  5.     std::ifstream fp(mapspath);
  6.     if (!fp) {
  7.         LOG(ERROR) << "Failed to open " << mapspath << " for pid: " << pid;
  8.         return false;
  9.     }
  10.     // Process the map if it is dmabuf. Add map reference to existing object in 'dmabufs'
  11.     // if it was already found. If it wasn't create a new one and append it to 'dmabufs'
  12.     auto account_dmabuf = [&](const android::procinfo::MapInfo& mapinfo) {
  13.         // no need to look into this mapping if it is not dmabuf
  14.         if (!FileIsDmaBuf(mapinfo.name)) {
  15.             return;
  16.         }
  17.         auto buf = std::find_if(
  18.                 dmabufs->begin(), dmabufs->end(),
  19.                 [&mapinfo](const DmaBuffer& dbuf) { return dbuf.inode() == mapinfo.inode; });
  20.         if (buf != dmabufs->end()) {
  21.             buf->AddMapRef(pid);
  22.             return;
  23.         }
  24.         // We have a new buffer, but unknown count and name and exporter name
  25.         // Try to lookup exporter name in sysfs
  26.         std::string exporter;
  27.         bool sysfs_stats = ReadBufferExporter(mapinfo.inode, &exporter, dmabuf_sysfs_path);
  28.         if (!sysfs_stats) {
  29.             exporter = "<unknown>";
  30.         }
  31.         // Using the VMA range as the size of the buffer can be misleading,
  32.         // due to partially mapped buffers or VMAs that extend beyond the
  33.         // buffer size.
  34.         //
  35.         // Attempt to retrieve the real buffer size from sysfs.
  36.         uint64_t size = 0;
  37.         if (!sysfs_stats || !ReadBufferSize(mapinfo.inode, &size, dmabuf_sysfs_path)) {
  38.             size = mapinfo.end - mapinfo.start;
  39.         }
  40.         DmaBuffer& dbuf = dmabufs->emplace_back(mapinfo.inode, size, 0, exporter, "<unknown>");
  41.         dbuf.AddMapRef(pid);
  42.     };
  43.     for (std::string line; getline(fp, line);) {
  44.         if (!::android::procinfo::ReadMapFileContent(line.data(), account_dmabuf)) {
  45.             LOG(ERROR) << "Failed to parse " << mapspath << " for pid: " << pid;
  46.             return false;
  47.         }
  48.     }
  49.     return true;
  50. }
复制代码
读取/proc/<pid>/maps下面的信息,只处理name以 /dmabuf 开头的map(也就是dmabuf的map)
注:如果从maps内里读到的inode不在fdrefs_ 内里,则会尝试到 /sys/kernel/dmabuf/buffers 内里去读该dmabuf的size,name,exp_name。 
然后调用DmaBuffer的AddMapRef,添加到maprefs_ map内里去。
AddMapRef

  1.     // Adds one map reference for the given pid
  2.     void AddMapRef(pid_t pid) {
  3.         AddRefToPidMap(pid, &maprefs_);
  4.         total_refs_++;
  5.     }
复制代码

dmabuf_dump <pid>

流程跟dump 整個体系的dmabuf info雷同,只是这里只dump指定pid的dmabuf info。



dmabuf_dump -a

以Table[buffer x process]方式出现dmabuf info。
跟dmabuf_dump相比,只是打印DmaBuffer的方式不一样。


dmabuf_dump -b

Dmabuf Sysfs Stats统计,有三个相关类:
类定义作用DmabufSysfsStats

Dmabuf sysfs 统计信息每一块Dmabuf信息exporter信息总Dmabuf信息DmabufInfo

统计一块Dmabuf 信息,包罗inode、exporter name、sizeDmabufTotal

统计整个体系的Dmabuf信息,包罗buffer总数、buffer总大小
代码流程




dmabuf的运用

实例分析

背景

项目中具体走漏场景:sat模式拍照退出相机 dma-buf heaps出现内存走漏。关闭相机后查察dmabuf内存占用,当为0情况是没有出现内存走漏,非0我们以为有内存走漏。
  1. adb shell dmabuf_dump 30618
  2. vendor.qti.came:30618
  3. Name Rss Pss nr_procs Inode
  4. <unknown> 4 kB 4 kB 1 348915
  5. <unknown> 144 kB 144 kB 1 348916
  6. <unknown> 32768 kB 32768 kB 1 348948
  7. <unknown> 4 kB 4 kB 1 349013
  8. <unknown> 148 kB 148 kB 1 349091
  9. <unknown> 4 kB 4 kB 1 349092
  10. <unknown> 4 kB 4 kB 1 349093
  11. <unknown> 4 kB 4 kB 1 349094
  12. <unknown> 32768 kB 32768 kB 1 357177
  13. <unknown> 148 kB 148 kB 1 358102点
  14. <unknown> 4 kB 4 kB 1 358103
  15. <unknown> 4 kB 4 kB 1 358104
  16. <unknown> 4 kB 4 kB 1 358105
  17. <unknown> 1024 kB 1024 kB 1 359590
  18. <unknown> 4 kB 4 kB 1 361040
  19. <unknown> 532 kB 532 kB 1 361101
  20. <unknown> 5308 kB 5308 kB 1 362040
  21. <unknown> 568 kB 568 kB 1 362057
  22. PROCESS TOTAL 73444 kB 73444 kB
  23. dmabuf total: 73444 kB kernel_rss: 0 kB userspace_rss: 73444 kB userspace_pss: 73444 kB
复制代码
可以看到一次利用走漏73444 kB。
解决方案

怎么去定位具体的走漏backtrace,进而定位到具体的代码?
通用的处理方式是在kernel底层dma-buf申请内存的位置参加tracepoint,用simpleperf去跟踪所有dma-buf申请时的backtrace,基于走漏点Inode去找到对应backtrace
加tracepoint

Using the Linux Kernel Tracepoints — The Linux Kernel documentation
tracepoint实现patch

drivers/dma-buf/dma-heap.c


  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Framework for userspace DMA-BUF allocations
  4. *
  5. * Copyright (C) 2011 Google, Inc.
  6. * Copyright (C) 2019 Linaro Ltd.
  7. */
  8. #include <linux/cdev.h>
  9. #include <linux/debugfs.h>
  10. #include <linux/device.h>
  11. #include <linux/dma-buf.h>
  12. #include <linux/err.h>
  13. #include <linux/xarray.h>
  14. #include <linux/list.h>
  15. #include <linux/slab.h>
  16. #include <linux/uaccess.h>
  17. #include <linux/syscalls.h>
  18. #include <linux/dma-heap.h>
  19. #include <uapi/linux/dma-heap.h>
  20. #define CREATE_TRACE_POINTS
  21. #include <trace/events/dma_buf.h>
  22. #define DEVNAME "dma_heap"
  23. #define NUM_HEAP_MINORS 128
  24. /**
  25. * struct dma_heap - represents a dmabuf heap in the system
  26. * @name:                used for debugging/device-node name
  27. * @ops:                ops struct for this heap
  28. * @heap_devt                heap device node
  29. * @list                list head connecting to list of heaps
  30. * @heap_cdev                heap char device
  31. * @heap_dev                heap device struct
  32. *
  33. * Represents a heap of memory from which buffers can be made.
  34. */
  35. struct dma_heap {
  36.         const char *name;
  37.         const struct dma_heap_ops *ops;
  38.         void *priv;
  39.         dev_t heap_devt;
  40.         struct list_head list;
  41.         struct cdev heap_cdev;
  42.         struct kref refcount;
  43.         struct device *heap_dev;
  44. };
  45. static LIST_HEAD(heap_list);
  46. static DEFINE_MUTEX(heap_list_lock);
  47. static dev_t dma_heap_devt;
  48. static struct class *dma_heap_class;
  49. static DEFINE_XARRAY_ALLOC(dma_heap_minors);
  50. struct dma_heap *dma_heap_find(const char *name)
  51. {
  52.         struct dma_heap *h;
  53.         mutex_lock(&heap_list_lock);
  54.         list_for_each_entry(h, &heap_list, list) {
  55.                 if (!strcmp(h->name, name)) {
  56.                         kref_get(&h->refcount);
  57.                         mutex_unlock(&heap_list_lock);
  58.                         return h;
  59.                 }
  60.         }
  61.         mutex_unlock(&heap_list_lock);
  62.         return NULL;
  63. }
  64. EXPORT_SYMBOL_GPL(dma_heap_find);
  65. void dma_heap_buffer_free(struct dma_buf *dmabuf)
  66. {
  67.         dma_buf_put(dmabuf);
  68. }
  69. EXPORT_SYMBOL_GPL(dma_heap_buffer_free);
  70. struct dma_buf *dma_heap_buffer_alloc(struct dma_heap *heap, size_t len,
  71.                                       unsigned int fd_flags,
  72.                                       unsigned int heap_flags)
  73. {
  74.         struct dma_buf *dmabuf = NULL;
  75.         if (fd_flags & ~DMA_HEAP_VALID_FD_FLAGS)
  76.                 return ERR_PTR(-EINVAL);
  77.         if (heap_flags & ~DMA_HEAP_VALID_HEAP_FLAGS)
  78.                 return ERR_PTR(-EINVAL);
  79.         /*
  80.          * Allocations from all heaps have to begin
  81.          * and end on page boundaries.
  82.          */
  83.         len = PAGE_ALIGN(len);
  84.         if (!len)
  85.                 return ERR_PTR(-EINVAL);
  86.         dmabuf = heap->ops->allocate(heap, len, fd_flags, heap_flags);
  87.         trace_dmabuf_alloc(dmabuf->exp_name, heap->name, len, file_inode(dmabuf->file)->i_ino);
  88.         return dmabuf;
  89. }
  90. EXPORT_SYMBOL_GPL(dma_heap_buffer_alloc);
  91. int dma_heap_bufferfd_alloc(struct dma_heap *heap, size_t len,
  92.                             unsigned int fd_flags,
  93.                             unsigned int heap_flags)
  94. {
  95.         struct dma_buf *dmabuf;
  96.         int fd;
  97.         dmabuf = dma_heap_buffer_alloc(heap, len, fd_flags, heap_flags);
  98.         if (IS_ERR(dmabuf))
  99.                 return PTR_ERR(dmabuf);
  100.         fd = dma_buf_fd(dmabuf, fd_flags);
  101.         if (fd < 0) {
  102.                 dma_buf_put(dmabuf);
  103.                 /* just return, as put will call release and that will free */
  104.         }
  105.         return fd;
  106. }
  107. EXPORT_SYMBOL_GPL(dma_heap_bufferfd_alloc);
  108. static int dma_heap_open(struct inode *inode, struct file *file)
  109. {
  110.         struct dma_heap *heap;
  111.         heap = xa_load(&dma_heap_minors, iminor(inode));
  112.         if (!heap) {
  113.                 pr_err("dma_heap: minor %d unknown.\n", iminor(inode));
  114.                 return -ENODEV;
  115.         }
  116.         /* instance data as context */
  117.         file->private_data = heap;
  118.         nonseekable_open(inode, file);
  119.         return 0;
  120. }
  121. static long dma_heap_ioctl_allocate(struct file *file, void *data)
  122. {
  123.         struct dma_heap_allocation_data *heap_allocation = data;
  124.         struct dma_heap *heap = file->private_data;
  125.         int fd;
  126.         if (heap_allocation->fd)
  127.                 return -EINVAL;
  128.         fd = dma_heap_bufferfd_alloc(heap, heap_allocation->len,
  129.                                      heap_allocation->fd_flags,
  130.                                      heap_allocation->heap_flags);
  131.         if (fd < 0)
  132.                 return fd;
  133.         heap_allocation->fd = fd;
  134.         return 0;
  135. }
  136. static unsigned int dma_heap_ioctl_cmds[] = {
  137.         DMA_HEAP_IOCTL_ALLOC,
  138. };
  139. static long dma_heap_ioctl(struct file *file, unsigned int ucmd,
  140.                            unsigned long arg)
  141. {
  142.         char stack_kdata[128];
  143.         char *kdata = stack_kdata;
  144.         unsigned int kcmd;
  145.         unsigned int in_size, out_size, drv_size, ksize;
  146.         int nr = _IOC_NR(ucmd);
  147.         int ret = 0;
  148.         if (nr >= ARRAY_SIZE(dma_heap_ioctl_cmds))
  149.                 return -EINVAL;
  150.         /* Get the kernel ioctl cmd that matches */
  151.         kcmd = dma_heap_ioctl_cmds[nr];
  152.         /* Figure out the delta between user cmd size and kernel cmd size */
  153.         drv_size = _IOC_SIZE(kcmd);
  154.         out_size = _IOC_SIZE(ucmd);
  155.         in_size = out_size;
  156.         if ((ucmd & kcmd & IOC_IN) == 0)
  157.                 in_size = 0;
  158.         if ((ucmd & kcmd & IOC_OUT) == 0)
  159.                 out_size = 0;
  160.         ksize = max(max(in_size, out_size), drv_size);
  161.         /* If necessary, allocate buffer for ioctl argument */
  162.         if (ksize > sizeof(stack_kdata)) {
  163.                 kdata = kmalloc(ksize, GFP_KERNEL);
  164.                 if (!kdata)
  165.                         return -ENOMEM;
  166.         }
  167.         if (copy_from_user(kdata, (void __user *)arg, in_size) != 0) {
  168.                 ret = -EFAULT;
  169.                 goto err;
  170.         }
  171.         /* zero out any difference between the kernel/user structure size */
  172.         if (ksize > in_size)
  173.                 memset(kdata + in_size, 0, ksize - in_size);
  174.         switch (kcmd) {
  175.         case DMA_HEAP_IOCTL_ALLOC:
  176.                 ret = dma_heap_ioctl_allocate(file, kdata);
  177.                 break;
  178.         default:
  179.                 ret = -ENOTTY;
  180.                 goto err;
  181.         }
  182.         if (copy_to_user((void __user *)arg, kdata, out_size) != 0)
  183.                 ret = -EFAULT;
  184. err:
  185.         if (kdata != stack_kdata)
  186.                 kfree(kdata);
  187.         return ret;
  188. }
  189. static const struct file_operations dma_heap_fops = {
  190.         .owner          = THIS_MODULE,
  191.         .open                = dma_heap_open,
  192.         .unlocked_ioctl = dma_heap_ioctl,
  193. #ifdef CONFIG_COMPAT
  194.         .compat_ioctl        = dma_heap_ioctl,
  195. #endif
  196. };
  197. /**
  198. * dma_heap_get_drvdata() - get per-subdriver data for the heap
  199. * @heap: DMA-Heap to retrieve private data for
  200. *
  201. * Returns:
  202. * The per-subdriver data for the heap.
  203. */
  204. void *dma_heap_get_drvdata(struct dma_heap *heap)
  205. {
  206.         return heap->priv;
  207. }
  208. EXPORT_SYMBOL_GPL(dma_heap_get_drvdata);
  209. static void dma_heap_release(struct kref *ref)
  210. {
  211.         struct dma_heap *heap = container_of(ref, struct dma_heap, refcount);
  212.         int minor = MINOR(heap->heap_devt);
  213.         /* Note, we already holding the heap_list_lock here */
  214.         list_del(&heap->list);
  215.         device_destroy(dma_heap_class, heap->heap_devt);
  216.         cdev_del(&heap->heap_cdev);
  217.         xa_erase(&dma_heap_minors, minor);
  218.         kfree(heap);
  219. }
  220. void dma_heap_put(struct dma_heap *h)
  221. {
  222.         /*
  223.          * Take the heap_list_lock now to avoid racing with code
  224.          * scanning the list and then taking a kref.
  225.          */
  226.         mutex_lock(&heap_list_lock);
  227.         kref_put(&h->refcount, dma_heap_release);
  228.         mutex_unlock(&heap_list_lock);
  229. }
  230. EXPORT_SYMBOL_GPL(dma_heap_put);
  231. /**
  232. * dma_heap_get_dev() - get device struct for the heap
  233. * @heap: DMA-Heap to retrieve device struct from
  234. *
  235. * Returns:
  236. * The device struct for the heap.
  237. */
  238. struct device *dma_heap_get_dev(struct dma_heap *heap)
  239. {
  240.         return heap->heap_dev;
  241. }
  242. EXPORT_SYMBOL_GPL(dma_heap_get_dev);
  243. /**
  244. * dma_heap_get_name() - get heap name
  245. * @heap: DMA-Heap to retrieve private data for
  246. *
  247. * Returns:
  248. * The char* for the heap name.
  249. */
  250. const char *dma_heap_get_name(struct dma_heap *heap)
  251. {
  252.         return heap->name;
  253. }
  254. EXPORT_SYMBOL_GPL(dma_heap_get_name);
  255. struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info)
  256. {
  257.         struct dma_heap *heap, *err_ret;
  258.         unsigned int minor;
  259.         int ret;
  260.         if (!exp_info->name || !strcmp(exp_info->name, "")) {
  261.                 pr_err("dma_heap: Cannot add heap without a name\n");
  262.                 return ERR_PTR(-EINVAL);
  263.         }
  264.         if (!exp_info->ops || !exp_info->ops->allocate) {
  265.                 pr_err("dma_heap: Cannot add heap with invalid ops struct\n");
  266.                 return ERR_PTR(-EINVAL);
  267.         }
  268.         /* check the name is unique */
  269.         heap = dma_heap_find(exp_info->name);
  270.         if (heap) {
  271.                 pr_err("dma_heap: Already registered heap named %s\n",
  272.                        exp_info->name);
  273.                 dma_heap_put(heap);
  274.                 return ERR_PTR(-EINVAL);
  275.         }
  276.         heap = kzalloc(sizeof(*heap), GFP_KERNEL);
  277.         if (!heap)
  278.                 return ERR_PTR(-ENOMEM);
  279.         kref_init(&heap->refcount);
  280.         heap->name = exp_info->name;
  281.         heap->ops = exp_info->ops;
  282.         heap->priv = exp_info->priv;
  283.         /* Find unused minor number */
  284.         ret = xa_alloc(&dma_heap_minors, &minor, heap,
  285.                        XA_LIMIT(0, NUM_HEAP_MINORS - 1), GFP_KERNEL);
  286.         if (ret < 0) {
  287.                 pr_err("dma_heap: Unable to get minor number for heap\n");
  288.                 err_ret = ERR_PTR(ret);
  289.                 goto err0;
  290.         }
  291.         /* Create device */
  292.         heap->heap_devt = MKDEV(MAJOR(dma_heap_devt), minor);
  293.         cdev_init(&heap->heap_cdev, &dma_heap_fops);
  294.         ret = cdev_add(&heap->heap_cdev, heap->heap_devt, 1);
  295.         if (ret < 0) {
  296.                 pr_err("dma_heap: Unable to add char device\n");
  297.                 err_ret = ERR_PTR(ret);
  298.                 goto err1;
  299.         }
  300.         heap->heap_dev = device_create(dma_heap_class,
  301.                                        NULL,
  302.                                        heap->heap_devt,
  303.                                        NULL,
  304.                                        heap->name);
  305.         if (IS_ERR(heap->heap_dev)) {
  306.                 pr_err("dma_heap: Unable to create device\n");
  307.                 err_ret = ERR_CAST(heap->heap_dev);
  308.                 goto err2;
  309.         }
  310.         /* Make sure it doesn't disappear on us */
  311.         heap->heap_dev = get_device(heap->heap_dev);
  312.         /* Add heap to the list */
  313.         mutex_lock(&heap_list_lock);
  314.         list_add(&heap->list, &heap_list);
  315.         mutex_unlock(&heap_list_lock);
  316.         return heap;
  317. err2:
  318.         cdev_del(&heap->heap_cdev);
  319. err1:
  320.         xa_erase(&dma_heap_minors, minor);
  321. err0:
  322.         kfree(heap);
  323.         return err_ret;
  324. }
  325. EXPORT_SYMBOL_GPL(dma_heap_add);
  326. static char *dma_heap_devnode(struct device *dev, umode_t *mode)
  327. {
  328.         return kasprintf(GFP_KERNEL, "dma_heap/%s", dev_name(dev));
  329. }
  330. static ssize_t total_pools_kb_show(struct kobject *kobj,
  331.                                    struct kobj_attribute *attr, char *buf)
  332. {
  333.         struct dma_heap *heap;
  334.         u64 total_pool_size = 0;
  335.         mutex_lock(&heap_list_lock);
  336.         list_for_each_entry(heap, &heap_list, list) {
  337.                 if (heap->ops->get_pool_size)
  338.                         total_pool_size += heap->ops->get_pool_size(heap);
  339.         }
  340.         mutex_unlock(&heap_list_lock);
  341.         return sysfs_emit(buf, "%llu\n", total_pool_size / 1024);
  342. }
  343. static struct kobj_attribute total_pools_kb_attr =
  344.         __ATTR_RO(total_pools_kb);
  345. static struct attribute *dma_heap_sysfs_attrs[] = {
  346.         &total_pools_kb_attr.attr,
  347.         NULL,
  348. };
  349. ATTRIBUTE_GROUPS(dma_heap_sysfs);
  350. static struct kobject *dma_heap_kobject;
  351. static int dma_heap_sysfs_setup(void)
  352. {
  353.         int ret;
  354.         dma_heap_kobject = kobject_create_and_add("dma_heap", kernel_kobj);
  355.         if (!dma_heap_kobject)
  356.                 return -ENOMEM;
  357.         ret = sysfs_create_groups(dma_heap_kobject, dma_heap_sysfs_groups);
  358.         if (ret) {
  359.                 kobject_put(dma_heap_kobject);
  360.                 return ret;
  361.         }
  362.         return 0;
  363. }
  364. static void dma_heap_sysfs_teardown(void)
  365. {
  366.         kobject_put(dma_heap_kobject);
  367. }
  368. static int dma_heap_init(void)
  369. {
  370.         int ret;
  371.         ret = dma_heap_sysfs_setup();
  372.         if (ret)
  373.                 return ret;
  374.         ret = alloc_chrdev_region(&dma_heap_devt, 0, NUM_HEAP_MINORS, DEVNAME);
  375.         if (ret)
  376.                 goto err_chrdev;
  377.         dma_heap_class = class_create(THIS_MODULE, DEVNAME);
  378.         if (IS_ERR(dma_heap_class)) {
  379.                 ret = PTR_ERR(dma_heap_class);
  380.                 goto err_class;
  381.         }
  382.         dma_heap_class->devnode = dma_heap_devnode;
  383.         return 0;
  384. err_class:
  385.         unregister_chrdev_region(dma_heap_devt, NUM_HEAP_MINORS);
  386. err_chrdev:
  387.         dma_heap_sysfs_teardown();
  388.         return ret;
  389. }
  390. subsys_initcall(dma_heap_init);
复制代码

include/trace/events/dma_buf.h
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #undef TRACE_SYSTEM
  3. #define TRACE_SYSTEM dma_buf
  4. #if !defined(_TRACE_DMA_BUF_H) || defined(TRACE_HEADER_MULTI_READ)
  5. #define _TRACE_DMA_BUF_H
  6. #include <linux/types.h>
  7. #include <linux/tracepoint.h>
  8. TRACE_EVENT(dmabuf_alloc,
  9.   TP_PROTO(const char *string1, const char *string2,
  10.       uint64_t val1, uint64_t val2),
  11.   TP_ARGS(string1, string2, val1, val2),
  12.   TP_STRUCT__entry(
  13.       __string(string1, string1)
  14.       __string(string2, string2)
  15.       __field(uint64_t, val1)
  16.       __field(uint64_t, val2)
  17.   ),
  18.   TP_fast_assign(
  19.       __assign_str(string1, string1);
  20.       __assign_str(string2, string2);
  21.       __entry->val1 = val1;
  22.       __entry->val2 = val2;
  23.   ),
  24.   TP_printk(
  25.       "%s: %s Len=%llu Inode=%llu",
  26.           __get_str(string1), __get_str(string2),
  27.           __entry->val1, __entry->val2
  28.   )
  29. );
  30. #endif /* _TRACE_DMA_BUF_H */
  31. /* This part must be outside protection */
  32. #include <trace/define_trace.h>
复制代码

使用simpleperf抓取dmabuf申请点所有backtrace



perf_cam_log.sh
  1. #!/bin/bash
  2. adb root; adb remount
  3. local_path=$(date +%F_%H%M%S)
  4. #pid=$(adb shell ps | grep camera.provider | awk '{print $2}')
  5. pid_app=$(adb shell ps | grep com.android.camera | awk '{print $2}')
  6. pid_server=$(adb shell ps | grep -Eia "cameraserver$" | awk '{print $2}')
  7. pid_provider=$(adb shell ps | grep camera.provider | awk '{print $2}')
  8. pid_allocate=$(adb shell ps | grep vendor.qti.hardware.display.allocator-service | awk '{print $2}')
  9. pid_hidl=$(adb shell ps | grep android.hidl.allocator@1.0-service | awk '{print $2}')
  10. mkdir $local_path
  11. echo "Begin to catch perf data..."
  12. if [ ! -n "$1" ] ;then
  13.     adb shell "simpleperf record -e camera:cam_log_event,dma_buf:dmabuf_alloc -p $pid_app,$pid_server,$pid_provider,$pid_allocate,$pid_hidl --call-graph dwarf --duration 20 -o /data/local/tmp/perf.data"
  14. else
  15.     adb shell "simpleperf record -e camera:cam_log_event,dma_buf:dmabuf_alloc -p $pid,$pid_server,$pid_provider,$pid_allocate,$pid_hidl --call-graph dwarf --duration $1 -o /data/local/tmp/perf.data"
  16. fi
  17. echo "Complete"
  18. adb shell "simpleperf report -i /data/local/tmp/perf.data" > $local_path/perf.txt
  19. adb shell "simpleperf report -i /data/local/tmp/perf.data -g --full-callgraph" > $local_path/perf_callgraph.txt
  20. adb pull /data/local/tmp/perf.data $local_path
  21. python3 scripts/report_sample.py  $local_path/perf.data  --show_tracing_data > $local_path/perf_trace_report.txt
复制代码
执行./perf_cam_log.sh
利用一遍复现步调就可以抓到dmabuf申请点所有backtrace。
举例

打开perf_trace_report.txt
搜索inode “348915”找到:
HwBinder:30618_ 31356 [006] 1876.000000: 1 dma_buf:dmabuf_alloc:
ffffffe8c67a714c dma_heap_buffer_alloc ([kernel.kallsyms])
ffffffe8c67a714a dma_heap_buffer_alloc ([kernel.kallsyms])
ffffffe8c67a798a dma_heap_ioctl ([kernel.kallsyms])
ffffffe8c5f88dda __arm64_sys_ioctl ([kernel.kallsyms])
ffffffe8c5a8a4d6 el0_svc_common ([kernel.kallsyms])
ffffffe8c725e272 el0_svc ([kernel.kallsyms])
ffffffe8c725e1e6 el0_sync_handler ([kernel.kallsyms])
ffffffe8c5a120be el0_sync ([kernel.kallsyms])
7c7fe1dc0c __ioctl (/apex/com.android.runtime/lib64/bionic/libc.so)
7c7fdd784c ioctl (/apex/com.android.runtime/lib64/bionic/libc.so)
796f39b020 BufferAllocator:mabufAlloc(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long) (/apex/com.android.vndk.v31/lib64/libdmabufhe
796f39b26c BufferAllocator::Alloc(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, unsigned int, unsigned long) (/apex/com.android.vnd
796f39e1bc DmabufHeapAlloc (/apex/com.android.vndk.v31/lib64/libdmabufheap.so)
796b8ce17c rpcmem_alloc_internal (/vendor/lib64/libcdsprpc.so)
796b8cc628 apps_mem_request_map64 (/vendor/lib64/libcdsprpc.so)
796b8cce9c apps_mem_skel_invoke.cfi (/vendor/lib64/libcdsprpc.so)
796b8c46c0 listener_start_thread.cfi (/vendor/lib64/libcdsprpc.so)
7c7fe329a4 __pthread_start(void*) (/apex/com.android.runtime/lib64/bionic/libc.so)
tracing data:
common_type : 693
common_flags : 0
common_preempt_count : 1
common_pid : 31356
string1 : system
string2 : system
val1 : 4096
val2 : 348915
上面的信息就是走漏点的backtrace。
基于上面点可以看到是libcdsprpc.so内部走漏,那接下来就需要看到底哪些算法使用到cdsp


Android 中 gralloc buffer和image buffer底层都是基于 dma_buf来实现的。
Provider进程基于vendor.qti.hardware.display.allocator-service申请驻留分析

libdmabufheaps.so

platform/system/memory/libdmabufheap
Android.bp
  1. //
  2. // Copyright (C) 2020 The Android Open Source Project
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. //
  8. //      http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software
  11. // distributed under the License is distributed on an "AS IS" BASIS,
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. // See the License for the specific language governing permissions and
  14. // limitations under the License.
  15. //
  16. package {
  17.     default_applicable_licenses: ["Android-Apache-2.0"],
  18. }
  19. cc_library {
  20.    srcs: [
  21.         "BufferAllocator.cpp",
  22.         "BufferAllocatorWrapper.cpp",
  23.      ],
  24.     name: "libdmabufheap",
  25.     vendor_available: true,
  26.     vndk: {
  27.         enabled: true,
  28.         support_system_process: true,
  29.     },
  30.     // Added because codec2 is double_loadable.
  31.     // See b/147147883, b/147147992
  32.     double_loadable:true,
  33.     apex_available: [
  34.         "//apex_available:platform",
  35.         "//apex_available:anyapex",
  36.     ],
  37.     min_sdk_version: "29",
  38.     cflags: [
  39.         "-Wall",
  40.         "-Werror",
  41.     ],
  42.     local_include_dirs: [
  43.         "include",
  44.     ],
  45.     export_include_dirs: [
  46.         "include",
  47.     ],
  48.     static_libs: [
  49.         "libbase",
  50.         "libion",
  51.         "libutils",
  52.     ],
  53.     shared_libs: [
  54.         "libcutils",
  55.         "liblog",
  56.     ],
  57.     export_static_lib_headers: [
  58.         "libbase",
  59.         "libion",
  60.     ],
  61. }
复制代码

BufferAllocator.cpp

  1. /*
  2. * Copyright (C) 2020 The Android Open Source Project
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. *      http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #define LOG_TAG "DMABUFHEAPS"
  17. #include <BufferAllocator/BufferAllocator.h>
  18. #include <errno.h>
  19. #include <fcntl.h>
  20. #include <ion/ion.h>
  21. #include <linux/dma-buf.h>
  22. #include <linux/dma-heap.h>
  23. #include <linux/ion_4.12.h>
  24. #include <stdlib.h>
  25. #include <sys/types.h>
  26. #include <unistd.h>
  27. #include <shared_mutex>
  28. #include <string>
  29. #include <unordered_set>
  30. #include <android-base/logging.h>
  31. #include <android-base/unique_fd.h>
  32. #define ATRACE_TAG ATRACE_TAG_ALWAYS
  33. #include <cutils/trace.h>
  34. #include <sys/stat.h>
  35. static constexpr char kDmaHeapRoot[] = "/dev/dma_heap/";
  36. static constexpr char kIonDevice[] = "/dev/ion";
  37. static constexpr char kIonSystemHeapName[] = "ion_system_heap";
  38. void BufferAllocator::LogInterface(const std::string& interface) {
  39.     if (!logged_interface_) {
  40.         LOG(INFO) << "Using : " << interface;
  41.         logged_interface_ = true;
  42.     }
  43. }
  44. int BufferAllocator::OpenDmabufHeap(const std::string& heap_name) {
  45.     std::shared_lock<std::shared_mutex> slock(dmabuf_heap_fd_mutex_);
  46.     /* Check if heap has already been opened. */
  47.     auto it = dmabuf_heap_fds_.find(heap_name);
  48.     if (it != dmabuf_heap_fds_.end())
  49.         return it->second;
  50.     slock.unlock();
  51.     /*
  52.      * Heap device needs to be opened, use a unique_lock since dmabuf_heap_fd_
  53.      * needs to be modified.
  54.      */
  55.     std::unique_lock<std::shared_mutex> ulock(dmabuf_heap_fd_mutex_);
  56.     /*
  57.      * Check if we already opened this heap again to prevent racing threads from
  58.      * opening the heap device multiple times.
  59.      */
  60.     it = dmabuf_heap_fds_.find(heap_name);
  61.     if (it != dmabuf_heap_fds_.end()) return it->second;
  62.     std::string heap_path = kDmaHeapRoot + heap_name;
  63.     int fd = TEMP_FAILURE_RETRY(open(heap_path.c_str(), O_RDONLY | O_CLOEXEC));
  64.     if (fd < 0) return -errno;
  65.     LOG(INFO) << "Using DMA-BUF heap named: " << heap_name;
  66.     auto ret = dmabuf_heap_fds_.insert({heap_name, android::base::unique_fd(fd)});
  67.     CHECK(ret.second);
  68.     return fd;
  69. }
  70. void BufferAllocator::QueryIonHeaps() {
  71.     uses_legacy_ion_iface_ = ion_is_legacy(ion_fd_);
  72.     if (uses_legacy_ion_iface_) {
  73.         LogInterface("Legacy ion heaps");
  74.         MapNameToIonMask(kDmabufSystemHeapName, ION_HEAP_SYSTEM_MASK, ION_FLAG_CACHED);
  75.         MapNameToIonMask(kDmabufSystemUncachedHeapName, ION_HEAP_SYSTEM_MASK);
  76.         return;
  77.     }
  78.     int heap_count;
  79.     int ret = ion_query_heap_cnt(ion_fd_, &heap_count);
  80.     if (ret == 0) {
  81.         ion_heap_info_.resize(heap_count, {});
  82.         ret = ion_query_get_heaps(ion_fd_, heap_count, ion_heap_info_.data());
  83.     }
  84.     // Abort if heap query fails
  85.     CHECK(ret == 0)
  86.             << "Non-legacy ION implementation must support heap information queries";
  87.     LogInterface("Non-legacy ION heaps");
  88.     /*
  89.      * No error checking here, it is possible that devices may have used another name for
  90.      * the ion system heap.
  91.      */
  92.     MapNameToIonName(kDmabufSystemHeapName, kIonSystemHeapName, ION_FLAG_CACHED);
  93.     MapNameToIonName(kDmabufSystemUncachedHeapName, kIonSystemHeapName);
  94. }
  95. BufferAllocator::BufferAllocator() {
  96.     ion_fd_.reset(TEMP_FAILURE_RETRY(open(kIonDevice, O_RDONLY| O_CLOEXEC)));
  97.     if (ion_fd_ >= 0)
  98.         QueryIonHeaps();
  99. }
  100. int BufferAllocator::MapNameToIonMask(const std::string& heap_name, unsigned int ion_heap_mask,
  101.                                       unsigned int ion_heap_flags) {
  102.     if (!ion_heap_mask)
  103.         return -EINVAL;
  104.     IonHeapConfig heap_config = { ion_heap_mask, ion_heap_flags };
  105.     std::unique_lock<std::shared_mutex> ulock(heap_name_to_config_mutex_);
  106.     heap_name_to_config_[heap_name] = heap_config;
  107.     return 0;
  108. }
  109. int BufferAllocator::GetIonHeapIdByName(const std::string& heap_name, unsigned int* heap_id) {
  110.     for (auto& it : ion_heap_info_) {
  111.         if (heap_name == it.name) {
  112.             *heap_id = it.heap_id;
  113.             return 0;
  114.         }
  115.     }
  116.     LOG(ERROR) << "No ion heap of name " << heap_name << " exists";
  117.     return -EINVAL;
  118. }
  119. int BufferAllocator::MapNameToIonName(const std::string& heap_name,
  120.                                       const std::string& ion_heap_name,
  121.                                       unsigned int ion_heap_flags) {
  122.     unsigned int ion_heap_id = 0;
  123.     auto ret = GetIonHeapIdByName(ion_heap_name, &ion_heap_id);
  124.     if (ret < 0)
  125.         return ret;
  126.     unsigned int ion_heap_mask = 1 << ion_heap_id;
  127.     IonHeapConfig heap_config = { ion_heap_mask, ion_heap_flags };
  128.     std::unique_lock<std::shared_mutex> ulock(heap_name_to_config_mutex_);
  129.     heap_name_to_config_[heap_name] = heap_config;
  130.     return 0;
  131. }
  132. int BufferAllocator::MapNameToIonHeap(const std::string& heap_name,
  133.                                       const std::string& ion_heap_name,
  134.                                       unsigned int ion_heap_flags,
  135.                                       unsigned int legacy_ion_heap_mask,
  136.                                       unsigned int legacy_ion_heap_flags) {
  137.     /* if the DMA-BUF Heap exists, we can ignore ion mappings */
  138.     int ret = OpenDmabufHeap(heap_name);
  139.     if (ret >= 0)
  140.         return 0;
  141.     /* If ION support is not detected, ignore the mappings */
  142.     if (ion_fd_ < 0) return 0;
  143.     if (uses_legacy_ion_iface_ || ion_heap_name == "") {
  144.         ret = MapNameToIonMask(heap_name, legacy_ion_heap_mask, legacy_ion_heap_flags);
  145.     } else if (!ion_heap_name.empty()) {
  146.         ret = MapNameToIonName(heap_name, ion_heap_name, ion_heap_flags);
  147.     }
  148.     return ret;
  149. }
  150. int BufferAllocator::GetIonConfig(const std::string& heap_name, IonHeapConfig& heap_config) {
  151.     int ret = 0;
  152.     std::shared_lock<std::shared_mutex> slock(heap_name_to_config_mutex_);
  153.     auto it = heap_name_to_config_.find(heap_name);
  154.     if (it != heap_name_to_config_.end()) {
  155.         heap_config = it->second;
  156.         return ret;
  157.     }
  158.     slock.unlock();
  159.     if (uses_legacy_ion_iface_) {
  160.         ret = -EINVAL;
  161.     } else {
  162.         unsigned int heap_id;
  163.         ret = GetIonHeapIdByName(heap_name, &heap_id);
  164.         if (ret == 0) {
  165.             heap_config.mask = 1 << heap_id;
  166.             heap_config.flags = 0;
  167.             /* save it so that this lookup does not need to happen again */
  168.             std::unique_lock<std::shared_mutex> ulock(heap_name_to_config_mutex_);
  169.             heap_name_to_config_[heap_name] = heap_config;
  170.         }
  171.     }
  172.     if (ret)
  173.         LOG(ERROR) << "No ion heap of name " << heap_name << " exists";
  174.     return ret;
  175. }
  176. int BufferAllocator::DmabufAlloc(const std::string& heap_name, size_t len) {
  177.     int fd = OpenDmabufHeap(heap_name);
  178.     if (fd < 0) return fd;
  179.     struct dma_heap_allocation_data heap_data{
  180.         .len = len,  // length of data to be allocated in bytes
  181.         .fd_flags = O_RDWR | O_CLOEXEC,  // permissions for the memory to be allocated
  182.     };
  183.     auto ret = TEMP_FAILURE_RETRY(ioctl(fd, DMA_HEAP_IOCTL_ALLOC, &heap_data));
  184.     if (ret < 0) {
  185.         PLOG(ERROR) << "Unable to allocate from DMA-BUF heap: " << heap_name;
  186.         return ret;
  187.     }
  188.     return heap_data.fd;
  189. }
  190. int BufferAllocator::IonAlloc(const std::string& heap_name, size_t len,
  191.                               unsigned int heap_flags, size_t legacy_align) {
  192.     IonHeapConfig heap_config;
  193.     auto ret = GetIonConfig(heap_name, heap_config);
  194.     if (ret)
  195.         return ret;
  196.     int alloc_fd = -1;
  197.     unsigned int flags = heap_config.flags | heap_flags;
  198.     ret = ion_alloc_fd(ion_fd_, len, legacy_align, heap_config.mask, flags, &alloc_fd);
  199.     if (ret) {
  200.         PLOG(ERROR) << "allocation fails for ion heap with mask: " << heap_config.mask
  201.                     << " and flags: " << flags;
  202.         return ret;
  203.     }
  204.     return alloc_fd;
  205. }
  206. #define TRACE_MARKER_PATH "/sys/kernel/tracing/trace_marker"
  207. void trace_kernel_buffer(const char *fmt, ...)
  208. {
  209.     char buf[PAGE_SIZE];
  210.     va_list ap;
  211.     static int fd = -1;
  212.     ssize_t len, ret;
  213.     if (fd < 0) {
  214.         fd = open(TRACE_MARKER_PATH, O_WRONLY | O_CLOEXEC);
  215.         if (fd < 0) {
  216.             return;
  217.         }
  218.     }
  219.     va_start(ap, fmt);
  220.     vsnprintf(buf, sizeof(buf), fmt, ap);
  221.     va_end(ap);
  222.     len = strlen(buf);
  223.     ret = TEMP_FAILURE_RETRY(write(fd, buf, len));
  224.     if (ret < 0) {
  225.         if (errno != EBADF) {
  226.             close(fd);
  227.             fd = -1;
  228.         }
  229.         return;
  230.     }
  231. }
  232. int BufferAllocator::Alloc(const std::string& heap_name, size_t len,
  233.                            unsigned int heap_flags, size_t legacy_align) {
  234.     int fd = DmabufAlloc(heap_name, len);
  235.     if (fd < 0)
  236.            fd = IonAlloc(heap_name, len, heap_flags, legacy_align);
  237.     struct stat statbuf;
  238.     char trace_name[128];
  239.     fstat(fd, &statbuf);
  240.     sprintf(trace_name,"BufferAllocator inode:%llu", statbuf.st_ino);
  241. //    ATRACE_INT("BufferAllocator", statbuf.st_ino);
  242.     ATRACE_BEGIN(trace_name);
  243.     ATRACE_END();
  244.     //trace_kernel_buffer(trace_name);
  245.     return fd;
  246. }
  247. int BufferAllocator::AllocSystem(bool cpu_access_needed, size_t len, unsigned int heap_flags,
  248.                                  size_t legacy_align) {
  249.     if (!cpu_access_needed) {
  250.         /*
  251.          * CPU does not need to access allocated buffer so we try to allocate in
  252.          * the 'system-uncached' heap after querying for its existence.
  253.          */
  254.         static bool uncached_dmabuf_system_heap_support = [this]() -> bool {
  255.             auto dmabuf_heap_list = this->GetDmabufHeapList();
  256.             return (dmabuf_heap_list.find(kDmabufSystemUncachedHeapName) != dmabuf_heap_list.end());
  257.         }();
  258.         if (uncached_dmabuf_system_heap_support)
  259.             return DmabufAlloc(kDmabufSystemUncachedHeapName, len);
  260.         static bool uncached_ion_system_heap_support = [this]() -> bool {
  261.             IonHeapConfig heap_config;
  262.             auto ret = this->GetIonConfig(kDmabufSystemUncachedHeapName, heap_config);
  263.             return (ret == 0);
  264.         }();
  265.         if (uncached_ion_system_heap_support)
  266.             return IonAlloc(kDmabufSystemUncachedHeapName, len, heap_flags, legacy_align);
  267.     }
  268.     /*
  269.      * Either 1) CPU needs to access allocated buffer OR 2) CPU does not need to
  270.      * access allocated buffer but the "system-uncached" heap is unsupported.
  271.      */
  272.     return Alloc(kDmabufSystemHeapName, len, heap_flags, legacy_align);
  273. }
  274. int BufferAllocator::LegacyIonCpuSync(unsigned int dmabuf_fd,
  275.                                       const CustomCpuSyncLegacyIon& legacy_ion_cpu_sync_custom,
  276.                                       void *legacy_ion_custom_data) {
  277.     if (!legacy_ion_cpu_sync_custom)
  278.         return ion_sync_fd(ion_fd_, dmabuf_fd);
  279.     // dup ion_fd_ so that we retain its ownership.
  280.     int new_ion_fd = TEMP_FAILURE_RETRY(dup(ion_fd_.get()));
  281.     if (new_ion_fd < 0) {
  282.         PLOG(ERROR) << "Unable to dup ion fd. error: " << new_ion_fd;
  283.         return new_ion_fd;
  284.     }
  285.     int ret = legacy_ion_cpu_sync_custom(new_ion_fd, dmabuf_fd, legacy_ion_custom_data);
  286.     close(new_ion_fd);
  287.     return ret;
  288. }
  289. int BufferAllocator::DoSync(unsigned int dmabuf_fd, bool start, SyncType sync_type,
  290.                             const CustomCpuSyncLegacyIon& legacy_ion_cpu_sync_custom,
  291.                             void *legacy_ion_custom_data) {
  292.     if (uses_legacy_ion_iface_) {
  293.         return LegacyIonCpuSync(dmabuf_fd, legacy_ion_cpu_sync_custom,
  294.                                 legacy_ion_custom_data);
  295.     }
  296.     struct dma_buf_sync sync = {
  297.         .flags = (start ? DMA_BUF_SYNC_START : DMA_BUF_SYNC_END) |
  298.                 static_cast<uint64_t>(sync_type),
  299.     };
  300.     return TEMP_FAILURE_RETRY(ioctl(dmabuf_fd, DMA_BUF_IOCTL_SYNC, &sync));
  301. }
  302. int BufferAllocator::CpuSyncStart(unsigned int dmabuf_fd, SyncType sync_type,
  303.                                   const CustomCpuSyncLegacyIon& legacy_ion_cpu_sync_custom,
  304.                                   void *legacy_ion_custom_data) {
  305.     int ret = DoSync(dmabuf_fd, true /* start */, sync_type, legacy_ion_cpu_sync_custom,
  306.                      legacy_ion_custom_data);
  307.     if (ret) PLOG(ERROR) << "CpuSyncStart() failure";
  308.     return ret;
  309. }
  310. int BufferAllocator::CpuSyncEnd(unsigned int dmabuf_fd, SyncType sync_type,
  311.                                 const CustomCpuSyncLegacyIon& legacy_ion_cpu_sync_custom,
  312.                                 void* legacy_ion_custom_data) {
  313.     int ret = DoSync(dmabuf_fd, false /* start */, sync_type, legacy_ion_cpu_sync_custom,
  314.                      legacy_ion_custom_data);
  315.     if (ret) PLOG(ERROR) << "CpuSyncEnd() failure";
  316.     return ret;
  317. }
  318. std::unordered_set<std::string> BufferAllocator::GetDmabufHeapList() {
  319.     std::unordered_set<std::string> heap_list;
  320.     std::unique_ptr<DIR, int (*)(DIR*)> dir(opendir(kDmaHeapRoot), closedir);
  321.     if (dir) {
  322.         struct dirent* dent;
  323.         while ((dent = readdir(dir.get()))) {
  324.             if (!strcmp(dent->d_name, ".") || !strcmp(dent->d_name, "..")) continue;
  325.             heap_list.insert(dent->d_name);
  326.         }
  327.     }
  328.     return heap_list;
  329. }
  330. bool BufferAllocator::CheckIonSupport() {
  331.     static bool ion_support = (access(kIonDevice, R_OK) == 0);
  332.     return ion_support;
  333. }
复制代码

p1_trace.sh
  1. adb wait-for-device
  2. adb root
  3. adb shell setenforce 0
  4. adb shell "echo 0 > sys/kernel/tracing/tracing_on"
  5. adb shell setprop vendor.camera.sensor.logsystem 0
  6. #https://source.n.xiaomi.com/opengrok-s/xref/pangu_8450-s-combine/frameworks/native/cmds/atrace/atrace.cpp
  7. #adb shell perfetto --out /sdcard/camera_perf.perfetto-trace --app com.android.camera --buffer 300mb --time 5s sched freq idle ss am wm pm gfx view binder_driver hal dalvik camera video audio input res memory bionic
  8. #adb shell perfetto --out /sdcard/camera_perf.perfetto-trace --buffer 100mb --time 5s sched freq idle ss am wm pm gfx view binder_driver hal dalvik camera input res memory bionic
  9. cat perfetto_config.pbtx | adb shell "perfetto \
  10.   -c - --txt \
  11.   -o /sdcard/camera_perf.perfetto-trace"
  12. adb pull sdcard/camera_perf.perfetto-trace
复制代码

可以抓到如下trace:







免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小小小幸运

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表