mirror-linux/Documentation/driver-api
Hridya Valsaraju bdb8d06dfe dmabuf: Add the capability to expose DMA-BUF stats in sysfs
Overview
========
The patch adds DMA-BUF statistics to /sys/kernel/dmabuf/buffers. It
allows statistics to be enabled for each DMA-BUF in sysfs by enabling
the config CONFIG_DMABUF_SYSFS_STATS.

The following stats will be exposed by the interface:

/sys/kernel/dmabuf/buffers/<inode_number>/exporter_name
/sys/kernel/dmabuf/buffers/<inode_number>/size
/sys/kernel/dmabuf/buffers/<inode_number>/attachments/<attach_uid>/device
/sys/kernel/dmabuf/buffers/<inode_number>/attachments/<attach_uid>/map_counter

The inode_number is unique for each DMA-BUF and was added earlier [1]
in order to allow userspace to track DMA-BUF usage across different
processes.

Use Cases
=========
The interface provides a way to gather DMA-BUF per-buffer statistics
from production devices. These statistics will be used to derive DMA-BUF
per-exporter stats and per-device usage stats for Android Bug reports.
The corresponding userspace changes can be found at [2].
Telemetry tools will also capture this information(along with other
memory metrics) periodically as well as on important events like a
foreground app kill (which might have been triggered by Low Memory
Killer). It will also contribute to provide a snapshot of the system
memory usage on other events such as OOM kills and Application Not
Responding events.

Background
==========
Currently, there are two existing interfaces that provide information
about DMA-BUFs.
1) /sys/kernel/debug/dma_buf/bufinfo
debugfs is however unsuitable to be mounted in production systems and
cannot be considered as an alternative to the sysfs interface being
proposed.
2) proc/<pid>/fdinfo/<fd>
The proc/<pid>/fdinfo/<fd> files expose information about DMA-BUF fds.
However, the existing procfs interfaces can only provide information
about the buffers for which processes hold fds or have the buffers
mmapped into their address space. Since the procfs interfaces alone
cannot provide a full picture of all DMA-BUFs in the system, there is
the need for an alternate interface to provide this information on
production systems.

The patch contains the following major improvements over v1:
1) Each attachment is represented by its own directory to allow creating
a symlink to the importing device and to also provide room for future
expansion.
2) The number of distinct mappings of each attachment is exposed in a
separate file.
3) The per-buffer statistics are now in /sys/kernel/dmabuf/buffers
inorder to make the interface expandable in future.

All of the improvements above are based on suggestions/feedback from
Daniel Vetter and Christian König.

A shell script that can be run on a classic Linux environment to read
out the DMA-BUF statistics can be found at [3](suggested by John
Stultz).

