أداء الضيف - عبر الإنترنت في السحابة

هذا هو الأمر Guestfs-Performance الذي يمكن تشغيله في موفر الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


Guestfs-Performance - libguestfs الهندسي للحصول على أفضل أداء

الوصف


توثق هذه الصفحة كيفية الحصول على أفضل أداء من libguestfs، خاصة عندما
تتوقع استخدام libguestfs لمعالجة آلاف الأجهزة الافتراضية أو صور القرص.

يتم تغطية ثلاثة مجالات رئيسية. تدير Libguestfs جهازًا (توزيع Linux صغير)
داخل كيمو/KVM. المجالان الأولان هما: تقليل الوقت المستغرق لبدء ذلك
الجهاز وعدد مرات تشغيل الجهاز. المنطقة الثالثة هي
تقصير الوقت المستغرق لفحص الأجهزة الافتراضية.

حدود القياسات


قبل إجراء تغييرات على كيفية استخدامك لـ libguestfs، قم بإجراء قياسات أساسية.

حدود: ابتداء ال جهاز
على جهاز غير محمّل، الوقت المستغرق لبدء تشغيل الجهاز:

time Guestfish -a /dev/null run

قم بتشغيل هذا الأمر عدة مرات متتالية وتجاهل عمليات التشغيل القليلة الأولى حتى تكون كذلك
قياس حالة "ذاكرة التخزين المؤقت الساخنة" النموذجية.

تفسير

يقوم هذا الأمر بتشغيل جهاز libguestfs على قرص فارغ، ثم يتم إيقافه على الفور
بالاسفل. في المرة الأولى التي تقوم فيها بتشغيل الأمر، سيتم إنشاء جهاز وتخزينه مؤقتًا
(عادة تحت /var/tmp/.guestfs-*). يجب أن تقوم عمليات التشغيل اللاحقة بإعادة استخدام الجهاز المخزن مؤقتًا.

متوقع النتائج

يجب أن تتوقع أن تحصل على مرات أقل من 6 ثواني. إذا كانت الأوقات التي تراها على
الجهاز الذي تم تفريغه أعلى من ذلك، ثم راجع قسم "استكشاف أخطاء الأداء الضعيف وإصلاحها"
أدناه.

حدود: أداء تفتيش of a ضيف
لإجراء هذا الاختبار، ستحتاج إلى جهاز غير محمل وضيف حقيقي واحد على الأقل أو صورة قرص.
إذا كنت تخطط لاستخدام libguestfs ضد ضيوف X فقط (على سبيل المثال، X = Windows)، فاستخدم
سيكون ضيف X هنا هو الأكثر ملاءمة. إذا كنت تخطط لتشغيل libguestfs ضد
مزيج من الضيوف، ثم استخدم مزيجًا من الضيوف للاختبار هنا.

الوقت المستغرق لإجراء الفحص وتركيب أقراص الضيف. استخدم ال
الأمر الأول إذا كنت ستستخدم صور القرص، والأمر الثاني إذا كنت ستستخدمه
باستخدام ليبفيرت.

الوقت Guestfish --ro -a disk.img -i Exit

الوقت Guestfish --ro -d GuestName -i Exit

قم بتشغيل الأمر عدة مرات متتالية وتجاهل عمليات التشغيل القليلة الأولى حتى تكون كذلك
قياس حالة "ذاكرة التخزين المؤقت الساخنة" النموذجية.

تفسير

