ภาษาอังกฤษภาษาฝรั่งเศสสเปน

Ad


ไอคอน Fav ของ OnWorks

guestfs-performance - ออนไลน์ใน Cloud

เรียกใช้ guestfs-performance ในผู้ให้บริการโฮสต์ฟรีของ OnWorks ผ่าน Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

นี่คือคำสั่ง guestfs-performance ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้เวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

โครงการ:

ชื่อ


guestfs-performance - libguestfs วิศวกรรมเพื่อประสิทธิภาพสูงสุด

DESCRIPTION


หน้านี้แสดงวิธีรับประสิทธิภาพสูงสุดจาก libguestfs โดยเฉพาะอย่างยิ่งเมื่อ
คุณคาดว่าจะใช้ libguestfs เพื่อจัดการกับเครื่องเสมือนหรือดิสก์อิมเมจนับพัน

ครอบคลุมสามพื้นที่หลัก Libguestfs ใช้งานอุปกรณ์ (การกระจาย Linux ขนาดเล็ก)
ภายใน qemu/KVM สองส่วนแรกคือ: ลดเวลาที่ใช้ในการเริ่มต้นนี้ให้น้อยที่สุด
เครื่องใช้ไฟฟ้า และจำนวนครั้งที่ต้องสตาร์ทเครื่อง พื้นที่ที่สามคือ
ลดระยะเวลาในการตรวจสอบ VM

พื้นฐาน การวัด


ก่อนทำการเปลี่ยนแปลงวิธีที่คุณใช้ libguestfs ให้ทำการวัดพื้นฐาน

พื้นฐาน: ที่เริ่มต้น เครื่องใช้
สำหรับเครื่องที่ไม่ได้โหลด เวลาที่ใช้ในการเปิดเครื่อง:

เวลา guestfish -a /dev/null run

รันคำสั่งนี้หลาย ๆ ครั้งติดต่อกัน และละทิ้งการรันสองสามครั้งแรก เพื่อให้คุณเป็น
การวัดกรณี "แคชร้อน" ทั่วไป

คำอธิบาย

คำสั่งนี้เริ่มต้นอุปกรณ์ libguestfs บนดิสก์ null จากนั้นปิดทันที
มันลง ครั้งแรกที่คุณรันคำสั่ง มันจะสร้างอุปกรณ์และแคชมัน
(มักจะอยู่ภายใต้ /var/tmp/.guestfs-*). การทำงานที่ตามมาควรใช้อุปกรณ์ที่แคชซ้ำ

ที่คาดหวัง ผล

คุณควรคาดหวังว่าจะได้รับเวลาน้อยกว่า 6 วินาที หากเวลาที่คุณเห็นบน an
เครื่องที่ยกเลิกการโหลดอยู่เหนือสิ่งนี้ จากนั้นดูส่วน "การแก้ไขปัญหาประสิทธิภาพที่แย่"
ด้านล่าง

พื้นฐาน: เล่นละคร การตรวจสอบ of a ผู้เข้าพัก
สำหรับการทดสอบนี้ คุณจะต้องมีเครื่องที่ยกเลิกการโหลดและแขกจริงหรืออิมเมจดิสก์อย่างน้อยหนึ่งรายการ
หากคุณกำลังวางแผนที่จะใช้ libguestfs กับแขก X เท่านั้น (เช่น X = Windows) ให้ใช้
แขก X ที่นี่จะเหมาะสมที่สุด หากคุณกำลังวางแผนที่จะเรียกใช้ libguestfs กับ
กลุ่มแขก จากนั้นใช้กลุ่มแขกเพื่อทดสอบที่นี่

เวลาที่ใช้ในการตรวจสอบและติดตั้งดิสก์ของแขก ใช้
คำสั่งแรกถ้าคุณจะใช้ดิสก์อิมเมจ และคำสั่งที่สองถ้าคุณจะ
ใช้ libvirt

เวลา guestfish --ro -a disk.img -i exit

เวลา guestfish --ro -d GuestName -i exit

รันคำสั่งหลายๆ ครั้งติดต่อกัน และละทิ้งสองสามรันครั้งแรก เพื่อให้คุณเป็น
การวัดกรณี "แคชร้อน" ทั่วไป