[1]: https://lore.kernel.org/patchwork/patch/1088791/
[2]: https://android-review.googlesource.com/q/topic:%22dmabuf-sysfs%22+(status:open%20OR%20status:merged)
[3]: https://android-review.googlesource.com/c/platform/system/memory/libmeminfo/+/1549734

Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Hridya Valsaraju <hridya@google.com>
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20210603214758.2955251-1-hridya@google.com
2021-06-15 11:50:24 +02:00
..
80211 docs: net: 80211: reduce docs build time 2020-10-08 10:41:49 +02:00
acpi
backlight
cxl cxl/mem: Add basic IOCTL interface 2021-02-16 20:36:38 -08:00
dmaengine dmaengine: doc: client: Update for dmaengine_get_dma_device() usage 2020-12-11 21:20:08 +05:30
driver-model It's been a relatively busy cycle in docsland, though more than usually 2021-04-26 13:22:43 -07:00
early-userspace Replace HTTP links with HTTPS ones: Documentation/driver-api 2020-06-26 11:09:04 -06:00
firmware docs: driver-api: firmware: fallback-mechanisms: Fix rendering of bullet point 2020-09-08 13:32:06 +02:00
fpga docs: fpga: replace :c:member: macros 2020-10-15 07:49:43 +02:00
gpio gpio updates for v5.13 2021-05-05 12:39:29 -07:00
i3c docs: driver-api: i3c: Replace HTTP links with HTTPS ones 2020-07-13 09:32:36 -06:00
iio docs: iio: mark "repeat" sysfs attribute as optional 2021-03-11 20:47:08 +00:00
md
media media: v4l: fwnode: Rename v4l2_async_register_subdev_sensor_common 2021-04-06 14:36:54 +02:00
mei docs updates for v5.10-rc1 2020-10-16 15:02:21 -07:00
memory-devices Replace HTTP links with HTTPS ones: Documentation/driver-api 2020-06-26 11:09:04 -06:00
mmc Replace HTTP links with HTTPS ones: Documentation/driver-api 2020-06-26 11:09:04 -06:00
mtd MTD core: 2020-12-16 14:58:35 -08:00
nfc
nvdimm MAINTAINERS: Move nvdimm mailing list 2021-05-12 12:37:15 -07:00
pci
phy
pldmfw Add pldmfw library for PLDM firmware update 2020-07-28 17:07:06 -07:00
pm docs: devices.rst: fix a C reference markup 2020-10-15 07:49:44 +02:00
rapidio Replace HTTP links with HTTPS ones: Documentation/driver-api 2020-06-26 11:09:04 -06:00
serial Remove link to nonexistent rocket driver docs 2021-05-11 11:02:39 -06:00
soundwire docs: soundwire: fix some identation at stream.rst 2020-09-10 10:49:29 -06:00
surface_aggregator docs: driver-api: Add Surface DTX driver documentation 2021-03-17 18:39:39 +01:00
thermal Documentation: driver-api: thermal: Remove thermal_notify_framework from documentation 2021-04-22 13:15:19 +02:00
usb usb: Restore the reference to ch9.h 2021-05-10 14:43:29 +02:00
xilinx firmware: xilinx: Remove zynqmp_pm_get_eemi_ops() in IS_REACHABLE(CONFIG_ZYNQMP_FIRMWARE) 2021-03-01 12:52:07 +01:00
auxiliary_bus.rst devlink: Extend devlink port documentation for subfunctions 2021-01-22 11:32:11 -08:00
basics.rst docs: basics.rst: avoid duplicated C function declaration 2020-10-15 07:49:45 +02:00
clk.rst
component.rst
connector.rst net/connector: Add const qualifier to cb_id 2020-12-16 11:06:49 -08:00
console.rst
dcdbas.rst
devfreq.rst
device-io.rst docs: driver-api: device-io: Document ioremap() variants & access funcs 2021-04-08 20:18:38 +09:00
device_link.rst docs: device_link.rst: remove duplicated kernel-doc include 2020-10-15 07:49:42 +02:00
dma-buf.rst dmabuf: Add the capability to expose DMA-BUF stats in sysfs 2021-06-15 11:50:24 +02:00
edac.rst
eisa.rst
firewire.rst
frame-buffer.rst
generic-counter.rst Documentation/driver-api: generic-counter: drop doubled word 2020-07-07 20:24:07 +01:00
hsi.rst
i2c.rst
index.rst Documentation: rename pinctl to pin-control 2021-03-10 14:41:58 +01:00
infiniband.rst
infrastructure.rst docs: infrastructure.rst: exclude device_link_state from device.h 2020-10-15 07:49:46 +02:00
input.rst Input: remove input_polled_dev implementation 2020-12-02 12:35:14 -08:00
interconnect.rst
io-mapping.rst io-mapping: Provide iomap_local variant 2020-11-24 14:42:09 +01:00
io_ordering.rst
ioctl.rst
ipmb.rst
ipmi.rst Minor cleanups to the IPMI driver for 5.9 2020-08-08 09:32:18 -07:00
isa.rst
isapnp.rst
libata.rst docs: libata.rst: fix a wrong usage of :c:type: tag 2020-10-15 07:49:44 +02:00
lightnvm-pblk.rst
mailbox.rst docs: move mailbox.txt to driver-api and rename it 2020-06-26 11:33:38 -06:00
men-chameleon-bus.rst Documentation: document dma device use for mcb 2021-01-11 13:26:13 -07:00
message-based.rst
misc_devices.rst
miscellaneous.rst
mtdnand.rst docs: mtd: Avoid htmldocs warnings 2020-12-10 22:37:32 +01:00
ntb.rst Documentation/driver-api: ntb: drop doubled word 2020-07-13 11:18:17 -06:00
nvmem.rst
parport-lowlevel.rst
pin-control.rst docs: pin-control: Fix error path for control state example 2021-04-08 16:02:43 +02:00
pps.rst
ptp.rst docs: ptp.rst: add support for Renesas (IDT) ClockMatrix 2020-07-17 10:25:21 -07:00
pwm.rst pwm: Reword docs about pwm_apply_state() 2021-04-26 08:49:48 +02:00
regulator.rst docs: get rid of :c:type explicit declarations for structs 2020-10-15 07:49:40 +02:00
reset.rst docs: add a reset controller chapter to the driver API docs 2020-12-08 10:48:04 -07:00
rfkill.rst
s390-drivers.rst
scsi.rst
slimbus.rst
sm501.rst
spi.rst
switchtec.rst
sync_file.rst
target.rst docs: scsi: target.rst: remove iSCSI transport class kernel-doc markup 2020-10-15 07:49:42 +02:00
uio-howto.rst Documentation/driver-api: uio-howto: drop doubled word 2020-07-10 14:58:01 +02:00
vfio-mediated-device.rst vfio/mdev: Simplify driver registration 2021-04-07 15:39:16 -06:00
vfio.rst docs: vfio: fix typo 2021-05-05 10:20:33 -06:00
vme.rst
w1.rst
xillybus.rst Documentation/driver-api: xillybus: drop doubled word 2020-07-10 14:58:01 +02:00
zorro.rst