يقوم هذا الأمر بتشغيل جهاز libguestfs على صورة القرص المسماة أو libvirt Guest،
يقوم بإجراء فحص libguestfs عليه (راجع "الفحص" في Guestfs(٣) يتصاعد للضيف
الأقراص، ثم يتجاهل كل هذه النتائج ويغلق.

في المرة الأولى التي تقوم فيها بتشغيل الأمر، سيتم إنشاء جهاز وتخزينه مؤقتًا (عادةً
مع /var/tmp/.guestfs-*). يجب أن تقوم عمليات التشغيل اللاحقة بإعادة استخدام الجهاز المخزن مؤقتًا.

متوقع النتائج

يجب أن تتوقع أوقاتًا تكون أكبر من 5 ثوانٍ عما تم قياسه في خط الأساس الأول
اختبار أعلاه. (على سبيل المثال، إذا تم تشغيل الاختبار الأساسي الأول خلال 5 ثوانٍ، فسيتم تنفيذ هذا الاختبار
يجب أن يتم تشغيله خلال ≥ 10 ثوانٍ).

فهم ال تطبيق لأي لبس متى IT IS بنيت/مخزنة مؤقتا


في المرة الأولى التي تستخدم فيها libguestfs، سيتم إنشاء جهاز وتخزينه مؤقتًا. هذا عادة
in /var/tmp/.guestfs-*، إلا إذا قمت بتعيين $TMPDIR أو $LIBGUESTFS_CACHEDIR في هذه الحالة
سيكون ضمن هذا الدليل المؤقت.

لمزيد من المعلومات حول كيفية إنشاء الجهاز، راجع "أجهزة SUPERMIN" في
سوبرمين(1).

في كل مرة يتم فيها تشغيل libguestfs، سيتحقق من عدم وجود ملفات مضيفة يستخدمها الجهاز
تغير. إذا كان هناك أي شيء، فسيتم إعادة بناء الجهاز. يحدث هذا عادة عندما تكون الحزمة
تم تثبيته أو تحديثه على المضيف (على سبيل المثال، استخدام برامج مثل "yum" أو "apt-get"). ال
سبب إعادة بناء الجهاز هو الأمان: البرنامج الجديد الذي تم
قد يحتوي تثبيته على إصلاح أمني، ولذلك نريد تضمين البرنامج الثابت في ملف
الجهاز تلقائيا.

هذه هي الآثار المترتبة على الأداء:

· عملية بناء (أو إعادة بناء) الجهاز المخبأ بطيئة، ويمكنك القيام بذلك
تجنب حدوث ذلك باستخدام جهاز ثابت (انظر أدناه).

· إذا لم تكن تستخدم جهازًا ثابتًا، فكن على علم بأن تحديث البرنامج على المضيف سيؤدي إلى حدوث ذلك
إعادة بناء الجهاز مرة واحدة.

· / فار / 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 والأدوات الفعّالة وGuestfish وما إلى ذلك كالمعتاد. البرامج
سيستخدمون جهازك الثابت، ولن يقوموا أبدًا ببناء أو إعادة بناء أو تخزين أجهزتهم الخاصة
الجهاز.

(للحصول على معلومات مفصلة حول هذا الموضوع، انظر: جهاز libguestfs-make-fix(1)).

الأداء of ال ثابت جهاز
في اختباراتنا لم نجد أن استخدام جهاز ثابت يعطي أي شيء قابل للقياس
فائدة الأداء، حتى عندما يكون الجهاز موجودًا في الذاكرة (على سبيل المثال / ديف / shm).
ومع ذلك هناك نقطتان يجب مراعاتهما:

1. يؤدي استخدام جهاز ثابت إلى منع libguestfs من إعادة بناء الجهاز على الإطلاق
أن libguestfs سيكون لها أوقات بدء تشغيل أكثر قابلية للتنبؤ بها.

2. يتم تحميل الجهاز عند الطلب. اختبار بسيط مثل:

time Guestfish -a /dev/null run

لا يتم تحميل الكثير من الجهاز. برنامج libguestfs حقيقي باستخدام معقدة
تتطلب مكالمات واجهة برمجة التطبيقات (API) تحميل المزيد من الجهاز. القدرة على تخزين
الجهاز في مكان محدد يجعل الأداء أكثر قابلية للتنبؤ به.

تقليص ال عدد OF TIMES ال تطبيق IS تم إطلاقه


إلى حد بعيد الطريقة الأكثر فعالية، وإن لم تكن دائمًا أبسط طريقة للحصول على أداء جيد هي
لضمان تشغيل الجهاز بأقل عدد ممكن من المرات. ربما هذا سوف
تنطوي على تغيير تطبيق libguestfs الخاص بك.

حاول الاتصال بـ "guestfs_launch" مرة واحدة على الأكثر لكل جهاز ظاهري مستهدف أو صورة قرص.

بدلاً من استخدام مثيل منفصل لـ Guestfish(1) لإجراء سلسلة من التغييرات على
نفس الضيف، استخدم مثيلًا واحدًا لـ Guestfish و/أو استخدم Guestfish --استمع الخيار.

فكر في كتابة برنامجك باعتباره برنامجًا خفيًا يبقي الضيف مفتوحًا أثناء إنشاء المسلسل
من التغييرات. أو قم بتنظيم جميع العمليات التي تريد تنفيذها قبل فتح الضيف.

يمكنك أيضًا محاولة إضافة أقراص من عدة ضيوف إلى جهاز واحد. قبل المحاولة
هذا، لاحظ النقاط التالية:

1. تعد إضافة عدة ضيوف إلى جهاز واحد مشكلة أمنية لأنها قد تسمح بذلك
ضيف للتدخل في أقراص ضيف آخر. افعل ذلك فقط إذا كنت تثق في الجميع
الضيوف، أو إذا كان بإمكانك تجميع الضيوف حسب الثقة.

2. هناك حد صارم لعدد الأقراص التي يمكنك إضافتها إلى جهاز واحد. يتصل
"guestfs_max_disks" في Guestfs(٣) لحصول هذا الحد. لمزيد من المعلومات انظر
"الحدود" في Guestfs(3).

3. يعد استخدام libguestfs بهذه الطريقة أمرًا معقدًا. يمكن أن تحتوي الأقراص على تفاعلات غير متوقعة: for
على سبيل المثال، إذا استخدم ضيفان نفس UUID لنظام الملفات (لأنهما تم استنساخهما)،
أو لديك مجموعات وحدات تخزين بنفس الاسم (لكن راجع "guestfs_lvm_set_filter").

الفضيلة df(1) يضيف أقراصًا متعددة بشكل افتراضي، وبالتالي فإن الكود المصدري لهذا البرنامج سيكون a
مكان جيد للبدء.

تقصير ال الوقت مأخوذ لأي التفتيش OF نظام رصد السفن


النصيحة الرئيسية واضحة: لا تقم بإجراء الفحص (وهو أمر مكلف) إلا إذا كنت في حاجة إليه
نتائج.

إذا سبق لك إجراء فحص على الضيف، فقد يكون من الآمن تخزينه مؤقتًا و
إعادة استخدام النتائج من آخر مرة.

لا تحتاج بعض الأقراص إلى الفحص على الإطلاق: على سبيل المثال، إذا كنت تقوم بإنشاء قرص
صورة، أو إذا كانت صورة القرص ليست جهازًا افتراضيًا، أو إذا كانت صورة القرص ذات تخطيط معروف.

حتى عندما يكون الفحص الأساسي ("guestfs_inspect_os") مطلوبًا، يجب إجراء فحص إضافي
يمكن تجنب العمليات:

· تركيب الأقراص ضروري فقط للحصول على معلومات إضافية عن نظام الملفات.

· تعتبر قائمة التطبيقات ("guestfs_inspect_list_applications") عملية مكلفة
على Linux، ولكنه مجاني تقريبًا على Windows.

· يعد إنشاء رمز ضيف ("guestfs_inspect_get_icon") رخيصًا على Linux ولكنه مكلف
على ويندوز.

موازى الأجهزة


أجهزة Libguestfs مرتبطة في الغالب بالإدخال/الإخراج ويمكنك تشغيل أجهزة متعددة فيها
موازي. بشرط أن يكون هناك ما يكفي من الذاكرة الحرة، ينبغي أن يكون هناك اختلاف بسيط في
إطلاق جهاز واحد مقابل أجهزة N بالتوازي.

على جهاز كمبيوتر محمول ثنائي النواة (2 خيوط) مزود بذاكرة وصول عشوائي (RAM) سعة 4 جيجابايت، باستخدام الاختبار (غير الواقعي بشكل خاص)
نص Perl أدناه، يوضح المخطط التالي قابلية التوسع الممتازة عند التشغيل بين 1
و20 جهازًا بالتوازي:

12 ++----+----+----+-----+----+----+----+-- -++
+ + + + + + + + + *
| |
| * |
11 ++ ++
| |
| |
| * * |
10 ++ ++
| * |
| |
ق | |
9 ++ ++
ه | |
| * |
ج | |
8 ++ * ++
س | * |
| |
ن 7 ++ ++
| * |
د | * |
| |
ق6 ++++
| * * |
| * |
| |
5 ++ ++
| |
| * |
| * * |
4 ++ ++
| |
| |
+ * * * + + + + + + +
3 ++-*-+----+----+----+----+----+----+----+-- -++
شنومكس شنومكس شنومكس شنومكس شنومكس شنومكس شنومكس شنومكس شنومكس شنومكس شنومكس
عدد الأجهزة المتوازية

من الممكن تشغيل أكثر من 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/

#!/ البيرة / بن / إنف بيرل

استخدام صارم
استخدام المواضيع.
استخدام التحذيرات
استخدم Sys::Guestfs;
استخدام الوقت::HiRes qw(time);

اختبار فرعي {
my $g = Sys::Guestfs->new;
$g->add_drive_ro ("/dev/null");
$g->launch ();

# يمكنك إضافة بعض الأعمال التي يمكن لـ libguestfs القيام بها هنا.

$g->إغلاق ();
}

# احصل على كل شيء في ذاكرة التخزين المؤقت.
امتحان ()؛ امتحان ()؛ امتحان ()؛

لـ $nr_threads (1..20) {
$start_t = الوقت ()؛
@threads الخاص بي؛
foreach (1..$nr_threads) {
ادفع @threads، المواضيع->إنشاء (\&اختبار)
}
foreach (@threads) {
$_->انضمام ()؛
إذا (خطأي $ = $_->خطأ ()) {
يموت "فشل التشغيل مع سلاسل الرسائل $nr_threads: $err"
}
}
$end_t = time ();
printf ("%d %.2f\n"، $nr_threads، $end_t - $start_t)؛
}

باستخدام وضع المستخدم LINUX


منذ إصدار libguestfs 1.24، أصبح من الممكن استخدام الواجهة الخلفية لنظام التشغيل Linux (uml) لوضع المستخدم
بدلاً من KVM (راجع "USER-MODE LINUX BACKEND" في Guestfs(3)). هذا القسم يجعل بعض
ملاحظات عامة حول هذه الخلفية، ولكنه كذلك جدا مستحسن لقياس بنفسك
عبء العمل تحت UML بدلاً من الثقة بالتعليقات أو الحدس.

· عادةً ما يؤدي UML نفس أداء KVM أو أبطأ قليلاً منه، على النظام المعدني.

· على الرغم من ذلك، غالبًا ما يؤدي UML نفس الأداء في ظل المحاكاة الافتراضية كما هو الحال في النظام المعدني،
في حين أن KVM يمكن أن يعمل بشكل أبطأ بكثير في ظل المحاكاة الافتراضية (نظرًا لأن تسريع الأجهزة الفعّالة
غير متاح).

· التحميل والتنزيل أبطأ بمقدار 10 مرات على UML من KVM. يرسل Libguestfs
هذه البيانات عبر المنفذ التسلسلي الذي تمت محاكاته لـ UML، وهو أقل كفاءة بكثير من منفذ KVM
مسلسل افتراضي.

· يفتقر UML إلى بعض الميزات (مثل دعم qcow2)، لذلك قد لا يكون قابلاً للتطبيق على الإطلاق.

للاطلاع على بعض الأرقام الفعلية، انظر:
http://rwmj.wordpress.com/2013/08/14/performance-of-user-mode-linux-as-a-libguestfs-backend/# المحتوى

TROUBLESHOOTING فقير أداء


ضمان خردوات الافتراضية is متاح
استعمل / proc / cpuinfo وهذه الصفحة:

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

للتأكد من توفر المحاكاة الافتراضية للأجهزة. لاحظ أنك قد تحتاج إلى تمكينه
في BIOS الخاص بك.

لا تتوفر الأجهزة الافتراضية عادةً داخل الأجهزة الافتراضية، وسيتم تشغيل libguestfs ببطء بالداخل
جهاز افتراضي آخر مهما فعلت. المحاكاة الافتراضية المتداخلة لا تعمل بشكل جيد في مجتمعنا
الخبرة، وبالتأكيد ليس بديلاً عن تشغيل libguestfs على المعدن.

ضمان KVM is متاح
تأكد من تمكين KVM وإتاحته للمستخدم الذي سيقوم بتشغيل libguestfs. أنه ينبغي
كن آمنًا لتعيين أذونات 0666 / ديف / kvm ومعظم التوزيعات تفعل هذا الآن.

شركات التصنيع إلى تجنب
تجنب المعالجات التي لا تحتوي على المحاكاة الافتراضية للأجهزة، وبعض المعالجات التي لا تحتوي عليها
ببساطة بطيء جدًا (AMD Geode مثال رائع).

كسين dom0
في Xen، dom0 عبارة عن جهاز افتراضي، وبالتالي لا تتوفر المحاكاة الافتراضية للأجهزة.

مفصلة المواعيد باستخدام TS


استخدم ts(1) الأمر (من moreutils) لإظهار التوقيتات التفصيلية:

$ Guestfish -a /dev/null run -v |& ts -i '%.s'
0.000022 libguestfs: الإطلاق: البرنامج=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 (STAP(1)) للحصول على التوقيتات التفصيلية من برامج libguestfs.

احفظ البرنامج النصي التالي باسم time.stap:

العالمية الأخيرة؛

وظيفة عرض_الوقت () {
الآن = gettimeofday_us ()؛
دلتا = 0؛
إذا (الأخير > 0)
دلتا = الآن - الأخير؛
الأخير = الآن؛

printf ("%d (+%d):"، الآن، دلتا)؛
}

يبدأ التحقيق {
الأخير = 0؛
printf("جاهز\n");
}

/* عرض جميع المكالمات إلى العلامات الثابتة. */
عملية التحقيق("/ البيرة / ليب*/libguestfs.so.0")
.provider("guestfs").mark("*") ? {
وقت العرض()؛
printf ("\t%s %s\n"، $$name، $$parms)؛
}

/* عرض جميع المكالمات إلى وظائف Guestfs_*. */
عملية التحقيق("/ البيرة / ليب*/libguestfs.so.0")
.function("guestfs_[az]*") ؟ {
وقت العرض()؛
printf ("\t%s %s\n"، probefunc(), $$parms);
}

قم بتشغيله كجذر في نافذة واحدة:

# اضغط على الوقت.stap
استعداد

يقوم بطباعة "جاهز" عندما يقوم SystemTap بتحميل البرنامج. قم بتشغيل برنامج libguestfs الخاص بك،
Guestfish أو أداة فاضلة في نافذة أخرى. على سبيل المثال:

$ Guestfish - تشغيل /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/kernel بالجهاز باستخدام gdb. إذا كنت تعرف ما تفعله،
يمكن أن تكون هذه طريقة مفيدة لتشخيص تراجعات التمهيد.

أولاً، يجب عليك تغيير qemu بحيث يعمل مع خياري "-S" و"-s". هذه الخيارات
يتسبب في توقف qemu مؤقتًا عند التمهيد ويسمح لك بإرفاق مصحح أخطاء. يقرأ كيمو(1) للمزيد
معلومة. يستدعي Libguestfs qemu عدة مرات (لفحص مخرجات المساعدة وما إلى ذلك)
وتريد فقط أن يستخدم الاستدعاء النهائي لـ qemu هذه الخيارات، لذا استخدم غلاف qemu
نص مثل هذا:

#!/ بن / باش -

# اضبط هذا للإشارة إلى ثنائي qemu الحقيقي.
qemu=/usr/bin/qemu-kvm

إذا [ "$1" != "-global" ]; ثم
# مسح مخرجات المساعدة وما إلى ذلك.
تنفيذي $qemu "$@"
آخر
# تشغيل qemu حقًا.
تنفيذي $qemu -S -s "$@"
fi

الآن قم بتشغيل Guestfish أو أداة libguestfs أخرى باستخدام غلاف qemu (راجع "QEMU WRAPPERS" في
Guestfs(3) لفهم ما يفعله هذا):

LIBGUESTFS_HV=/path/to/qemu-wrapper Guestfish -a /dev/null -v run

يجب أن يتوقف هذا مؤقتًا بعد إطلاق qemu مباشرةً. في نافذة أخرى، قم بإرفاق qemu باستخدام gdb:

$ جي دي بي
(gdb) تعيين البنية i8086
من المفترض أن تكون البنية المستهدفة هي i8086
(gdb) الهدف عن بعد: 1234
التصحيح عن بعد باستخدام :1234
0x0000fff0 في؟؟ ()
(جي دي بي) تابع

عند هذه النقطة يمكنك استخدام تقنيات gdb القياسية، على سبيل المثال. ضرب "^C" لمقاطعة التمهيد
و"bt" يحصلان على تتبع المكدس، وتحديد نقاط التوقف، وما إلى ذلك. لاحظ أنه عندما تتجاوز
BIOS وفي Linux kernel، ستحتاج إلى تغيير البنية مرة أخرى إلى 32 أو 64
قليلا.

استخدم Guestfs-Performance عبر الإنترنت باستخدام خدمات onworks.net



أحدث برامج Linux و Windows عبر الإنترنت