xfs: add kmem allocation trace points
When trying to correlate XFS kernel allocations to memory reclaim behaviour, it is useful to know what allocations XFS is actually attempting. This information is not directly available from tracepoints in the generic memory allocation and reclaim tracepoints, so these new trace points provide a high level indication of what the XFS memory demand actually is. There is no per-filesystem context in this code, so we just trace the type of allocation, the size and the allocation constraints. The kmem code also doesn't include much of the common XFS headers, so there are a few definitions that need to be added to the trace headers and a couple of types that need to be made common to avoid needing to include the whole world in the kmem code. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:

zatwierdzone przez
Darrick J. Wong

rodzic
707e0ddaf6
commit
0ad95687c3
@@ -23,6 +23,7 @@ struct xlog;
|
||||
struct xlog_ticket;
|
||||
struct xlog_recover;
|
||||
struct xlog_recover_item;
|
||||
struct xlog_rec_header;
|
||||
struct xfs_buf_log_format;
|
||||
struct xfs_inode_log_format;
|
||||
struct xfs_bmbt_irec;
|
||||
@@ -30,6 +31,10 @@ struct xfs_btree_cur;
|
||||
struct xfs_refcount_irec;
|
||||
struct xfs_fsmap;
|
||||
struct xfs_rmap_irec;
|
||||
struct xfs_icreate_log;
|
||||
struct xfs_owner_info;
|
||||
struct xfs_trans_res;
|
||||
struct xfs_inobt_rec_incore;
|
||||
|
||||
DECLARE_EVENT_CLASS(xfs_attr_list_class,
|
||||
TP_PROTO(struct xfs_attr_list_context *ctx),
|
||||
@@ -3575,6 +3580,34 @@ TRACE_EVENT(xfs_pwork_init,
|
||||
__entry->nr_threads, __entry->pid)
|
||||
)
|
||||
|
||||
DECLARE_EVENT_CLASS(xfs_kmem_class,
|
||||
TP_PROTO(ssize_t size, int flags, unsigned long caller_ip),
|
||||
TP_ARGS(size, flags, caller_ip),
|
||||
TP_STRUCT__entry(
|
||||
__field(ssize_t, size)
|
||||
__field(int, flags)
|
||||
__field(unsigned long, caller_ip)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->size = size;
|
||||
__entry->flags = flags;
|
||||
__entry->caller_ip = caller_ip;
|
||||
),
|
||||
TP_printk("size %zd flags 0x%x caller %pS",
|
||||
__entry->size,
|
||||
__entry->flags,
|
||||
(char *)__entry->caller_ip)
|
||||
)
|
||||
|
||||
#define DEFINE_KMEM_EVENT(name) \
|
||||
DEFINE_EVENT(xfs_kmem_class, name, \
|
||||
TP_PROTO(ssize_t size, int flags, unsigned long caller_ip), \
|
||||
TP_ARGS(size, flags, caller_ip))
|
||||
DEFINE_KMEM_EVENT(kmem_alloc);
|
||||
DEFINE_KMEM_EVENT(kmem_alloc_large);
|
||||
DEFINE_KMEM_EVENT(kmem_realloc);
|
||||
DEFINE_KMEM_EVENT(kmem_zone_alloc);
|
||||
|
||||
#endif /* _TRACE_XFS_H */
|
||||
|
||||
#undef TRACE_INCLUDE_PATH
|
||||
|
Reference in New Issue
Block a user