คำอธิบาย

คำสั่งนี้เริ่มต้นอุปกรณ์ libguestfs บนดิสก์อิมเมจที่มีชื่อหรือแขก libvirt
ทำการตรวจสอบ libguestfs กับมัน (ดู "การตรวจสอบ" ใน แขก(3)), ติดแขกของ
ดิสก์ จากนั้นทิ้งผลลัพธ์ทั้งหมดเหล่านี้และปิดตัวลง

ครั้งแรกที่คุณเรียกใช้คำสั่ง จะสร้างอุปกรณ์และแคช (โดยปกติ
ภายใต้ /var/tmp/.guestfs-*). การทำงานที่ตามมาควรใช้อุปกรณ์ที่แคชซ้ำ

ที่คาดหวัง ผล

คุณควรคาดหวังเวลาที่มากกว่าที่วัดได้ ≤ 5 วินาทีในการตรวจวัดพื้นฐานแรก
ทดสอบด้านบน (เช่น ถ้าการทดสอบพื้นฐานครั้งแรกรันใน 5 วินาที การทดสอบนี้
ควรทำงานใน ≤ 10 วินาที)

ความเข้าใจ DIE เครื่องใช้ AND เมื่อ IT IS สร้าง/แคช


ครั้งแรกที่คุณใช้ libguestfs โปรแกรมจะสร้างและแคชอุปกรณ์ นี้มักจะ
in /var/tmp/.guestfs-*เว้นแต่คุณจะตั้งค่า $TMPDIR หรือ $LIBGUESTFS_CACHEDIR ไว้ในกรณีนี้
จะอยู่ภายใต้ไดเร็กทอรีชั่วคราวนั้น

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการสร้างเครื่องใช้ไฟฟ้า โปรดดูที่ "SUPERMIN APPLIANCES" ใน
ซูเปอร์มิน(1)

ทุกครั้งที่ libguestfs ทำงาน มันจะตรวจสอบว่าไม่มีไฟล์โฮสต์ที่ใช้โดยเครื่องมี
เปลี่ยน. หากมี อุปกรณ์จะถูกสร้างขึ้นใหม่ ซึ่งมักจะเกิดขึ้นเมื่อแพ็กเก็จ
ได้รับการติดตั้งหรืออัปเดตบนโฮสต์ (เช่น การใช้โปรแกรมเช่น "yum" หรือ "apt-get") ดิ
เหตุผลในการสร้างเครื่องขึ้นใหม่คือความปลอดภัย: โปรแกรมใหม่ที่ได้รับ
ติดตั้งอาจมีโปรแกรมแก้ไขความปลอดภัย ดังนั้นเราจึงต้องการรวมโปรแกรมแบบคงที่ใน
เครื่องใช้โดยอัตโนมัติ

นี่คือผลกระทบด้านประสิทธิภาพ:

· ขั้นตอนการสร้าง (หรือสร้างใหม่) อุปกรณ์แคชนั้นช้า และคุณสามารถ
หลีกเลี่ยงสิ่งนี้โดยใช้อุปกรณ์ที่ติดตั้งอยู่กับที่ (ดูด้านล่าง)

· หากไม่ได้ใช้อุปกรณ์แบบตายตัว โปรดทราบว่าการอัปเดตซอฟต์แวร์บนโฮสต์จะทำให้เกิด
สร้างอุปกรณ์ขึ้นใหม่เพียงครั้งเดียว

· / var / tmp (หรือ $TMPDIR, $LIBGUESTFS_CACHEDIR) ควรอยู่บนดิสก์ที่รวดเร็วและมีมากมาย
ของพื้นที่สำหรับเครื่อง

ใช้ A แก้ไขแล้ว เครื่องใช้


ในการควบคุมอย่างเต็มที่เมื่อสร้างอุปกรณ์ คุณสามารถสร้างอุปกรณ์แบบอยู่กับที่ นี้
อุปกรณ์ควรเก็บไว้ในดิสก์ภายในเครื่องที่รวดเร็ว

ในการสร้างอุปกรณ์ให้รันคำสั่ง:

libguestfs-make-fixed-appliance

