حساب مفاتيح السياق لكل موضوع
-
19-09-2019 - |
سؤال
هل هناك طريقة لمعرفة عدد سياق مفاتيح كل مؤشر ترابط يولد؟ (كلاهما داخل وخارجه إذا كان ذلك ممكنا) إما في X / S، أو السماح له بتشغيل وإعطاء بيانات مجمعة بعد بعض الوقت. (إما على Linux أو على Windows)
لقد وجدت أدوات فقط تعطي رقم تبديل السياق المجامعي لنظام التشغيل بالكامل أو لكل عملية.
يجعل برنامجي العديد من مفاتيح السياق (50K / S)، وربما ليس من الضروري الكثير، لكنني لست متأكدا من أين أبدأ تحسين، أين يحدث معظم الأشخاص.
المحلول
على أنظمة GNU / Linux الأخيرة، يمكنك استخدام SystemTAP لجمع البيانات التي تريدها على كل مكالمة لإصدارها (). مثال الجداول الزمنية. ربما تكون بداية جيدة: http://sourceware.org/systemtap/examples/keyword-index.html#scheduler.
نصائح أخرى
لينكس
كتبت رسالة نصية صغيرة لمعرفة تفاصيل مؤشر ترابط معين من العملية. من خلال تنفيذ هذا البرنامج النصي، يمكنك رؤية مفتاح السياق أيضا.
if [ "$#" -ne 2 ]; then
echo "INVALID ARGUMENT ERROR: Please use ./see_thread.sh processName threadNumber"
exit
fi
ls /proc/`pgrep $1`/task | head -n$2 | tail -n+$2>temp
cat /proc/`pgrep $1`/task/`cat temp`/sched
آمل أن يساعد هذا.
لدي برنامج نصي باش الذي يحسب مفاتيح السياق الطوعي وغير الطوعي الذي أدلى به مؤشر ترابط خلال إطار زمني محدد. لست متأكدا مما إذا كان هذا سيخدم هدفك ولكنني سأنشره على أي حال.
هذا البرنامج النصي هو حلق على جميع مواضيع العملية والتسجيل "voluntary_ctxt_switches" & "nonvoluntary_ctxt_switches"
من عند /proc/< process-id>/task/< thread-id>/status
. وبعد ما أقوم به عموما هو تسجيل هذه العدادات في بداية تشغيل الأداء وتسجيله مرة أخرى في نهاية التشغيل ثم حساب الفرق كإجمالي vol & non-vol
مفاتيح CTX أثناء تشغيل الأداء.
pid=`ps -ef | grep <process name> | grep $USER | grep -v grep | awk '{print $2}'`
echo "ThreadId;Vol_Ctx_Switch;Invol_Ctx_Switch"
for tid in `ps -L --pid ${pid} | awk '{print $2}'`
do
if [ -f /proc/$pid/task/$tid/status ]
then
vol=`cat /proc/$pid/task/$tid/status | grep voluntary_ctxt_switches | grep -v nonvoluntary_ctxt_switches | awk '{print $NF}'`
non_vol=`cat /proc/$pid/task/$tid/status | grep nonvoluntary_ctxt_switches | awk '{print $NF}'`
fi
echo "$tid;$vol;$non_vol"
done
البرنامج النصي ثقيل بعض الشيء، في عملية حالتي لديها حوالي 2500 مواضيع. إجمالي الوقت لجمع مفاتيح CTX حوالي 10 ثوان.