aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2009-09-30 00:32:42 -0400
committerTheodore Ts'o <tytso@mit.edu>2009-09-30 00:32:42 -0400
commit296c355cd6443d89fa251885a8d78778fe111dc4 (patch)
tree5cf7c8b115617dc3829a16a5969894d37b73173c /include
parent90576c0b9a0b5323fc4bd7f23f49be0d234f36d1 (diff)
ext4: Use tracepoints for mb_history trace file
The /proc/fs/ext4/<dev>/mb_history was maintained manually, and had a number of problems: it required a largish amount of memory to be allocated for each ext4 filesystem, and the s_mb_history_lock introduced a CPU contention problem. By ripping out the mb_history code and replacing it with ftrace tracepoints, and we get more functionality: timestamps, event filtering, the ability to correlate mballoc history with other ext4 tracepoints, etc. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'include')
-rw-r--r--include/trace/events/ext4.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/include/trace/events/ext4.h b/include/trace/events/ext4.h
index 7c6bbb7198a3..b8320256dc5d 100644
--- a/include/trace/events/ext4.h
+++ b/include/trace/events/ext4.h
@@ -743,6 +743,169 @@ TRACE_EVENT(ext4_alloc_da_blocks,
743 __entry->data_blocks, __entry->meta_blocks) 743 __entry->data_blocks, __entry->meta_blocks)
744); 744);
745 745
746TRACE_EVENT(ext4_mballoc_alloc,
747 TP_PROTO(struct ext4_allocation_context *ac),
748
749 TP_ARGS(ac),
750
751 TP_STRUCT__entry(
752 __field( dev_t, dev )
753 __field( ino_t, ino )
754 __field( __u16, found )
755 __field( __u16, groups )
756 __field( __u16, buddy )
757 __field( __u16, flags )
758 __field( __u16, tail )
759 __field( __u8, cr )
760 __field( __u32, orig_logical )
761 __field( int, orig_start )
762 __field( __u32, orig_group )
763 __field( int, orig_len )
764 __field( __u32, goal_logical )
765 __field( int, goal_start )
766 __field( __u32, goal_group )
767 __field( int, goal_len )
768 __field( __u32, result_logical )
769 __field( int, result_start )
770 __field( __u32, result_group )
771 __field( int, result_len )
772 ),
773
774 TP_fast_assign(
775 __entry->dev = ac->ac_inode->i_sb->s_dev;
776 __entry->ino = ac->ac_inode->i_ino;
777 __entry->found = ac->ac_found;
778 __entry->flags = ac->ac_flags;
779 __entry->groups = ac->ac_groups_scanned;
780 __entry->buddy = ac->ac_buddy;
781 __entry->tail = ac->ac_tail;
782 __entry->cr = ac->ac_criteria;
783 __entry->orig_logical = ac->ac_o_ex.fe_logical;
784 __entry->orig_start = ac->ac_o_ex.fe_start;
785 __entry->orig_group = ac->ac_o_ex.fe_group;
786 __entry->orig_len = ac->ac_o_ex.fe_len;
787 __entry->goal_logical = ac->ac_g_ex.fe_logical;
788 __entry->goal_start = ac->ac_g_ex.fe_start;
789 __entry->goal_group = ac->ac_g_ex.fe_group;
790 __entry->goal_len = ac->ac_g_ex.fe_len;
791 __entry->result_logical = ac->ac_f_ex.fe_logical;
792 __entry->result_start = ac->ac_f_ex.fe_start;
793 __entry->result_group = ac->ac_f_ex.fe_group;
794 __entry->result_len = ac->ac_f_ex.fe_len;
795 ),
796
797 TP_printk("dev %s inode %lu orig %u/%d/%u@%u goal %u/%d/%u@%u "
798 "result %u/%d/%u@%u blks %u grps %u cr %u flags 0x%04x "
799 "tail %u broken %u",
800 jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
801 __entry->orig_group, __entry->orig_start,
802 __entry->orig_len, __entry->orig_logical,
803 __entry->goal_group, __entry->goal_start,
804 __entry->goal_len, __entry->goal_logical,
805 __entry->result_group, __entry->result_start,
806 __entry->result_len, __entry->result_logical,
807 __entry->found, __entry->groups, __entry->cr,
808 __entry->flags, __entry->tail,
809 __entry->buddy ? 1 << __entry->buddy : 0)
810);
811
812TRACE_EVENT(ext4_mballoc_prealloc,
813 TP_PROTO(struct ext4_allocation_context *ac),
814
815 TP_ARGS(ac),
816
817 TP_STRUCT__entry(
818 __field( dev_t, dev )
819 __field( ino_t, ino )
820 __field( __u32, orig_logical )
821 __field( int, orig_start )
822 __field( __u32, orig_group )
823 __field( int, orig_len )
824 __field( __u32, result_logical )
825 __field( int, result_start )
826 __field( __u32, result_group )
827 __field( int, result_len )
828 ),
829
830 TP_fast_assign(
831 __entry->dev = ac->ac_inode->i_sb->s_dev;
832 __entry->ino = ac->ac_inode->i_ino;
833 __entry->orig_logical = ac->ac_o_ex.fe_logical;
834 __entry->orig_start = ac->ac_o_ex.fe_start;
835 __entry->orig_group = ac->ac_o_ex.fe_group;
836 __entry->orig_len = ac->ac_o_ex.fe_len;
837 __entry->result_logical = ac->ac_b_ex.fe_logical;
838 __entry->result_start = ac->ac_b_ex.fe_start;
839 __entry->result_group = ac->ac_b_ex.fe_group;
840 __entry->result_len = ac->ac_b_ex.fe_len;
841 ),
842
843 TP_printk("dev %s inode %lu orig %u/%d/%u@%u result %u/%d/%u@%u",
844 jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
845 __entry->orig_group, __entry->orig_start,
846 __entry->orig_len, __entry->orig_logical,
847 __entry->result_group, __entry->result_start,
848 __entry->result_len, __entry->result_logical)
849);
850
851TRACE_EVENT(ext4_mballoc_discard,
852 TP_PROTO(struct ext4_allocation_context *ac),
853
854 TP_ARGS(ac),
855
856 TP_STRUCT__entry(
857 __field( dev_t, dev )
858 __field( ino_t, ino )
859 __field( __u32, result_logical )
860 __field( int, result_start )
861 __field( __u32, result_group )
862 __field( int, result_len )
863 ),
864
865 TP_fast_assign(
866 __entry->dev = ac->ac_inode->i_sb->s_dev;
867 __entry->ino = ac->ac_inode->i_ino;
868 __entry->result_logical = ac->ac_b_ex.fe_logical;
869 __entry->result_start = ac->ac_b_ex.fe_start;
870 __entry->result_group = ac->ac_b_ex.fe_group;
871 __entry->result_len = ac->ac_b_ex.fe_len;
872 ),
873
874 TP_printk("dev %s inode %lu extent %u/%d/%u@%u ",
875 jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
876 __entry->result_group, __entry->result_start,
877 __entry->result_len, __entry->result_logical)
878);
879
880TRACE_EVENT(ext4_mballoc_free,
881 TP_PROTO(struct ext4_allocation_context *ac),
882
883 TP_ARGS(ac),
884
885 TP_STRUCT__entry(
886 __field( dev_t, dev )
887 __field( ino_t, ino )
888 __field( __u32, result_logical )
889 __field( int, result_start )
890 __field( __u32, result_group )
891 __field( int, result_len )
892 ),
893
894 TP_fast_assign(
895 __entry->dev = ac->ac_inode->i_sb->s_dev;
896 __entry->ino = ac->ac_inode->i_ino;
897 __entry->result_logical = ac->ac_b_ex.fe_logical;
898 __entry->result_start = ac->ac_b_ex.fe_start;
899 __entry->result_group = ac->ac_b_ex.fe_group;
900 __entry->result_len = ac->ac_b_ex.fe_len;
901 ),
902
903 TP_printk("dev %s inode %lu extent %u/%d/%u@%u ",
904 jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
905 __entry->result_group, __entry->result_start,
906 __entry->result_len, __entry->result_logical)
907);
908
746#endif /* _TRACE_EXT4_H */ 909#endif /* _TRACE_EXT4_H */
747 910
748/* This part must be outside protection */ 911/* This part must be outside protection */