แทนที่ " " พร้อมชื่อไดเร็กทอรีที่จะจัดเก็บอุปกรณ์
(โดยปกติคุณจะตั้งชื่อไดเร็กทอรีย่อย เช่น /usr/local/lib/guestfs/appliance or
/dev/shm/appliance).

จากนั้นตั้งค่า $LIBGUESTFS_PATH (และตรวจสอบให้แน่ใจว่าตัวแปรสภาพแวดล้อมนี้ถูกตั้งค่าใน libguestfs . ของคุณ
โปรแกรม) หรือแก้ไขโปรแกรมของคุณให้เรียกว่า "guestfs_set_path" ตัวอย่างเช่น:

ส่งออก LIBGUESTFS_PATH=/usr/local/lib/guestfs/appliance

ตอนนี้คุณสามารถเรียกใช้โปรแกรม libguestfs, เครื่องมือ virt, guestfish ฯลฯ ได้ตามปกติ โปรแกรม
จะใช้อุปกรณ์แบบคงที่ของคุณ และจะไม่สร้าง สร้างใหม่ หรือแคชของตัวเอง
เครื่องใช้

(สำหรับข้อมูลโดยละเอียดเกี่ยวกับเรื่องนี้ โปรดดูที่: libguestfs-make-fixed-appliance(พ.ศ. 1)).

ประสิทธิภาพ of การแก้ไข เครื่องใช้
ในการทดสอบของเรา เราไม่พบว่าการใช้อุปกรณ์แบบตายตัวนั้นสามารถวัดค่าใดๆ ได้
ประโยชน์ด้านประสิทธิภาพ แม้ว่าเครื่องจะอยู่ในหน่วยความจำ (เช่น on /dev/shm).
อย่างไรก็ตาม มีสองประเด็นที่ต้องพิจารณา:

1. การใช้อุปกรณ์แบบตายตัวจะหยุด libguestfs ไม่ให้สร้างอุปกรณ์ขึ้นใหม่ หมายความว่า
libguestfs นั้นจะมีเวลาเริ่มต้นที่คาดเดาได้มากขึ้น

2. โหลดอุปกรณ์ตามต้องการ แบบทดสอบง่ายๆ เช่น

เวลา guestfish -a /dev/null run

ไม่โหลดอุปกรณ์มากนัก โปรแกรม libguestfs จริงที่ใช้ complex
การเรียก API จะต้องการโหลดอุปกรณ์มากขึ้น สามารถเก็บ
อุปกรณ์ในตำแหน่งที่กำหนดทำให้สามารถคาดการณ์ประสิทธิภาพได้มากขึ้น

ลด DIE จำนวน OF TIMES DIE เครื่องใช้ IS เปิดตัว


วิธีที่มีประสิทธิภาพมากที่สุด แม้ว่าจะไม่ใช่วิธีที่ง่ายที่สุดในการได้ประสิทธิภาพที่ดีเสมอไปก็ตาม
เพื่อให้แน่ใจว่าเครื่องจะเปิดตามจำนวนครั้งขั้นต่ำ นี่คงจะ
เกี่ยวข้องกับการเปลี่ยนแอปพลิเคชัน libguestfs ของคุณ

พยายามเรียก "guestfs_launch" อย่างน้อยหนึ่งครั้งต่อเครื่องเสมือนเป้าหมายหรือดิสก์อิมเมจ

แทนที่จะใช้อินสแตนซ์แยกต่างหากของ ปลาแขก(1) เพื่อทำการเปลี่ยนแปลงชุดของ
แขกคนเดียวกัน ใช้ guestfish ตัวเดียวและ/หรือใช้ guestfish --ฟัง ตัวเลือก

ลองเขียนโปรแกรมของคุณเป็น daemon ที่เปิดให้แขกเปิดในขณะที่ทำ series
ของการเปลี่ยนแปลง หรือจัดการการดำเนินการทั้งหมดที่คุณต้องการดำเนินการก่อนเปิดแขก

คุณยังสามารถลองเพิ่มดิสก์จากผู้เยี่ยมชมหลายคนไปยังอุปกรณ์เครื่องเดียว ก่อนลอง
ให้สังเกตประเด็นต่อไปนี้:

