سؤال

هل هناك طريقة لمعرفة عدد سياق مفاتيح كل مؤشر ترابط يولد؟ (كلاهما داخل وخارجه إذا كان ذلك ممكنا) إما في 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 ثوان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top