এফট্রেস: উপলভ্য_ ফিল্টার_ফাংশনগুলি কীভাবে সিদ্ধান্ত নেওয়া হয়?


1

সিস্টেম: উবুন্টু 14.04 কার্নেল 4.10.12

সুতরাং আমি FTrace কীভাবে কাজ করে তা বোঝার চেষ্টা করতে চলেছি, তবে আমি যে বিষয়টি লক্ষ্য করেছি তা আমাকে কিছুটা হতাশ করছে:

উপলব্ধ_filter_function কিছু নির্দিষ্ট ফাংশন সনাক্ত করা হচ্ছে ফিল্টার করতে ব্যবহার করা যেতে পারে। তবে যে ফাংশনটি আমি সনাক্ত করার চেষ্টা করছি (এই ক্ষেত্রে, কেএসএমের মূল কর্মী ksm_do_scan) তালিকায় প্রদর্শিত হচ্ছে না।

এখানে উপলব্ধ ফাংশনগুলির তালিকা (কেএসএম-ফাংশন দ্বারা ফিল্টার করা):

root@test:/sys/kernel/debug/tracing# cat available_filter_functions | grep             
ksm

ksm_memory_callback
break_ksm
unmerge_ksm_pages
get_ksm_page
try_to_merge_with_ksm_page
ksm_scan_thread (calls ksm_do_scan)
__ksm_enter
ksm_madvise
__ksm_exit
ksm_might_need_to_copy
rmap_walk_ksm
ksm_migrate_page

এবং এখানে ksm_do_scan দেখতে কেমন তা দেখায়:

static void ksm_do_scan(unsigned int scan_npages)
{
    struct rmap_item *rmap_item;
    struct page *uninitialized_var(page);

    while (scan_npages-- && likely(!freezing(current))) {
            cond_resched();
            rmap_item = scan_get_next_rmap_item(&page);
            if (!rmap_item)
                    return;
            cmp_and_merge_page(page, rmap_item);
            put_page(page);
    }
}

আমি এটি অন্য সিস্টেমে পরীক্ষা করেছিলাম যা কার্নেল সংস্করণ ৪.৪.০-৩১ এর সাথে সেটআপ করা হয়েছিল এবং ksm_do_scan () উপলব্ধ_ ফিল্টার_ফাংশনগুলির তালিকায় প্রদর্শিত হয়েছিল। সুতরাং আমি বুঝতে পেরেছিলাম যে এটি 4.10.12 কার্নেলটি কীভাবে কনফিগার করা হয়েছিল তার সাথে কিছু করার দরকার আছে তবে আমি নিশ্চিত নই। আমি এখনও অবধি দেখানো সমস্ত প্রস্তাবিত .কনফিগ বিকল্পগুলি সক্ষম করে:

CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
CONFIG_STACK_TRACER=y
CONFIG_DYNAMIC_FTRACE=y

অবশেষে, আমি জানি যে ফ্রেটেস ব্ল্যাকটি __init এবং __ ডিভিনিট দ্বারা টীকায়িত ফাংশন তালিকাভুক্ত করে কারণ কার্নেল আরআইআর ফাংশনগুলি আরম্ভের সময় লোড করা হয় এবং যখন আরম্ভ হয় তখন মুছে ফেলা হয়, তবে ksm_do_scan এগুলির কোনও টিকা নেই।

উত্তর:


1

সোজা ঘোড়ার মুখ থেকে (স্টিভেন রোস্টেডের সাথে রিক চ্যাট থেকে)

"এগুলি হ'ল সাদা তালিকাভুক্ত সমস্ত ফাংশন এবং ইনলাইনড বা চিহ্নিত করা হয়নি" নোট্রেস "now

আপনার প্রশ্নের উত্তর দিতে: জিসিসি আকার নির্বিশেষে কোনও স্থানে ব্যবহৃত কোনও স্থির ফাংশনকে ইনলাইন করতে পারে। সুতরাং সেই ফাংশনে "নাইনলাইন" যুক্ত করার চেষ্টা করুন।

এটি আমার পক্ষে কাজ করেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.