1. การเพิ่มแขกหลายคนในอุปกรณ์เดียวเป็นปัญหาด้านความปลอดภัยเพราะอาจทำให้หนึ่งเครื่อง
แขกที่จะเข้าไปยุ่งกับดิสก์ของแขกคนอื่น ทำถ้าคุณไว้วางใจทั้งหมด
แขกหรือถ้าคุณสามารถจัดกลุ่มแขกตามความไว้วางใจ

2. มีการจำกัดจำนวนดิสก์ที่คุณสามารถเพิ่มลงในอุปกรณ์เครื่องเดียวได้ เรียก
"guestfs_max_disks" ใน แขก(3) เพื่อให้ได้ขีดจำกัดนี้ ดูข้อมูลเพิ่มเติมได้ที่
"LIMITS" ใน แขก(3)

3. การใช้ libguestfs วิธีนี้ซับซ้อน ดิสก์อาจมีการโต้ตอบที่ไม่คาดคิด: for
ตัวอย่าง ถ้าแขกสองคนใช้ UUID เดียวกันสำหรับระบบไฟล์ (เพราะถูกโคลน)
หรือมีกลุ่มวอลุ่มที่มีชื่อเหมือนกัน (แต่ดู "guestfs_lvm_set_filter")

virt-df(1) เพิ่มดิสก์หลายตัวตามค่าเริ่มต้น ดังนั้นซอร์สโค้ดสำหรับโปรแกรมนี้จะเป็น a
เป็นสถานที่ที่ดีในการเริ่มต้น

ย่อ DIE เวลา ถ่าย สำหรับ การตรวจสอบ OF VMs


คำแนะนำหลักชัดเจน: อย่าทำการตรวจสอบ (ซึ่งมีราคาแพง) เว้นแต่คุณต้องการ
ผลลัพธ์

หากก่อนหน้านี้คุณทำการตรวจสอบแขก การแคชและ .อาจปลอดภัย
ใช้ผลลัพธ์จากครั้งที่แล้ว

ดิสก์บางตัวไม่จำเป็นต้องตรวจสอบเลย ตัวอย่างเช่น หากคุณกำลังสร้างดิสก์
อิมเมจ หรือหากดิสก์อิมเมจไม่ใช่ VM หรือหากดิสก์อิมเมจมีเลย์เอาต์ที่รู้จัก

แม้ว่าจะต้องมีการตรวจสอบพื้นฐาน ("guestfs_inspect_os") การตรวจสอบเสริม
อาจหลีกเลี่ยงการดำเนินงาน:

· การเมานท์ดิสก์จำเป็นสำหรับการรับข้อมูลระบบไฟล์เพิ่มเติมเท่านั้น

· รายการแอปพลิเคชัน ("guestfs_inspect_list_applications") เป็นการดำเนินการที่มีราคาแพง
บน Linux แต่เกือบจะฟรีบน Windows

· การสร้างไอคอนผู้เยี่ยมชม ("guestfs_inspect_get_icon") มีราคาถูกบน Linux แต่มีราคาแพง
บน Windows

ขนาน เครื่องใช้ไฟฟ้า


อุปกรณ์ Libguestfs ส่วนใหญ่จะผูกกับ I/O และคุณสามารถเปิดใช้อุปกรณ์ได้หลายตัวใน
ขนาน. หากมีหน่วยความจำว่างเพียงพอ ก็ควรมีความแตกต่างเล็กน้อยใน
เปิดตัวอุปกรณ์ 1 เครื่องเทียบกับอุปกรณ์ N แบบขนาน

บนแล็ปท็อป 2 คอร์ (4 เธรด) ที่มี RAM 16 GB โดยใช้การทดสอบ
สคริปต์ Perl ด้านล่าง พล็อตต่อไปนี้แสดงความสามารถในการปรับขนาดที่ยอดเยี่ยมเมื่อทำงานระหว่าง 1
และเครื่องใช้ไฟฟ้า 20 เครื่องขนานกัน:

12 ++---+----+----+----+-----+----+----+----+----+-- -++
+ + + + + + + + + *
| |
- -
11++++
| |
| |
- -
10++++
- -
| |
ส | |
9++++
อี | |
- -
ค | |
8 ++ * ++
โอ | * |
| |
น 7 ++ ++
- -
ง | * |
| |
ส 6 ++ ++
- -
- -
| |
5++++
| |
- -
- -
4++++
| |
| |
-
3 ++-*-+----+----+----+-----+----+----+----+----+-- -++
0 2 4 6 8 10 12 14 16
จำนวนเครื่องขนาน

