นี่คือคำสั่ง trace-cmd-record ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
trace-cmd-record - บันทึกการติดตามจากตัวติดตามภายใน Ftrace Linux
เรื่องย่อ
ติดตาม-cmd ระเบียน [OPTIONS] [คำสั่ง]
DESCRIPTION
การขอ ติดตาม-cmd(1) คำสั่งบันทึกจะตั้งค่าตัวติดตามเคอร์เนล Ftrace Linux เพื่อบันทึก
ปลั๊กอินที่ระบุหรือเหตุการณ์ที่เกิดขึ้นในขณะที่ คำสั่ง ดำเนินการ ถ้าไม่มีคำสั่งคือ
กำหนดแล้วจะบันทึกจนกว่าผู้ใช้จะกด Ctrl-C
คำสั่งบันทึกของ trace-cmd จะตั้งค่าตัวติดตาม Ftrace เพื่อเริ่มการติดตามต่างๆ
เหตุการณ์หรือปลั๊กอินที่กำหนดบนบรรทัดคำสั่ง จากนั้นจะสร้างจำนวน
กระบวนการติดตาม (หนึ่งรายการต่อ CPU) ที่จะเริ่มบันทึกจากบัฟเฟอร์วงแหวนเคอร์เนล
ลงในไฟล์ชั่วคราวโดยตรง เมื่อคำสั่งเสร็จสิ้น (หรือกด Ctrl-C) ทั้งหมด
ไฟล์จะถูกรวมเป็นไฟล์ trace.dat ที่สามารถอ่านได้ในภายหลัง (see
ติดตาม cmd-รายงาน(พ.ศ. 1)).
OPTIONS
-p เสียบเข้าไป
ระบุปลั๊กอินการติดตาม ปลั๊กอินเป็นตัวติดตาม Ftrace พิเศษที่มักจะทำมากกว่า
เพียงแค่ติดตามเหตุการณ์ ปลั๊กอินทั่วไปคือ ฟังก์ชัน, ฟังก์ชัน_กราฟ, ตั๋วแลกเงิน,
ไอร์คซอฟฟ์, ใบจองและ ตื่นนอน. ปลั๊กอินต้องได้รับการสนับสนุนโดยเคอร์เนลที่ทำงานอยู่ ถึง
ดูรายการปลั๊กอินที่ใช้ได้ โปรดดูที่ ติดตาม cmd-รายการ(1)
-e เหตุการณ์
ระบุเหตุการณ์ที่จะติดตาม เพิ่มจุดติดตามแบบคงที่ต่างๆ ลงใน Linux
เคอร์เนล พวกมันถูกจัดกลุ่มตามระบบย่อยซึ่งคุณสามารถเปิดใช้งานเหตุการณ์ทั้งหมดของ
ระบบย่อยหรือระบุเหตุการณ์เฉพาะที่จะเปิดใช้งาน NS เหตุการณ์ เป็นรูปแบบ
"ระบบย่อย:ชื่อเหตุการณ์". คุณยังสามารถระบุระบบย่อยโดยไม่ต้อง
:ชื่องาน หรือชื่อเหตุการณ์ที่ไม่มี "ระบบย่อย:" การใช้ "-e sched_switch" จะ
เปิดใช้งานเหตุการณ์ "sched_switch" โดยที่ "-e sched" จะเปิดใช้งานกิจกรรมทั้งหมดภายใต้
ระบบย่อย "กำหนดการ"
'เหตุการณ์' ยังสามารถมีนิพจน์ glob นั่นคือ "*stat*" will
เลือกเหตุการณ์ทั้งหมด (หรือระบบย่อย) ที่มีอักขระ "stat" ใน
ชื่อ
คำหลัก 'ทั้งหมด' สามารถใช้เพื่อเปิดใช้งานกิจกรรมทั้งหมดได้
-a
ทุกเหตุการณ์ที่กำลังถูกบันทึกจะมีไฟล์รูปแบบเอาท์พุตที่บันทึกไว้ในไฟล์เอาท์พุต
เพื่อให้สามารถแสดงได้ในภายหลัง แต่ถ้าเหตุการณ์อื่นถูกเปิดใช้งานในการติดตามโดยไม่มี
ความรู้ของ trace-cmd รูปแบบของเหตุการณ์เหล่านั้นจะไม่ถูกบันทึกและ trace-cmd
รายงานจะไม่สามารถแสดงผลได้ หากเป็นกรณีนี้ ให้ระบุ -a
ตัวเลือกและรูปแบบของเหตุการณ์ทั้งหมดในระบบจะถูกบันทึกไว้
-T
เปิดใช้งาน stacktrace ในแต่ละเหตุการณ์ ตัวอย่างเช่น:
-0 [003] 58549.289091: sched_switch: kworker/0:1:0 [120] R ==> trace-cmd:2603 [120]
-0 [003] 58549.289092: kernel_stack:
=> กำหนดการ (ffffffff814b260e)
=> cpu_idle (ffffffff8100a38c)
=> start_secondary (ffffffff814ab828)
--func-กอง
เปิดใช้งานการติดตามสแต็กบนฟังก์ชันทั้งหมด โปรดทราบว่าสิ่งนี้ใช้ได้กับ "ฟังก์ชัน" เท่านั้น
ตัวติดตามปลั๊กอิน และจะมีผลก็ต่อเมื่อตัวเลือก -l ถูกใช้และดำเนินการสำเร็จใน
ฟังก์ชันจำกัด หากไม่ได้กรองฟังก์ชันตัวติดตาม และการติดตามสแต็กคือ
เปิดใช้งานคุณสามารถล็อคเครื่องได้
-f กรอง
ระบุตัวกรองสำหรับเหตุการณ์ก่อนหน้า นี้ต้องมาหลังจาก -e. สิ่งนี้จะกรอง
เหตุการณ์ใดบ้างที่ได้รับการบันทึกตามเนื้อหาของเหตุการณ์ การกรองจะถูกส่งต่อไปยัง
เคอร์เนลโดยตรง ดังนั้นการกรองที่อนุญาตอาจขึ้นอยู่กับเวอร์ชันของเคอร์เนล
คุณมี. โดยพื้นฐานแล้ว มันจะช่วยให้คุณใช้สัญกรณ์ C เพื่อตรวจสอบว่าเหตุการณ์ควรเป็นหรือไม่
แปรรูปหรือไม่
==, >=, <=, >, <, &, |, && และ ||
ข้อมูลด้านบนนี้มักจะปลอดภัยที่จะใช้ในการเปรียบเทียบฟิลด์
-R เรียก
ระบุทริกเกอร์สำหรับเหตุการณ์ก่อนหน้า นี้ต้องมาหลังจาก -e. สิ่งนี้จะเพิ่ม a
ทริกเกอร์ให้กับเหตุการณ์ที่กำหนด หากต้องการเปิดใช้งานทริกเกอร์เท่านั้น ไม่ใช่ตัวเหตุการณ์เอง
แล้ววางเหตุการณ์หลังจาก -v ตัวเลือก
ดูเอกสาร/trace/events.txt ในแหล่งเคอร์เนล Linux สำหรับข้อมูลเพิ่มเติม
ข้อมูลเกี่ยวกับทริกเกอร์
-v
ซึ่งจะทำให้เหตุการณ์ทั้งหมดที่ระบุหลังจากนั้นบนบรรทัดคำสั่งไม่ถูกติดตาม
สิ่งนี้มีประโยชน์สำหรับการเลือกระบบย่อยที่จะติดตามแต่ละเว้นเหตุการณ์ต่างๆ
ตัวอย่างเช่น: "-e sched -v -e "*stat\*"" จะเปิดใช้งานเหตุการณ์ทั้งหมดในระบบย่อย sched
ยกเว้นผู้ที่มี "สถิติ" ในชื่อของพวกเขา
หมายเหตุ: ตัวเลือก *-v* ถูกพรากไปจากทาง grep(1) กลับด้านต่อไปนี้
ไม้ขีด
-F
การดำเนินการนี้จะกรองเฉพาะไฟล์เรียกทำงานที่กำหนดในบรรทัดคำสั่ง ถ้าไม่มีคำสั่ง
ให้แล้วมันก็จะกรองเอง (ไร้สาระมาก) โดยใช้ -F จะช่วยให้คุณติดตาม
เฉพาะเหตุการณ์ที่เกิดจากคำสั่งที่กำหนด
-P pid
คล้ายกับ -F แต่ให้คุณระบุ ID กระบวนการเพื่อติดตาม
-c
ใช้กับทั้ง -F เพื่อติดตามลูกของกระบวนการด้วย
-C นาฬิกา
ตั้งนาฬิกาติดตามเป็น "นาฬิกา"
ใช้ ติดตาม-cmd(1) รายการ -C เพื่อดูว่ามีนาฬิกาอะไรบ้าง
-o ไฟล์เอาต์พุต
ตามค่าเริ่มต้น รายงาน trace-cmd จะสร้าง a แกะรอย.dat ไฟล์. คุณสามารถระบุ . อื่นได้
ไฟล์ที่จะเขียนถึงด้วย -o ตัวเลือก
-l ชื่อฟังก์ชัน
สิ่งนี้จะ จำกัด ฟังก์ชัน และ ฟังก์ชัน_กราฟ ตัวติดตามเพื่อติดตามเฉพาะที่กำหนด
ชื่อฟังก์ชัน มากกว่าหนึ่ง -l อาจระบุไว้ในบรรทัดคำสั่งเพื่อติดตามเพิ่มเติม
มากกว่าหนึ่งฟังก์ชัน อนุญาตให้ใช้นิพจน์ glob ได้อย่างจำกัด เหล่านี้คือ
จับคู่* เพื่อกรองเฉพาะฟังก์ชันที่ขึ้นต้นด้วย การจับคู่. *จับคู่ เพื่อกรองเท่านั้น
ฟังก์ชันที่ลงท้ายด้วย การจับคู่. *จับคู่\* เพื่อกรองเฉพาะฟังก์ชันที่มี
การจับคู่.
-g ชื่อฟังก์ชัน
ตัวเลือกนี้มีไว้สำหรับปลั๊กอิน function_graph มันจะสร้างกราฟของฟังก์ชันที่กำหนด ที่
คือจะติดตามเฉพาะฟังก์ชันและฟังก์ชันทั้งหมดที่เรียกใช้เท่านั้น คุณสามารถมีมากขึ้น
มากกว่าหนึ่ง -g บนบรรทัดคำสั่ง
-n ชื่อฟังก์ชัน
สิ่งนี้มีผลตรงกันข้ามกับ -l. ฟังก์ชันที่กำหนดด้วย -n ตัวเลือกจะไม่
ติดตาม สิ่งนี้มีความสำคัญกว่า นั่นคือ หากคุณรวมฟังก์ชันเดียวกันสำหรับทั้งคู่ -n
และ -lมันจะไม่ถูกติดตาม
-d
ปลั๊กอินตัวติดตามบางตัวเปิดใช้งานตัวติดตามฟังก์ชันตามค่าเริ่มต้น เช่นเดียวกับตัวติดตามเวลาแฝง
ตัวเลือกนี้จะป้องกันไม่ให้มีการเปิดใช้งานตัวติดตามฟังก์ชันเมื่อเริ่มทำงาน
-D
ทางเลือก -d จะพยายามใช้ตัวเลือกการติดตามฟังก์ชันเพื่อปิดใช้งานตัวติดตามฟังก์ชัน
(ถ้ามี) มิฉะนั้นจะเป็นค่าเริ่มต้นของไฟล์ proc:
/proc/sys/เคอร์เนล/ftrace_enabledแต่จะไม่สัมผัสมันหากตัวเลือกฟังก์ชั่นการติดตามคือ
ใช้ได้ -D ตัวเลือกจะปิดการใช้งานทั้งไฟล์ proc ftrace_enabled และ
ฟังก์ชั่นติดตามตัวเลือกถ้ามี
หมายเหตุ ปิดใช้งานการติดตามฟังก์ชันนี้สำหรับผู้ใช้ทั้งหมด ซึ่งรวมถึงผู้ใช้
นอกตัวติดตาม ftrace (stack_tracer, perf, ฯลฯ )
-O ตัวเลือก
Ftrace มีตัวเลือกมากมายที่สามารถเปิดหรือปิดได้ สิ่งนี้ทำให้คุณสามารถตั้งค่า
พวกเขา. ต่อท้ายข้อความ ไม่ ไปที่ตัวเลือกปิดการใช้งาน ตัวอย่างเช่น: "-O nograph-time"
จะปิดใช้งานตัวเลือก Ftrace "กราฟเวลา"
-s ระยะห่าง
กระบวนการที่ trace-cmd สร้างขึ้นเพื่อบันทึกจากบัฟเฟอร์วงแหวนจำเป็นต้องปลุกให้ตื่นขึ้น
ทำการบันทึก การตั้งค่า ระยะห่าง เป็นศูนย์จะทำให้กระบวนการตื่นขึ้น
ทุกครั้งที่เขียนข้อมูลใหม่ลงในบัฟเฟอร์ แต่เนื่องจาก Ftrace กำลังบันทึกเคอร์เนล
กิจกรรม การกระทำของกระบวนการนี้ในการกลับไปนอนอาจทำให้เกิดเหตุการณ์ใหม่เข้ามาใน
บัฟเฟอร์วงแหวนซึ่งจะปลุกกระบวนการสำรอง สิ่งนี้จะเพิ่มข้อมูลเพิ่มเติมโดยไม่จำเป็น
ลงในบัฟเฟอร์วงแหวน
เมตริก 'ช่วงเวลา' คือไมโครวินาที ค่าเริ่มต้นถูกตั้งค่าเป็น 1000 (1 มิลลิวินาที)
นี่คือเวลาที่กระบวนการบันทึกแต่ละครั้งจะเข้าสู่โหมดสลีปก่อนตื่นขึ้น
บันทึกข้อมูลใหม่ใด ๆ ที่เขียนไปยังบัฟเฟอร์วงแหวน
-r ลำดับความสำคัญ
ลำดับความสำคัญในการเรียกใช้เธรดการดักจับที่ ในระบบไม่ว่าง การติดตามจับ
เธรดอาจถูกจัดเก็บและเหตุการณ์อาจสูญหายได้ สิ่งนี้จะเพิ่มลำดับความสำคัญของสิ่งเหล่านั้น
เธรดไปยังลำดับความสำคัญตามเวลาจริง (FIFO) แต่ใช้ตัวเลือกนี้อย่างระมัดระวังก็ยังได้
เปลี่ยนพฤติกรรมของระบบที่ถูกติดตาม
-b ขนาด
ตั้งค่าขนาดบัฟเฟอร์ของวงแหวนเป็น ขนาด กิโลไบต์ เนื่องจากบัฟเฟอร์วงแหวน Ftrace คือ
ต่อ CPU ขนาดนี้คือขนาดของแต่ละบัฟเฟอร์วงแหวน CPU ภายในเคอร์เนล โดยใช้
"-b 10000" บนเครื่องที่มี 4 CPU จะทำให้ Ftrace มีขนาดบัฟเฟอร์รวม 40
เมกส์.
-B ชื่อบัฟเฟอร์
หากเคอร์เนลรองรับหลายบัฟเฟอร์ จะเป็นการเพิ่มบัฟเฟอร์ด้วยชื่อที่กำหนด
หากชื่อบัฟเฟอร์มีอยู่แล้ว บัฟเฟอร์นั้นจะถูกรีเซ็ตและจะไม่ถูกลบ
เมื่อสิ้นสุดการดำเนินการบันทึก หากบัฟเฟอร์ถูกสร้างขึ้น จะถูกลบออกที่
สิ้นสุดการดำเนินการ (เว้นแต่ -k ถูกตั้งค่าหรือ เริ่มต้น ใช้คำสั่ง)
หลังจากระบุชื่อบัฟเฟอร์แล้ว เหตุการณ์ทั้งหมดที่เพิ่มหลังจากนั้นจะเป็น
ที่เกี่ยวข้องกับบัฟเฟอร์นั้น หากไม่มีการระบุบัฟเฟอร์หรือเหตุการณ์
ระบุไว้ก่อนชื่อบัฟเฟอร์จะเชื่อมโยงกับ
บัฟเฟอร์หลัก (ระดับบนสุด)
trace-cmd บันทึก -e sched -B block -e block -B time -e timer sleep 1
ด้านบนจะเปิดใช้งานเหตุการณ์ที่กำหนดไว้ทั้งหมดในบัฟเฟอร์หลัก มันจะ
จากนั้นสร้างอินสแตนซ์บัฟเฟอร์ 'บล็อก' และเปิดใช้งานเหตุการณ์การบล็อกทั้งหมดภายใน
บัฟเฟอร์นั้น มีการสร้างอินสแตนซ์บัฟเฟอร์ 'เวลา' และเหตุการณ์ตัวจับเวลาทั้งหมด
จะถูกเปิดใช้งานสำหรับเหตุการณ์นั้น
-m ขนาด
ขนาดสูงสุดเป็นกิโลไบต์ที่บัฟเฟอร์ต่อ cpu ควรเป็น หมายเหตุ เนื่องจากการปัดเศษเป็น
ขนาดหน้าตัวเลขอาจไม่ถูกต้องทั้งหมด นอกจากนี้ยังดำเนินการโดยการสลับ
ระหว่างบัฟเฟอร์สองตัวที่มีขนาดครึ่งหนึ่งที่กำหนด ดังนั้นเอาต์พุตอาจไม่ใช่ของ
ขนาดที่กำหนดแม้ว่าจะมีการเขียนมากกว่านั้นมาก
ใช้สิ่งนี้เพื่อป้องกันไม่ให้พื้นที่ดิสก์หมดเป็นเวลานาน
-M ซีพียู
ตั้งค่า cpumask เพื่อติดตาม มีผลกับอินสแตนซ์บัฟเฟอร์ล่าสุดที่กำหนดเท่านั้น ถ้า
ให้ก่อนอินสแตนซ์บัฟเฟอร์ใด ๆ จากนั้นจะมีผลกับบัฟเฟอร์หลัก มูลค่า
ที่ให้มาต้องเป็นเลขฐานสิบหก
ฟังก์ชัน trace-cmd record -p -M c -B events13 -e all -M 5
หากเว้น -M ไว้ หน้ากากจะยังคงเหมือนเดิม เพื่อเปิดใช้งานทั้งหมด
ซีพียู ส่งผ่านค่า '-1'
-k
โดยค่าเริ่มต้น เมื่อ trace-cmd เสร็จสิ้นการติดตาม มันจะรีเซ็ตบัฟเฟอร์และปิดใช้งาน
การติดตามทั้งหมดที่เปิดใช้งาน ตัวเลือกนี้ป้องกันไม่ให้ trace-cmd ปิดการใช้งาน tracer
และรีเซ็ตบัฟเฟอร์ ตัวเลือกนี้มีประโยชน์สำหรับการดีบัก trace-cmd
หมายเหตุ: โดยปกติ trace-cmd จะตั้งค่าไฟล์ "tracing_on" กลับเป็นไฟล์นั้น
ก่อนที่มันจะถูกเรียก ตัวเลือกนี้จะทำให้ไฟล์นั้นถูกตั้งค่าเป็นศูนย์
-i
โดยค่าเริ่มต้น ถ้าเหตุการณ์ถูกระบุที่ trace-cmd ไม่พบ มันจะออกด้วย an
ข้อผิดพลาด. ตัวเลือกนี้จะไม่สนใจเหตุการณ์ที่แสดงอยู่ในบรรทัดคำสั่งแต่เป็น
ไม่พบในระบบ
-N โฮสต์:พอร์ต
หากเครื่องอื่นกำลังเรียกใช้ "trace-cmd listen" ตัวเลือกนี้จะถูกใช้เพื่อให้มีข้อมูล
ส่งไปยังเครื่องนั้นด้วยแพ็กเก็ต UDP แทนที่จะเขียนไปยังไฟล์เอาต์พุต data
ถูกส่งไปยังกล่องระยะไกล เหมาะอย่างยิ่งสำหรับเครื่องฝังตัวที่มีพื้นที่เก็บข้อมูลน้อย
หรือมีเครื่องเดียวที่จะเก็บข้อมูลทั้งหมดไว้ในที่เก็บเดียว
หมายเหตุ: ตัวเลือกนี้ไม่รองรับปลั๊กอินตัวติดตามเวลาแฝง:
wakeup, wakeup_rt, irqsoff, preemptoff และ preemptirqsoff
-t
ตัวเลือกนี้ใช้กับ -Nเมื่อมีความจำเป็นต้องส่งข้อมูลสดด้วย TCP
แพ็กเก็ตแทน UDP แม้ว่า TCP จะไม่เร็วเท่ากับการส่งแพ็กเก็ต UDP
แต่อาจมีความจำเป็นหากเครือข่ายไม่น่าเชื่อถือจำนวนข้อมูลไม่
อย่างเข้มข้นและจำเป็นต้องมีการรับประกันว่าข้อมูลที่ติดตามทั้งหมดได้รับการถ่ายโอน
ที่ประสบความสำเร็จ
--วันที่
กับ --วันที่ ตัวเลือก "trace-cmd" จะเขียนการประทับเวลาลงในบัฟเฟอร์การติดตามหลังจาก
มันได้เสร็จสิ้นการบันทึก จากนั้นจะแมปการประทับเวลากับ gettimeofday ซึ่งจะ
อนุญาตให้ส่งออกเวลาผนังจากการประทับเวลาที่อ่านที่สร้างขึ้น แกะรอย.dat ไฟล์
--ข้อมูลส่วนตัว
กับ --ข้อมูลส่วนตัว ตัวเลือก "trace-cmd" จะเปิดใช้งานการติดตามที่สามารถใช้กับ
ติดตาม cmd-รายงาน(1) --ตัวเลือกโปรไฟล์ หากเป็นผู้ตามรอย -p ไม่ได้ตั้งค่าไว้ และกราฟฟังก์ชัน
เคอร์เนลรองรับความลึก จากนั้นตัวติดตาม function_graph จะเปิดใช้งานด้วย
ความลึกหนึ่ง (แสดงเฉพาะที่ userspace เข้าสู่เคอร์เนล) นอกจากนี้ยังจะเปิดใช้งาน
tracepoints ต่างๆ ที่มี stack tracing เพื่อให้รายงานสามารถแสดงตำแหน่งที่งานมี
ถูกปิดกั้นเป็นเวลานานที่สุด
ดู ติดตาม-cmd-profile(1) สำหรับรายละเอียดและตัวอย่างเพิ่มเติม
-H เบ็ดเหตุการณ์
เพิ่มการจับคู่เหตุการณ์ที่กำหนดเองเพื่อเชื่อมต่อสองเหตุการณ์เข้าด้วยกัน เมื่อไม่ใช้กับ
--ข้อมูลส่วนตัวมันจะบันทึกพารามิเตอร์และสิ่งนี้จะถูกใช้โดย trace-cmd report
--profile ด้วยครับ นั่นคือ:
บันทึกการติดตาม cmd -H hrtimer_expire_entry,hrtimer/hrtimer_expire_exit,hrtimer,sp
รายงานการติดตาม-cmd --profile
จะทำโปรไฟล์ hrtimer_expire_entry และ hrtimer_expire_ext ครั้ง
ดู ติดตาม-cmd-profile(1) สำหรับรูปแบบ
--สแตเดอร์
ให้เอาต์พุตไปที่ stderr แทน stdout แต่เอาต์พุตของคำสั่งดำเนินการ
จะไม่มีการเปลี่ยนแปลง สิ่งนี้มีประโยชน์หากคุณต้องการตรวจสอบผลลัพธ์ของคำสั่ง
กำลังดำเนินการ แต่ไม่เห็นผลลัพธ์จาก trace-cmd
ตัวอย่าง
วิธีพื้นฐานในการติดตามเหตุการณ์ทั้งหมด:
# trace-cmd บันทึก -e all ls > /dev/null
# รายงานติดตาม-cmd
trace-cmd-13541 [003] 106260.693809: filemap_fault: ที่อยู่ = 0x128122 ออฟเซ็ต = 0xce
ติดตาม-cmd-13543 [001] 106260.693809: kmalloc: call_site=81128dd4 ptr=0xffff88003dd83800 bytes_req=768 bytes_alloc=1024 gfp_flags=GFP_KERNEL|GFP_ZERO
ls-13545 [002] 106260.693809: kfree: call_site=810a7abb ptr=0x0
ls-13545 [002] 106260.693818: sys_exit_write: 0x1
ในการใช้ตัวติดตามฟังก์ชันกับการติดตามสวิตช์ตามกำหนดการ:
# trace-cmd บันทึก -p ฟังก์ชั่น -e sched_switch ls > /dev/null
# รายงานติดตาม-cmd
ls-13587 [002] 106467.860310: ฟังก์ชัน: hrtick_start_fair <-- pick_next_task_fair
ls-13587 [002] 106467.860313: sched_switch: prev_comm=trace-cmd prev_pid=13587 prev_prio=120 prev_state=R ==> next_comm=trace-cmd next_pid=13583 next_prio=120
trace-cmd-13585 [001] 106467.860314: ฟังก์ชัน: native_set_pte_at <-- __do_fault
trace-cmd-13586 [003] 106467.860314: ฟังก์ชัน: up_read <-- do_page_fault
ls-13587 [002] 106467.860317: ฟังก์ชัน: __phys_addr <-- กำหนดการ
trace-cmd-13585 [001] 106467.860318: ฟังก์ชัน: _raw_spin_unlock <-- __do_fault
ls-13587 [002] 106467.860320: ฟังก์ชัน: native_load_sp0 <-- __switch_to
trace-cmd-13586 [003] 106467.860322: ฟังก์ชัน: down_read_trylock <-- do_page_fault
นี่เป็นวิธีที่ดีในการค้นหาว่าอินเตอร์รัปต์ใดมีเวลาแฝงสูงสุด:
# trace-cmd บันทึก -p function_graph -e irq_handler_entry -l do_IRQ sleep 10
# รายงานติดตาม-cmd
-0 [000] 157412.933969: funcgraph_entry: | do_IRQ() {
-0 [000] 157412.933974: irq_handler_entry: irq=48 ชื่อ=eth0
-0 [000] 157412.934004: funcgraph_exit: + 36.358 เรา | }
-0 [000] 157413.895004: funcgraph_entry: | do_IRQ() {
-0 [000] 157413.895011: irq_handler_entry: irq=48 ชื่อ=eth0
-0 [000] 157413.895026: funcgraph_exit: + 24.014 เรา | }
-0 [000] 157415.891762: funcgraph_entry: | do_IRQ() {
-0 [000] 157415.891769: irq_handler_entry: irq=48 ชื่อ=eth0
-0 [000] 157415.891784: funcgraph_exit: + 22.928 เรา | }
-0 [000] 157415.934869: funcgraph_entry: | do_IRQ() {
-0 [000] 157415.934874: irq_handler_entry: irq=48 ชื่อ=eth0
-0 [000] 157415.934906: funcgraph_exit: + 37.512 เรา | }
-0 [000] 157417.888373: funcgraph_entry: | do_IRQ() {
-0 [000] 157417.888381: irq_handler_entry: irq=48 ชื่อ=eth0
-0 [000] 157417.888398: funcgraph_exit: + 25.943 เรา | }
ตัวอย่างของโปรไฟล์:
# trace-cmd บันทึก --profile sleep 1
# รายงาน trace-cmd --profile --comm sleep
งาน: sleep-21611
เหตุการณ์: sched_switch:R (1) ทั้งหมด: 99442 เฉลี่ย: 99442 สูงสุด: 99442 ต่ำสุด:99442
ทั้งหมด 1 รายการ:99442 นาที:99442 สูงสุด:99442 avg=99442
=> ftrace_raw_event_sched_switch (0xffffffff8105f812)
=> __schedule (0xffffffff8150810a)
=> preempt_schedule (0xffffffff8150842e)
=> ___preempt_schedule (0xffffffff81273354)
=> cpu_stop_queue_work (0xffffffff810b03c5)
=> stop_one_cpu (0xffffffff810b063b)
=> sched_exec (0xffffffff8106136d)
=> do_execve_common.isra.27 (0xffffffff81148c89)
=> do_execve (0xffffffff811490b0)
=> SyS_execve (0xffffffff811492c4)
=> return_to_handler (0xffffffff8150e3c8)
=> stub_execve (0xffffffff8150c699)
เหตุการณ์: sched_switch:S (1) ทั้งหมด: 1000506680 เฉลี่ย: 1000506680 สูงสุด: 1000506680 ต่ำสุด:1000506680
ทั้งหมด 1 รายการ:1000506680 นาที:1000506680 สูงสุด:1000506680 avg=1000506680
=> ftrace_raw_event_sched_switch (0xffffffff8105f812)
=> __schedule (0xffffffff8150810a)
=> กำหนดการ (0xffffffff815084b8)
=> do_nanosleep (0xffffffff8150b22c)
=> hrtimer_nanosleep (0xffffffff8108d647)
=> SyS_nanosleep (0xffffffff8108d72c)
=> return_to_handler (0xffffffff8150e3c8)
=> tracesys_phase2 (0xffffffff8150c304)
เหตุการณ์: sched_wakeup:21611 (1) ทั้งหมด: 30326 เฉลี่ย: 30326 สูงสุด: 30326 ขั้นต่ำ: 30326
ทั้งหมด 1 รายการ:30326 นาที:30326 สูงสุด:30326 avg=30326
=> ftrace_raw_event_sched_wakeup_template (0xffffffff8105f653)
=> ttwu_do_wakeup (0xffffffff810606eb)
=> ttwu_do_activate.constprop.124 (0xffffffff810607c8)
=> try_to_wake_up (0xffffffff8106340a)
ใช้ trace-cmd-record ออนไลน์โดยใช้บริการ onworks.net