เป็นไปได้ที่จะเรียกใช้อุปกรณ์มากกว่า 20 เครื่องพร้อมกัน แต่ถ้าคุณใช้
libvirt แบ็กเอนด์ คุณควรระวังว่า libvirt นอกกรอบนั้นจำกัดจำนวน
การเชื่อมต่อไคลเอ็นต์ถึง 20

สคริปต์ Perl แบบง่ายด้านล่างใช้เพื่อรวบรวมข้อมูลสำหรับโครงเรื่องด้านบน แต่มี
ข้อมูลเพิ่มเติมมากมายในเรื่องนี้ รวมทั้งสคริปต์และกราฟการทดสอบขั้นสูง
มีอยู่ในการโพสต์บล็อกต่อไปนี้:

http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-1/
http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-2/
http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-3/
http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-4/

#!/usr/bin/env Perl

ใช้อย่างเข้มงวด
ใช้เธรด
ใช้คำเตือน
ใช้ Sys::Guestfs;
ใช้เวลา::HiRes qw(เวลา);

การทดสอบย่อย {
my $g = Sys::Guestfs->new;
$g->add_drive_ro ("/dev/null");
$g->เปิดตัว ();

# คุณสามารถเพิ่มงานเพื่อให้ libguestfs ทำที่นี่

$g->ปิด ();
}

# รับทุกอย่างลงในแคช
ทดสอบ (); ทดสอบ (); ทดสอบ ();

สำหรับ $nr_threads ของฉัน (1..20) {
$start_t ของฉัน = เวลา ();
@threads ของฉัน;
แต่ละอัน (1..$nr_threads) {
ดัน @threads, threads->create (\&test)
}
foreach (@threads) {
$_->เข้าร่วม ();
ถ้า ( $err ของฉัน = $_->ข้อผิดพลาด ()) {
ตาย "การเปิดตัวล้มเหลวด้วย $nr_threads เธรด: $err"
}
}
$end_t ของฉัน = เวลา ();
printf ("%d %.2f\n", $nr_threads, $end_t - $start_t);
}

ใช้ โหมดผู้ใช้ LINUX


ตั้งแต่ libguestfs 1.24 จึงเป็นไปได้ที่จะใช้แบ็กเอนด์ User-Mode Linux (uml)
แทน KVM (ดู "USER-MODE LINUX BACKEND" ใน แขก(3)). ส่วนนี้ทำให้
ข้อสังเกตทั่วไปเกี่ยวกับแบ็กเอนด์นี้ แต่มันคือ อย่างสูง แนะนำ มาวัดตัวเอง
ภาระงานภายใต้ UML แทนที่จะเชื่อถือความคิดเห็นหรือสัญชาตญาณ

· โดยทั่วไป UML จะทำงานเหมือนหรือช้ากว่า KVM เล็กน้อยบนแบร์เมทัล

· อย่างไรก็ตาม UML มักจะทำเช่นเดียวกันภายใต้เวอร์ชวลไลเซชั่นเหมือนกับที่ทำกับแบร์เมทัล
ในขณะที่ KVM สามารถทำงานช้ากว่ามากภายใต้การจำลองเสมือน (เนื่องจากการเร่งความเร็วของฮาร์ดแวร์ virt
ไม่สามารถใช้งานได้).

· อัปโหลดและดาวน์โหลดช้ากว่า UML ถึง 10 เท่าเมื่อเทียบกับ KVM Libguestfs ส่ง
ข้อมูลนี้ผ่านพอร์ตอนุกรมจำลอง UML ซึ่งมีประสิทธิภาพน้อยกว่า KVM
virtio-อนุกรม

· UML ขาดคุณสมบัติบางอย่าง (เช่น การสนับสนุน qcow2) ดังนั้นจึงอาจไม่สามารถใช้งานได้เลย

สำหรับตัวเลขจริงบางส่วน โปรดดูที่:
http://rwmj.wordpress.com/2013/08/14/performance-of-user-mode-linux-as-a-libguestfs-backend/#content

การแก้ไขปัญหา แย่ ประสิทธิภาพ


ทำให้มั่นใจ ฮาร์ดแวร์ virtualization is ใช้ได้
ใช้ / proc / cpuinfo และหน้านี้:

http://virt-tools.org/learning/check-hardware-virt/

เพื่อให้แน่ใจว่าฮาร์ดแวร์เวอร์ชวลไลเซชั่นพร้อมใช้งาน โปรดทราบว่าคุณอาจต้องเปิดใช้งาน
ในไบออสของคุณ

โดยปกติแล้ว virt ของฮาร์ดแวร์จะไม่พร้อมใช้งานใน VM และ libguestfs จะทำงานช้าภายใน
เครื่องเสมือนอื่นไม่ว่าคุณจะทำอะไร virtualization ที่ซ้อนกันทำงานได้ไม่ดีในของเรา
ประสบการณ์ และไม่สามารถทดแทนการรัน libguestfs บน Baremetal ได้อย่างแน่นอน

ทำให้มั่นใจ KVM is ใช้ได้
ตรวจสอบให้แน่ใจว่าได้เปิดใช้งาน KVM และพร้อมใช้งานสำหรับผู้ใช้ที่จะเรียกใช้ libguestfs มันควรจะ
ปลอดภัยในการตั้งการอนุญาต 0666 บน /dev/kvm และการแจกแจงส่วนใหญ่ตอนนี้ทำเช่นนี้

โปรเซสเซอร์ ไปยัง หลีกเลี่ยง
หลีกเลี่ยงโปรเซสเซอร์ที่ไม่มีการจำลองเสมือนสำหรับฮาร์ดแวร์ และโปรเซสเซอร์บางตัวที่
ช้ามาก (AMD Geode เป็นตัวอย่างที่ดี)

Xen dom0
ใน Xen dom0 เป็นเครื่องเสมือน ดังนั้นจึงไม่มีการจำลองเสมือนสำหรับฮาร์ดแวร์

รายละเอียด เวลา ใช้ TS


ใช้ ts(1) คำสั่ง (จาก moreutils) เพื่อแสดงการกำหนดเวลาโดยละเอียด:

$ guestfish -a /dev/null run -v |& ts -i '%.s'
0.000022 libguestfs: เปิดตัว: program=guestfish
0.000134 libguestfs: เปิดตัว: รุ่น = 1.29.31fedora = 23, release = 2.fc23, libvirt
0.000044 libguestfs: เปิดตัว: ลงทะเบียนแบ็กเอนด์: unix
0.000035 libguestfs: เปิดตัว: ลงทะเบียนแบ็กเอนด์: uml
0.000035 libguestfs: เปิดตัว: ลงทะเบียนแบ็กเอนด์: libvirt
0.000032 libguestfs: เปิดตัว: ลงทะเบียนแบ็กเอนด์: โดยตรง
0.000030 libguestfs: เรียกใช้: แบ็กเอนด์ = libvirt
0.000031 libguestfs: เรียกใช้: tmpdir=/tmp/libguestfsw18rBQ
0.000029 libguestfs: เปิดตัว: umask=0002
0.000031 libguestfs: เปิดตัว: euid=1000
0.000030 libguestfs: เวอร์ชัน libvirt = 1002012 (1.2.12)
[ฯลฯ ]

การประทับเวลาคือวินาที (เพิ่มขึ้นจากบรรทัดก่อนหน้า)

รายละเอียด เวลา ใช้ ระบบ


คุณสามารถใช้ SystemTap (หลัก(1)) เพื่อรับรายละเอียดการกำหนดเวลาจากโปรแกรม libguestfs

บันทึกสคริปต์ต่อไปนี้เป็น เวลา.หยุด:

ทั่วโลกล่าสุด;

ฟังก์ชั่น display_time () {
ตอนนี้ = gettimeofday_us ();
เดลต้า = 0;
ถ้า (สุดท้าย > 0)
เดลต้า = ตอนนี้ - สุดท้าย;
สุดท้าย = ตอนนี้;

printf ("%d (+%d):" ตอนนี้เดลต้า);
}

โพรบเริ่มต้น {
สุดท้าย = 0;
printf ("พร้อม\n");
}

/* แสดงการเรียกทั้งหมดไปยังเครื่องหมายคงที่ */
กระบวนการสอบสวน ("/ usr / lib*/libguestfs.so.0")
.provider("guestfs") .mark("*") ? {
display_time();
printf ("\t%s %s\n", $$name, $$parms);
}

/* แสดงการเรียกฟังก์ชัน guestfs_* ทั้งหมด */
กระบวนการสอบสวน ("/ usr / lib*/libguestfs.so.0")
.function("guestfs_[az]*") ? {
display_time();
printf ("\t%s %s\n", probefunc(), $$parms);
}

เรียกใช้เป็นรูทในหน้าต่างเดียว:

# สเต็ป time.stap
พร้อม

มันพิมพ์ว่า "พร้อม" เมื่อ SystemTap โหลดโปรแกรมแล้ว เรียกใช้โปรแกรม libguestfs ของคุณ
guestfish หรือเครื่องมือ virt ในหน้าต่างอื่น ตัวอย่างเช่น:

$ guestfish -a /dev/null เรียกใช้

ในหน้าต่างสเต็ป คุณจะเห็นเอาต์พุตจำนวนมากพร้อมเวลาที่ใช้สำหรับแต่ละรายการ
ขั้นตอนที่แสดง (ไมโครวินาทีในวงเล็บ) ตัวอย่างเช่น:

xxxx (+0): guestfs_create
xxxx (+29): guestfs_set_pgroup g=0x17a9de0 pgroup=0x1
xxxx (+9): guestfs_add_drive_opts_argv g=0x17a9de0 [...]
xxxx (+8): guestfs_int_safe_strdup g=0x17a9de0 str=0x7f8a153bed5d
xxxx (+19): guestfs_int_safe_malloc g=0x17a9de0 nbytes=0x38
xxxx (+5): guestfs_int_safe_strdup g=0x17a9de0 str=0x17a9f60
xxxx (+10): guestfs_launch g=0x17a9de0
xxxx (+4): launch_start
[ฯลฯ ]

คุณจะต้องปรึกษาและแก้ไขแหล่งที่มาเป็น libguestfs เพื่อให้เข้าใจอย่างถ่องแท้
ผลลัพธ์.

รายละเอียด การดีบัก ใช้ GDB


คุณสามารถแนบ BIOS/เคอร์เนลของอุปกรณ์โดยใช้ gdb ถ้าคุณรู้ว่าคุณกำลังทำอะไรอยู่
นี่อาจเป็นวิธีที่มีประโยชน์ในการวินิจฉัยการถดถอยของบูต

ประการแรก คุณต้องเปลี่ยน qemu เพื่อให้ทำงานด้วยตัวเลือก "-S" และ "-s" ตัวเลือกเหล่านี้
ทำให้ qemu หยุดชั่วคราวเมื่อบู๊ตและอนุญาตให้คุณแนบดีบักเกอร์ อ่าน qemu(1) ต่อไป
ข้อมูล. Libguestfs เรียกใช้ qemu หลายครั้ง (เพื่อสแกนเอาต์พุตความช่วยเหลือเป็นต้น)
และคุณต้องการเพียงการเรียกใช้ qemu ขั้นสุดท้ายเพื่อใช้ตัวเลือกเหล่านี้ ดังนั้นให้ใช้ตัวห่อหุ้ม qemu
สคริปต์เช่นนี้:

#!/ bin / bash -

# ตั้งค่าให้ชี้ไปที่ไบนารี qemu จริง
qemu=/usr/bin/qemu-kvm

ถ้า [ "$1" != "-global" ]; แล้ว
# การสแกนความช่วยเหลือออก ฯลฯ
ผู้บริหาร $qemu "$@"
อื่น
#คิวมูวิ่งจริงๆ
exec $qemu -S -s "$@"
fi

ตอนนี้เรียกใช้ guestfish หรือเครื่องมือ libguestfs อื่นด้วยตัวห่อหุ้ม qemu (ดู "QEMU WRAPPERS" ใน
แขก(3) เพื่อทำความเข้าใจว่าสิ่งนี้กำลังทำอะไรอยู่):

LIBGUESTFS_HV=/path/to/qemu-wrapper guestfish -a /dev/null -v รัน

สิ่งนี้ควรหยุดชั่วคราวหลังจาก qemu เปิดตัว ในหน้าต่างอื่น แนบ qemu โดยใช้ gdb:

$gdb
(gdb) ตั้งค่าสถาปัตยกรรม i8086
สถาปัตยกรรมเป้าหมายจะถือว่าเป็น i8086
(gdb) เป้าหมายระยะไกล :1234
การดีบักระยะไกลโดยใช้ :1234
0x0000fff0 ใน ?? ()
(gdb) ต่อ

ณ จุดนี้ คุณสามารถใช้เทคนิค gdb มาตรฐานได้ เช่น กด "^C" เพื่อขัดจังหวะการบูต
และ "bt" รับการติดตามสแต็ก การตั้งค่าเบรกพอยต์ ฯลฯ โปรดทราบว่าเมื่อคุณผ่าน
BIOS และในเคอร์เนล Linux คุณจะต้องเปลี่ยนสถาปัตยกรรมกลับเป็น 32 หรือ 64
บิต

ใช้ guestfs-performance ออนไลน์โดยใช้บริการ onworks.net


เซิร์ฟเวอร์และเวิร์กสเตชันฟรี

ดาวน์โหลดแอพ Windows & Linux

  • 1
    เฟซแทร็กนัวร์
    เฟซแทร็กนัวร์
    โปรแกรม headtracking แบบโมดูลาร์นั้น
    รองรับตัวติดตามใบหน้าและตัวกรองหลายตัว
    และเกมโปรโตคอล ในบรรดาผู้ติดตาม
    คือ SM FaceAPI, AIC Inertial Head
    ติดตาม ...
    ดาวน์โหลด facetracknoir
  • 2
    PHP คิวอาร์โค้ด
    PHP คิวอาร์โค้ด
    PHP QR Code เป็นโอเพ่นซอร์ส (LGPL)
    ห้องสมุดสำหรับสร้างรหัส QR,
    บาร์โค้ด 2 มิติ ขึ้นอยู่กับ
    ไลบรารี libqrencode C จัดเตรียม API สำหรับ
    การสร้างบาร์โค้ด QR Code...
    ดาวน์โหลด PHP QR Code
  • 3
    freeciv
    freeciv
    Freeciv เป็นเกมเทิร์นเบสฟรี
    เกมกลยุทธ์แบบผู้เล่นหลายคนซึ่งในแต่ละ
    ผู้เล่นกลายเป็นผู้นำของa
    อารยธรรมต่อสู้เพื่อให้ได้
    เป้าหมายสูงสุด : เป็น...
    ดาวน์โหลด Freeciv
  • 4
    แซนด์บ็อกซ์นกกาเหว่า
    แซนด์บ็อกซ์นกกาเหว่า
    Cuckoo Sandbox ใช้ส่วนประกอบเพื่อ
    ตรวจสอบพฤติกรรมของมัลแวร์ใน
    สภาพแวดล้อมแบบแซนด์บ็อกซ์ แยกได้จาก
    ส่วนที่เหลือของระบบ ให้บริการแบบอัตโนมัติ
    วิเคราะห์เ...
    ดาวน์โหลด Cuckoo Sandbox
  • 5
    LMS-YouTube
    LMS-YouTube
    เล่นวิดีโอ YouTube บน LMS (พอร์ตของ
    Triode ของ YouTbe API v3) นี่คือ
    แอปพลิเคชันที่สามารถดึงข้อมูลได้
    ราคาเริ่มต้นที่
    https://sourceforge.net/projects/lms-y...
    ดาวน์โหลด LMS-YouTube
  • 6
    มูลนิธิการนำเสนอ Windows
    มูลนิธิการนำเสนอ Windows
    มูลนิธิการนำเสนอ Windows (WPF)
    เป็นเฟรมเวิร์ก UI สำหรับสร้าง Windows
    แอปพลิเคชันเดสก์ท็อป WPF รองรับ a
    การพัฒนาแอพพลิเคชั่นในวงกว้าง
    คุณสมบัติ ...
    ดาวน์โหลด Windows Presentation Foundation
  • เพิ่มเติม»

คำสั่ง Linux

Ad