performance - ইন্টেলের চক্র হারিয়েছেন? Rdtsc এবং CPU_CLK_UNHALTED.REF_TSC এর মধ্যে একটি অসঙ্গতি



x86 x86-64 (1)

সাম্প্রতিক সিপিইউগুলিতে (কমপক্ষে সর্বশেষ দশক বা তার বেশি) ইনটেল বিভিন্ন কনফিগারযোগ্য পারফরম্যান্স কাউন্টার ছাড়াও তিনটি ফিক্সড-ফাংশন হার্ডওয়্যার পারফরম্যান্স কাউন্টার সরবরাহ করেছে। তিনটি নির্দিষ্ট কাউন্টারগুলি হ'ল:

INST_RETIRED.ANY
CPU_CLK_UNHALTED.THREAD
CPU_CLK_UNHALTED.REF_TSC

প্রথমটি অবসর প্রাপ্ত নির্দেশনা গণনা করে, প্রকৃত চক্রের দ্বিতীয় সংখ্যা এবং শেষটি আমাদের আগ্রহী। ইন্টেল সফটওয়্যার বিকাশকারীদের ম্যানুয়ালটির 3 য় খণ্ডের বিবরণটি হ'ল:

এই ইভেন্টটি টিএসসি হারে রেফারেন্স চক্রের সংখ্যা গণনা করে যখন মূলটি থামানো অবস্থায় না থাকে এবং কোনও টিএম স্টপ-ক্লক অবস্থায় না থাকে। এইচএলটি নির্দেশনা বা এমডব্লিউএআইটি নির্দেশনা চলাকালীন মূলটি হল্ট অবস্থায় প্রবেশ করে। এই ইভেন্টটি মূল ফ্রিকোয়েন্সি পরিবর্তনগুলি (যেমন, পি স্টেটস) দ্বারা প্রভাবিত হয় না তবে সময় স্ট্যাম্প কাউন্টার হিসাবে একই ফ্রিকোয়েন্সিতে গণনা করে। এই ইভেন্টটি আনুমানিক অতিবাহিত সময় হতে পারে যখন মূলটি থামার স্থানে ছিল না এবং কোনও টিএম স্টপ ক্লক অবস্থায় ছিল না।

সুতরাং একটি সিপিইউ-বাউন্ড লুপের জন্য, আমি এই মানটি rdstc থেকে পঠিত ফ্রি-চলমান টিএসসি মানের rdstc হওয়ার rdstc , কারণ তাদের কেবলমাত্র থামানো চক্রের নির্দেশাবলীর জন্য বা "টিএম স্টপলক স্ট্যাটাস" কী আলাদা করা উচিত।

আমি এটি নিম্নলিখিত লুপটি দিয়ে পরীক্ষা করি (পুরো স্ট্যান্ড্যালোন ডেমোটি গিথুবে উপলভ্য ):

for (int i = 0; i < 100; i++) {
    PFC_CNT cnt[7] = {};

    int64_t start = nanos();
    PFCSTART(cnt);
    int64_t tsc =__rdtsc();
    busy_loop(CALIBRATION_LOOPS);
    PFCEND(cnt);
    int64_t tsc_delta   = __rdtsc() - tsc;
    int64_t nanos_delta = nanos() - start;

    printf(CPU_W "d" REF_W ".2f" TSC_W ".2f" MHZ_W ".2f" RAT_W ".6f\n",
            sched_getcpu(),
            1000.0 * cnt[PFC_FIXEDCNT_CPU_CLK_REF_TSC] / nanos_delta,
            1000.0 * tsc_delta / nanos_delta,
            1000.0 * CALIBRATION_LOOPS / nanos_delta,
            1.0 * cnt[PFC_FIXEDCNT_CPU_CLK_REF_TSC]/tsc_delta);
}

সময়যুক্ত অঞ্চলের একমাত্র গুরুত্বপূর্ণ জিনিসটি busy_loop(CALIBRATION_LOOPS); এটি কেবলমাত্র অস্থির স্টোরগুলির একটি টান লুপ, যা gcc দ্বারা সংকলিত এবং clang সাম্প্রতিক হার্ডওয়্যারটিতে পুনরাবৃত্তি প্রতি এক চক্রে সম্পাদন করে:

void busy_loop(uint64_t iters) {
    volatile int sink;
    do {
        sink = 0;
    } while (--iters > 0);
    (void)sink;
}

PFCSTART এবং PFCEND কমান্ডগুলি PFCEND PFCSTART PFCEND কাউন্টারটি libpfc ব্যবহার করে libpfc__rdtsc() একটি অভ্যন্তরীণ যা rdtsc নির্দেশের মাধ্যমে টিএসসি পড়ে। অবশেষে, আমরা nanos() সাথে আসল সময়টি পরিমাপ করি যা সহজ:

int64_t nanos() {
    auto t = std::chrono::high_resolution_clock::now();
    return std::chrono::time_point_cast<std::chrono::nanoseconds>(t).time_since_epoch().count();
}

হ্যাঁ, আমি একটি cpuid ইস্যু করি না, এবং জিনিসগুলি একটি সঠিক উপায়ে ইন্টারলিভ হয় না, তবে ক্রমাঙ্কন লুপটি সম্পূর্ণ দ্বিতীয় তাই এরকম ন্যানোসেকেন্ড-স্কেল ইস্যু কমবেশি বা কম কিছুতেই মিশে যায়।

টার্বোবউস্ট সক্ষম করে, আমার আই 7-6700 এইচকিউ স্কাইলেক সিপিইউতে টিপিকাল রান থেকে প্রথম কয়েকটি ফলাফল এখানে রয়েছে:

CPU# REF_TSC   rdtsc Eff Mhz     Ratio
   0 2392.05 2591.76 2981.30  0.922946
   0 2381.74 2591.79 3032.86  0.918955
   0 2399.12 2591.79 3032.50  0.925660
   0 2385.04 2591.79 3010.58  0.920230
   0 2378.39 2591.79 3010.21  0.917663
   0 2355.84 2591.77 2928.96  0.908970
   0 2364.99 2591.79 2942.32  0.912492
   0 2339.64 2591.77 2935.36  0.902720
   0 2366.43 2591.79 3022.08  0.913049
   0 2401.93 2591.79 3023.52  0.926747
   0 2452.87 2591.78 3070.91  0.946400
   0 2350.06 2591.79 2961.93  0.906733
   0 2340.44 2591.79 2897.58  0.903020
   0 2403.22 2591.79 2944.77  0.927246
   0 2394.10 2591.79 3059.58  0.923723
   0 2359.69 2591.78 2957.79  0.910449
   0 2353.33 2591.79 2916.39  0.907992
   0 2339.58 2591.79 2951.62  0.902690
   0 2395.82 2591.79 3017.59  0.924389
   0 2353.47 2591.79 2937.82  0.908047

এখানে, উপরে বর্ণিত হিসাবে REF_TSC হ'ল স্থির টিএসসি পারফরম্যান্স কাউন্টার, এবং rdtsc rdtsc নির্দেশাবলীর ফলাফল। Eff Mhz হ'ল ব্যবধানের তুলনায় কার্যকর গণনা করা সত্য সিপিইউ ফ্রিকোয়েন্সি এবং বেশিরভাগ কৌতূহলের স্বার্থে এবং কতটা টার্বো লাথি REF_TSC তাত্ক্ষণিক নিশ্চিতকরণ হিসাবে দেখানো হয় REF_TSC অনুপাতটি REF_TSC এবং rdtsc কলামগুলির অনুপাত। আমি এটি 1 এর খুব কাছাকাছি হওয়ার আশা করব, তবে বাস্তবে আমরা দেখতে পাই এটি অনেকগুলি বৈকল্পিকতার সাথে 0.90 থেকে 0.92 এর কাছাকাছি চলেছে (আমি এটি অন্যান্য রানের তুলনায় 0.8 এর চেয়ে কম দেখতে পেয়েছি)।

গ্রাফিক্যালি এটি 2 এর মতো দেখতে লাগে:

rdstc কলটি প্রায় 1 টি সঠিক ফলাফল rdstc , যখন পিএমইউ টিএসসি কাউন্টারটি পুরো জায়গা জুড়ে থাকে, কখনও কখনও প্রায় 2300 মেগাহার্টজ হিসাবে কম থাকে।

আমি যদি টার্বো বন্ধ করে রাখি তবে ফলাফলগুলি আরও বেশি সামঞ্জস্যপূর্ণ:

CPU# REF_TSC   rdtsc Eff Mhz     Ratio
   0 2592.26 2592.25 2588.30  1.000000
   0 2592.26 2592.26 2591.11  1.000000
   0 2592.26 2592.26 2590.40  1.000000
   0 2592.25 2592.25 2590.43  1.000000
   0 2592.26 2592.26 2590.75  1.000000
   0 2592.26 2592.26 2590.05  1.000000
   0 2592.25 2592.25 2590.04  1.000000
   0 2592.24 2592.24 2590.86  1.000000
   0 2592.25 2592.25 2590.35  1.000000
   0 2592.25 2592.25 2591.32  1.000000
   0 2592.25 2592.25 2590.63  1.000000
   0 2592.25 2592.25 2590.87  1.000000
   0 2592.25 2592.25 2590.77  1.000000
   0 2592.25 2592.25 2590.64  1.000000
   0 2592.24 2592.24 2590.30  1.000000
   0 2592.23 2592.23 2589.64  1.000000
   0 2592.23 2592.23 2590.83  1.000000
   0 2592.23 2592.23 2590.49  1.000000
   0 2592.23 2592.23 2590.78  1.000000
   0 2592.23 2592.23 2590.84  1.000000
   0 2592.22 2592.22 2588.80  1.000000

মূলত, অনুপাতটি 1.000000 থেকে 6 দশমিক স্থানে

গ্রাফিকালি (Y অক্ষের স্কেলটি পূর্বের গ্রাফের মতো হতে বাধ্য):

এখন কোডটি কেবল একটি গরম লুপ চলছে, এবং কোনও hlt বা mwait নির্দেশাবলী থাকা উচিত নয়, অবশ্যই এমন কোনও কিছুই নেই যা 10% এরও বেশি mwait বোঝায়। আমি "টিএম স্টপ-ক্লক সাইকেল" কী তা নিশ্চিত করে বলতে পারি না, তবে আমি বাজি ধরতে পারি যে এগুলি "থার্মাল ম্যানেজমেন্ট স্টপ-ক্লক সাইকেল", সিপিইউ সর্বাধিক গতিতে পৌঁছানোর সময় অস্থায়ীভাবে থ্রোট করার জন্য ব্যবহৃত কৌশল। যাইহোক, আমি সংহত থার্মিস্টর রিডিংয়ের দিকে চেয়েছিলাম এবং 90C-100 সি এর নীচে সিপিইউ বিরতি 60C দেখতে পেলাম না যেখানে টার্মাল ম্যানেজমেন্ট কিক করে (আমার মনে হয়)।

কোন ধারনা এটি কি হতে পারে? বিভিন্ন টার্বো ফ্রিকোয়েন্সিগুলির মধ্যে রূপান্তরের জন্য কি "থামানো চক্র" নিহিত রয়েছে? বাক্সটি নিরব না থাকায় এটি অবশ্যই ঘটেছিল এবং অন্যান্য কোর ব্যাকগ্রাউন্ড স্টাফগুলিতে কাজ শুরু করার সাথে সাথে টার্বো ফ্রিকোয়েন্সিটি উপরের দিকে লাফিয়ে উঠছে (সর্বাধিক টার্বো ফ্রিকোয়েন্সি সরাসরি সক্রিয় কোরের সংখ্যার উপর নির্ভর করে: আমার বাক্সে এটি 3.5, যথাক্রমে 1, 2, 3 বা 4 টি কোরের জন্য 3.3, 3.2, 3.1 গিগাহার্জ) active

1 বাস্তবে, কিছু সময়ের জন্য আমি দুটি দশমিক স্থানে সঠিক ফলাফল 2591.97 MHz : 2591.97 MHz - পুনরাবৃত্তির পরে পুনরাবৃত্তি। তারপরে কিছু পরিবর্তন হয়েছে এবং আমি ঠিক নিশ্চিত নই যে rdstc ফলাফলগুলিতে প্রায় 0.1% এর একটি ছোট প্রকরণ আছে। একটি সম্ভাবনা ধীরে ধীরে ক্লক অ্যাডজাস্টমেন্ট, ntpd নির্ধারিত সময়ের সাথে স্থানীয় স্ফটিক প্রাপ্ত সময়কে ইনলাইন আনতে লিনাক্স টাইমিং সাবসিস্টেম দ্বারা তৈরি করা হয়। সম্ভবত, এটি কেবল একটি স্ফটিক ড্রিফ্ট - উপরের শেষ গ্রাফটি প্রতিটি সেকেন্ডে rdtsc পরিমাপের সময়কালে অবিচ্ছিন্ন বৃদ্ধি দেখায়।

2 গ্রাফগুলি পাঠ্যের মানগুলির মতো একই রানগুলির সাথে সামঞ্জস্যপূর্ণ না কারণ প্রতিবার আমি পাঠ্যের আউটপুট ফর্ম্যাটটি পরিবর্তন করে গ্রাফগুলি আপডেট করতে যাচ্ছি না। তবে গুণগত আচরণ প্রতিটি রানেই মূলত একই রকম।


টি এল; ডিআর

RDTSC এবং REFTSC মধ্যে যে RDTSC আপনি পর্যবেক্ষণ RDTSC এবং এটি REFTSC পি-রাষ্ট্রীয় রূপান্তরের কারণে। এই রূপান্তরগুলির সময়, স্থির-কার্যকারিতা কাউন্টার REF_TSC সহ বেশিরভাগ কোর প্রায় 20000-21000 চক্র (8.5us) এর জন্য থামানো হয়, তবে rdtsc তার rdtsc ফ্রিকোয়েন্সি অব্যাহত রাখে। rdtsc সম্ভবত একটি বিচ্ছিন্ন শক্তি এবং ঘড়ির ডোমেনে রয়েছে কারণ এটি অত্যন্ত গুরুত্বপূর্ণ এবং এর নথিভুক্ত প্রাচীরের ঘড়ির মতো আচরণের কারণে।

RDTSC-REFTSC

এই তাত্পর্যটি REFTSC কে RDTSC কে অতিরিক্ত REFTSC করার প্রবণতা হিসাবে প্রকাশ করে। RDTSC-REFTSC যত বেশি প্রোগ্রাম চলবে RDTSC-REFTSC ইতিবাচক। খুব দীর্ঘ প্রসারিত জুড়ে এটি 1% -2% বা আরও উচ্চতর হিসাবে উচ্চতর মাউন্ট করতে পারে।

অবশ্যই, এটি ইতিমধ্যে আপনার দ্বারা পর্যবেক্ষণ করা হয়েছে যে টার্বো বুস্ট অক্ষম করা হলে অতিরিক্ত গণনা অদৃশ্য হয়ে যায়, যা intel_pstate ব্যবহার করার সময় নিম্নলিখিত হিসাবে করা যেতে পারে:

echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo

তবে এটি আমাদের নিশ্চিত করে জানায় না যে এই তাত্ক্ষেত্রের জন্য টার্বো বুস্টের দোষ রয়েছে; এটি হতে পারে যে টার্বোবউস্ট দ্বারা সক্রিয় উচ্চতর পি-স্টেটগুলি উপলব্ধ হেডরুমটি খায়, ফলে থার্মাল থ্রোটলিং এবং স্টলগুলি ঘটে।

সম্ভাব্য থ্রোটলিং?

অপারেটিং খামে (তাপীয় বা বৈদ্যুতিক) হেডরুমের সুবিধাবাদীভাবে সুবিধা গ্রহণের জন্য টার্বোবস্ট একটি গতিশীল ফ্রিকোয়েন্সি এবং ভোল্টেজ স্কেলিং সমাধান। সম্ভব হলে, টার্বোবউস্ট তাদের নামমাত্র মান ছাড়িয়ে প্রসেসরের মূল ফ্রিকোয়েন্সি এবং ভোল্টেজকে স্কেল করবে, এইভাবে উচ্চ বিদ্যুত খরচ ব্যয় করে কর্মক্ষমতা উন্নত করবে।

উচ্চতর বিদ্যুত ব্যবহার অবশ্যই কোরের তাপমাত্রা এবং বিদ্যুত ব্যবহার বাড়ায়। অবশেষে, কিছু সীমাবদ্ধতা আঘাত হানে, এবং টার্বো বুস্টকে পারফরম্যান্স ক্র্যাঙ্ক করতে হবে।

টিএম 1 থার্মাল থ্রোটলিং?

থার্মাল মনিটর 1 (টিএম 1) বা 2 (টিএম 2) এর থার্মাল কন্ট্রোল সার্কিটরি (টিসিসি) থার্মাল থ্রোটলিংয়ের কারণ ছিল কিনা তা তদন্ত করে আমি শুরু করেছিলাম। টিএম 1 টিএম স্টপ-ক্লক চক্র সন্নিবেশ করে বিদ্যুৎ খরচ হ্রাস করে এবং এগুলি REFTSC থামার পথে ডকুমেন্টেড শর্তগুলির মধ্যে একটি। অন্যদিকে, টিএম 2 ঘড়ির গেট দেয় না; এটি কেবল ফ্রিকোয়েন্সিটিকে স্কেল করে।

আমাকে নির্বাচিত IA32_PACKAGE_THERM_STATUS বিশেষত IA32_PACKAGE_THERM_STATUS এবং IA32_THERM_STATUS IA32_PACKAGE_THERM_STATUS পড়তে সক্ষম করতে আমি libpfc পরিবর্তন libpfc । উভয়টিতে বিভিন্ন তাপীয় অবস্থার জন্য একটি পঠন-পঠন স্থিতি এবং একটি পঠন-লিখন, হার্ডওয়্যার-স্টিকি লগ পতাকা রয়েছে:

( IA32_PACKAGE_THERM_STATUS যথেষ্ট পরিমাণে একই)

এর মধ্যে কিছু বিট উপলক্ষে সেট করা অবস্থায় ছিল (বিশেষত যখন ল্যাপটপ এয়ার ভেন্টগুলি ব্লক করার সময়!), তারা RDTSC ওভারকাউন্টিংয়ের সাথে সম্পর্কযুক্ত বলে মনে হয় নি, যা তাপীয় অবস্থান নির্বিশেষে নির্ভরযোগ্যভাবে ঘটবে।

হার্ডওয়্যার ডিউটি ​​সাইকেলিং? সি-স্টেট রেসিডেন্সি?

স্টপ-ক্লক-এর মতো হার্ডওয়ারের জন্য এসডিএমের অন্য কোথাও খনন করলাম আমি এইচডিসি (হার্ডওয়্যার ডিউটি ​​সাইকেল) এর উপরে ঘটলাম, এমন একটি প্রক্রিয়া যার মাধ্যমে ওএস নিজেই সিপিইউকে কেবলমাত্র সময়ের একটি নির্দিষ্ট অনুপাত পরিচালনা করতে অনুরোধ করতে পারে; এইচডিসি হার্ডওয়্যার এটিকে 16-ঘড়ির সময়কালে 1-15 ঘড়ি চক্রের জন্য প্রসেসর চালিয়ে এবং সেই সময়ের বাকি 15-1 ক্লক চক্রের জন্য জোর করে আইডল করে এটি প্রয়োগ করে।

এইচডিসি খুব দরকারী রেজিস্টারগুলি সরবরাহ করে, বিশেষত এমএসআরগুলি:

  • IA32_THREAD_STALL : এই লজিকাল প্রসেসরের জোর করে IA32_THREAD_STALL কারণে স্থির হওয়া চক্রের সংখ্যা গণনা করে।
  • MSR_CORE_HDC_RESIDENCY : উপরের মতো একই তবে শারীরিক প্রসেসরের ক্ষেত্রে, যখন এই কোরের এক বা একাধিক লজিকাল প্রসেসর জোর করে- MSR_CORE_HDC_RESIDENCY হয় তখন চক্রকে গণনা করে।
  • MSR_PKG_HDC_SHALLOW_RESIDENCY : প্যাকেজটি সি 2 অবস্থায় ছিল এবং অন্তত একটি লজিকাল প্রসেসর বলপূর্বক নিষ্ক্রিয় ছিল cy
  • MSR_PKG_HDC_DEEP_RESIDENCY : প্যাকেজটি আরও গভীর ছিল (যা অবিকল কনফিগারযোগ্য) সি-স্টেটে গণনা করে এবং কমপক্ষে একটি লজিকাল প্রসেসর বলপূর্বক নিষ্ক্রিয় ছিল।

আরও তথ্যের জন্য ইন্টেল এসডিএম ভলিউম 3, অধ্যায় 14, 14.5.1 হার্ডওয়্যার ডিউটি ​​সাইক্লিং প্রোগ্রামিং ইন্টারফেস দেখুন

তবে আমার আই -4--47০০ এমকিউ ২.৪ গিগাহার্টজ সিপিইউ এইচডিসিকে সমর্থন করে না এবং তাই এটি এইচডিসির পক্ষেও ছিল।

থ্রোটলিংয়ের অন্যান্য উত্স?

ইন্টেল এসডিএম-তে আরও কিছু খনন করে আমি একটি খুব, খুব সরস এমএসআর MSR_CORE_PERF_LIMIT_REASONS : MSR_CORE_PERF_LIMIT_REASONS । এই রেজিস্টারটি খুব দরকারী স্ট্যাটাস এবং স্টিকি লগ বিটগুলির একটি বিশাল সংখ্যার প্রতিবেদন করে:

690H MSR_CORE_PERF_LIMIT_REASONS - প্যাকেজ - প্রসেসরের কোরগুলিতে ফ্রিকোয়েন্সি ক্লিপিংয়ের সূচক

  • বিট 0 : PROCHOT স্থিতি
  • বিট 1 : তাপীয় স্থিতি
  • বিট 4 : গ্রাফিক্স ড্রাইভারের স্থিতি । সেট করা থাকলে, প্রসেসর গ্রাফিক্স ড্রাইভার ওভাররাইডের কারণে অপারেটিং সিস্টেমের অনুরোধের নীচে ফ্রিকোয়েন্সি হ্রাস করা হয়।
  • বিট 5 : স্বায়ত্তশাসিত ব্যবহার-ভিত্তিক ফ্রিকোয়েন্সি নিয়ন্ত্রণের স্থিতি । সেট করা থাকলে, অপারেটিং সিস্টেমের অনুরোধের নীচে ফ্রিকোয়েন্সি হ্রাস করা হয় কারণ প্রসেসর সনাক্ত করেছে যে ব্যবহার কম।
  • বিট 6 : ভোল্টেজ নিয়ন্ত্রক তাপীয় সতর্কতা স্থিতি । সেট করা থাকলে, ভোল্টেজ নিয়ন্ত্রকের কাছ থেকে তাপের সতর্কতার কারণে অপারেটিং সিস্টেমের অনুরোধের নীচে ফ্রিকোয়েন্সি হ্রাস করা হয়।
  • বিট 8 : বৈদ্যুতিক ডিজাইন পয়েন্টের স্থিতি । যখন সেট করা হয়, বৈদ্যুতিক ডিজাইনের পয়েন্ট সীমাবদ্ধতার কারণে অপারেটিং সিস্টেমের অনুরোধের নীচে ফ্রিকোয়েন্সি হ্রাস করা হয় (যেমন সর্বোচ্চ বৈদ্যুতিক বর্তমান খরচ) consumption
  • বিট 9 : কোর পাওয়ার সীমাবদ্ধতার স্থিতি । সেট করা থাকলে, ডোমেন-স্তরের পাওয়ার সীমাবদ্ধতার কারণে অপারেটিং সিস্টেমের অনুরোধের নীচে ফ্রিকোয়েন্সি হ্রাস হয়।
  • বিট 10 : প্যাকেজ-স্তরের পাওয়ার সীমিত করছে PL1 স্থিতি । সেট করা থাকলে, প্যাকেজ-স্তরের পাওয়ার সীমিত করার কারণে অপারেটিং সিস্টেমের অনুরোধের নীচে ফ্রিকোয়েন্সি হ্রাস হয় PL
  • বিট 11 : প্যাকেজ-স্তরের পাওয়ার সীমিত করছে PL2 স্থিতি । সেট করা থাকলে, প্যাকেজ-স্তরের পাওয়ার সীমিত করার কারণে অপারেটিং সিস্টেমের অনুরোধের নীচে ফ্রিকোয়েন্সি হ্রাস হয়।
  • বিট 12 : সর্বোচ্চ টার্বো সীমা স্থিতি । সেট করা থাকলে, বহু-কোর টার্বো সীমাবদ্ধতার কারণে অপারেটিং সিস্টেমের অনুরোধের নীচে ফ্রিকোয়েন্সি হ্রাস হয়।
  • বিট 13 : টার্বো ট্রানজিশন অ্যাটেনুয়েশন স্থিতি । সেট করা থাকলে, টার্বো ট্রানজিশন অ্যাটেনগুয়েশনের কারণে অপারেটিং সিস্টেমের অনুরোধের নীচে ফ্রিকোয়েন্সি হ্রাস করা হয়। ঘন ঘন অপারেটিং রেশিও পরিবর্তনের কারণে এটি কর্মক্ষমতা হ্রাস রোধ করে।
  • বিট 16 : প্রোচোট লগ
  • বিট 17 : তাপীয় লগ
  • বিট 20 : গ্রাফিক্স ড্রাইভার লগ
  • বিট 21 : স্বায়ত্তশাসিত ব্যবহার ভিত্তিক ফ্রিকোয়েন্সি নিয়ন্ত্রণ লগ
  • বিট 22 : ভোল্টেজ নিয়ন্ত্রক তাপীয় সতর্কতা লগ
  • বিট 24 : বৈদ্যুতিক ডিজাইন পয়েন্ট লগ
  • বিট 25 : কোর পাওয়ার সীমাবদ্ধ লগ
  • বিট 26 : প্যাকেজ-স্তরের পাওয়ার সীমাবদ্ধ PL1 লগ
  • বিট 27 : প্যাকেজ-স্তরের পাওয়ার সীমাবদ্ধ করছে PL2 লগ
  • বিট 28 : সর্বাধিক টার্বো সীমাবদ্ধ লগ
  • বিট 29 : টার্বো ট্রানজিশন অ্যাটেনুয়েশন লগ

pfc.ko এখন এই এমএসআর সমর্থন করে এবং একটি demo প্রিন্ট করে যে এর মধ্যে কোন লগ বিট সক্রিয় রয়েছে। pfc.ko ড্রাইভার প্রতিটি পঠনের উপর স্টিকি বিট সাফ করে।

বিটগুলি প্রিন্ট করার সময় আমি আপনার পরীক্ষাগুলি পুনরায় পুনরায় পাঠ করি এবং আমার সিপিইউ খুব ভারী লোড (সমস্ত 4 টি কোরি / 8 টি থ্রেড সক্রিয়) এর অধীনে বৈদ্যুতিন ডিজাইন পয়েন্ট এবং কোর পাওয়ার সীমাবদ্ধকরণ সহ কয়েকটি সীমাবদ্ধ কারণগুলি প্রতিবেদন করি। আমার অজানা কারণে প্যাকেজ-স্তরের পিএল 2 এবং সর্বোচ্চ টার্বো সীমা বিটগুলি সর্বদা আমার সিপিইউতে সেট করা হয়। আমি অনুষ্ঠানেও টার্বো ট্রানজিশন অ্যাটেনুয়েশন দেখেছি।

যদিও এই বিটগুলির RDTSC-REFTSC বিভেদ উপস্থিতির সাথে একেবারে সম্পর্কিত নয়, শেষ বিটটি আমাকে চিন্তার জন্য খাবার দিয়েছে। টার্বো ট্রানজিশন অ্যাটেনুয়েশনের একমাত্র অস্তিত্বই বোঝায় যে পি-স্টেটস স্যুইচিংয়ের যথেষ্ট পরিমাণে ব্যয় হয় যে এটি কিছু হিস্টেরিসিস পদ্ধতির সাথে রেট-সীমাবদ্ধ থাকতে হবে। যখন আমি এই রূপান্তরগুলি গণনা করে এমন RDTSC-REFTSC পেল না, তখন আমি পরবর্তী সেরা কাজটি করার সিদ্ধান্ত নিয়েছি - আমি RDTSC-REFTSC রূপান্তরটির কার্যকারিতাটির বৈশিষ্ট্যগুলি চিহ্নিত করতে RDTSC-REFTSC ওভারকাউন্টের মাত্রাটি ব্যবহার করব।

পরীক্ষা

পরীক্ষার সেটআপটি নিম্নরূপ। আমার আই -4--47০০ এমকিউ সিপিইউতে, নামমাত্র গতি ২.৪ গিগাহার্টজ এবং সর্বোচ্চ টার্বো গতি ৩.৪ গিগাহার্টজ, আমি 0 (বুট প্রসেসর) এবং 3 (কোনও সুবিধাজনক ভুক্তভোগী কোর 0 নম্বরযুক্ত নয় এবং 0 এর লজিকাল ভাইবাল নয়) ব্যতীত সমস্ত কোর অফলাইন করব। এরপরে আমরা intel_pstate ড্রাইভারকে আমাদের 98% এর চেয়ে কম এবং 100% এর চেয়ে বেশি প্যাকেজ কার্য সম্পাদন করতে intel_pstate ; এটি প্রসেসরটিকে দ্বিতীয় সর্বোচ্চ এবং সর্বোচ্চ পি-স্টেটস (3.3 গিগাহার্টজ এবং 3.4 গিগাহার্টজ) এর মধ্যে দোলনে আবদ্ধ করে। আমি নিম্নলিখিত হিসাবে এটি করি:

echo   0 > /sys/devices/system/cpu/cpu1/online
echo   0 > /sys/devices/system/cpu/cpu2/online
echo   0 > /sys/devices/system/cpu/cpu4/online
echo   0 > /sys/devices/system/cpu/cpu5/online
echo   0 > /sys/devices/system/cpu/cpu6/online
echo   0 > /sys/devices/system/cpu/cpu7/online
echo  98 > /sys/devices/system/cpu/intel_pstate/min_perf_pct
echo 100 > /sys/devices/system/cpu/intel_pstate/max_perf_pct

আমি এখানে 10000 নমুনার জন্য demo অ্যাপ্লিকেশন চালিয়েছি

1000,     1500,     2500,     4000,     6300,
10000,    15000,    25000,    40000,    63000,
100000,   150000,   250000,   400000,   630000,
1000000,  1500000,  2500000,  4000000,  6300000,
10000000, 15000000, 25000000, 40000000, 63000000

নামমাত্র সিপিইউ ফ্রিকোয়েন্সি এ add_calibration() দ্বারা add_calibration() ) এর আসল আর্গুমেন্ট পেতে উপরের সংখ্যাগুলি ২.৪ দিয়ে গুণ করুন।

ফলাফল

এটি এর মতো দেখতে লগগুলি তৈরি করে (250000 ন্যানোর ক্ষেত্রে):

CPU 0, measured CLK_REF_TSC MHz        :          2392.56
CPU 0, measured rdtsc MHz              :          2392.46
CPU 0, measured add   MHz              :          3286.30
CPU 0, measured XREF_CLK  time (s)     :       0.00018200
CPU 0, measured delta     time (s)     :       0.00018258
CPU 0, measured tsc_delta time (s)     :       0.00018200
CPU 0, ratio ref_tsc :ref_xclk         :      24.00131868
CPU 0, ratio ref_core:ref_xclk         :      33.00071429
CPU 0, ratio rdtsc   :ref_xclk         :      24.00032967
CPU 0, core CLK cycles in OS           :                0
CPU 0, User-OS transitions             :                0
CPU 0, rdtsc-reftsc overcount          :              -18
CPU 0, MSR_IA32_PACKAGE_THERM_STATUS   : 000000008819080a
CPU 0, MSR_IA32_PACKAGE_THERM_INTERRUPT: 0000000000000003
CPU 0, MSR_CORE_PERF_LIMIT_REASONS     : 0000000018001000
        PROCHOT
        Thermal
        Graphics Driver
        Autonomous Utilization-Based Frequency Control
        Voltage Regulator Thermal Alert
        Electrical Design Point (e.g. Current)
        Core Power Limiting
        Package-Level PL1 Power Limiting
      * Package-Level PL2 Power Limiting
      * Max Turbo Limit (Multi-Core Turbo)
        Turbo Transition Attenuation
CPU 0, measured CLK_REF_TSC MHz        :          2392.63
CPU 0, measured rdtsc MHz              :          2392.62
CPU 0, measured add   MHz              :          3288.03
CPU 0, measured XREF_CLK  time (s)     :       0.00018192
CPU 0, measured delta     time (s)     :       0.00018248
CPU 0, measured tsc_delta time (s)     :       0.00018192
CPU 0, ratio ref_tsc :ref_xclk         :      24.00000000
CPU 0, ratio ref_core:ref_xclk         :      32.99983509
CPU 0, ratio rdtsc   :ref_xclk         :      23.99989006
CPU 0, core CLK cycles in OS           :                0
CPU 0, User-OS transitions             :                0
CPU 0, rdtsc-reftsc overcount          :               -2
CPU 0, MSR_IA32_PACKAGE_THERM_STATUS   : 000000008819080a
CPU 0, MSR_IA32_PACKAGE_THERM_INTERRUPT: 0000000000000003
CPU 0, MSR_CORE_PERF_LIMIT_REASONS     : 0000000018001000
        PROCHOT
        Thermal
        Graphics Driver
        Autonomous Utilization-Based Frequency Control
        Voltage Regulator Thermal Alert
        Electrical Design Point (e.g. Current)
        Core Power Limiting
        Package-Level PL1 Power Limiting
      * Package-Level PL2 Power Limiting
      * Max Turbo Limit (Multi-Core Turbo)
        Turbo Transition Attenuation
CPU 0, measured CLK_REF_TSC MHz        :          2284.69
CPU 0, measured rdtsc MHz              :          2392.63
CPU 0, measured add   MHz              :          3151.99
CPU 0, measured XREF_CLK  time (s)     :       0.00018121
CPU 0, measured delta     time (s)     :       0.00019036
CPU 0, measured tsc_delta time (s)     :       0.00018977
CPU 0, ratio ref_tsc :ref_xclk         :      24.00000000
CPU 0, ratio ref_core:ref_xclk         :      33.38540919
CPU 0, ratio rdtsc   :ref_xclk         :      25.13393301
CPU 0, core CLK cycles in OS           :                0
CPU 0, User-OS transitions             :                0
CPU 0, rdtsc-reftsc overcount          :            20548
CPU 0, MSR_IA32_PACKAGE_THERM_STATUS   : 000000008819080a
CPU 0, MSR_IA32_PACKAGE_THERM_INTERRUPT: 0000000000000003
CPU 0, MSR_CORE_PERF_LIMIT_REASONS     : 0000000018000000
        PROCHOT
        Thermal
        Graphics Driver
        Autonomous Utilization-Based Frequency Control
        Voltage Regulator Thermal Alert
        Electrical Design Point (e.g. Current)
        Core Power Limiting
        Package-Level PL1 Power Limiting
      * Package-Level PL2 Power Limiting
      * Max Turbo Limit (Multi-Core Turbo)
        Turbo Transition Attenuation
CPU 0, measured CLK_REF_TSC MHz        :          2392.46
CPU 0, measured rdtsc MHz              :          2392.45
CPU 0, measured add   MHz              :          3287.80
CPU 0, measured XREF_CLK  time (s)     :       0.00018192
CPU 0, measured delta     time (s)     :       0.00018249
CPU 0, measured tsc_delta time (s)     :       0.00018192
CPU 0, ratio ref_tsc :ref_xclk         :      24.00000000
CPU 0, ratio ref_core:ref_xclk         :      32.99978012
CPU 0, ratio rdtsc   :ref_xclk         :      23.99989006
CPU 0, core CLK cycles in OS           :                0
CPU 0, User-OS transitions             :                0
CPU 0, rdtsc-reftsc overcount          :               -2
CPU 0, MSR_IA32_PACKAGE_THERM_STATUS   : 000000008819080a
CPU 0, MSR_IA32_PACKAGE_THERM_INTERRUPT: 0000000000000003
CPU 0, MSR_CORE_PERF_LIMIT_REASONS     : 0000000018001000
        PROCHOT
        Thermal
        Graphics Driver
        Autonomous Utilization-Based Frequency Control
        Voltage Regulator Thermal Alert
        Electrical Design Point (e.g. Current)
        Core Power Limiting
        Package-Level PL1 Power Limiting
      * Package-Level PL2 Power Limiting
      * Max Turbo Limit (Multi-Core Turbo)
        Turbo Transition Attenuation

লগগুলি সম্পর্কে আমি বেশ কয়েকটি পর্যবেক্ষণ করেছি, তবে একটি দাঁড়িয়েছিল:

ন্যানোস <~ 250000 এর জন্য, নগদ আরডিটিএসসি ওভারকাউন্টিং নেই। ন্যানোস> ~ 250000 এর জন্য, কেউ কেবল 20000 এর বেশি ঘড়ির চক্রের ওভারকাউন্টিং ক্লক চক্রের কোয়ান্টাকে বিশ্বস্তভাবে পর্যবেক্ষণ করতে পারে। তবে সেগুলি ব্যবহারকারী-ওএস রূপান্তরগুলির কারণে নয়

এখানে একটি ভিজ্যুয়াল প্লট দেওয়া হয়েছে:

স্যাচুরেটেড ব্লু ডটস: 0 স্ট্যান্ডার্ড বিচ্যুতি (প্রায় কাছাকাছি)

স্যাচুরেটেড লাল বিন্দু: +3 স্ট্যান্ডার্ড বিচ্যুতি (উপরে গড়)

স্যাচুরেটেড গ্রিন ডটস: -৩ স্ট্যান্ডার্ড বিচ্যুতি (নীচে গড়)

টেকসই হ্রাসের প্রায় 250000 ন্যানো সেকেন্ডের আগে এবং তার পরে এবং এর পরেও একটি স্পষ্ট পার্থক্য রয়েছে।

ন্যানোস <250000

প্রান্তিকের আগে, সিএসভি লগগুলি এর মতো দেখায়:

24.00,33.00,24.00,-14,0,0
24.00,33.00,24.00,-20,0,0
24.00,33.00,24.00,-4,3639,1
24.00,33.00,24.00,-20,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,-14,0,0
24.00,33.00,24.00,-14,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,-44,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,-14,0,0
24.00,33.00,24.00,-20,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,-20,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,12,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,10,0,0
24.00,33.00,24.00,-20,0,0
24.00,33.00,24.00,32,3171,1
24.00,33.00,24.00,-20,0,0
24.00,33.00,24.00,10,0,0

একটি টার্বোবুস্ট অনুপাত 33x এ পুরোপুরি স্থিতিশীল, একটি RDTSC যা RDTSC সাথে REFTSC গণনা করা হয় REF_XCLK (100 মেগাহার্টজ), नगনযোগ্য ওভারকাউন্টিংয়ের হার, সাধারণত 0 টি চক্র কার্নেলে ব্যয় করা হয় এবং এভাবে কার্নেলের 0 টি রূপান্তর হয়। কার্নেল বাধা পরিষেবাগুলিতে প্রায় 3000 রেফারেন্স চক্র নেয়।

ন্যানোস == 250000

সমালোচনামূলক দোরগোড়ায়, লগে 20000 চক্রের ওভারকাউন্টগুলির ক্লাম্প থাকে এবং ওভারকাউন্টগুলি 33x এবং 34x এর মধ্যে অ-পূর্ণসংখ্যার অনুমানযুক্ত গুণক মানগুলির সাথে খুব ভালভাবে সম্পর্কিত হয়:

24.00,33.00,24.00,-2,0,0
24.00,33.00,24.00,-2,0,0
24.00,33.00,24.00,2,0,0
24.00,33.00,24.00,22,0,0
24.00,33.00,24.00,-2,0,0
24.00,33.00,24.00,-2,0,0
24.00,33.00,24.00,-2,0,0
24.00,33.05,25.11,20396,0,0
24.00,33.38,25.12,20212,0,0
24.00,33.39,25.12,20308,0,0
24.00,33.42,25.12,20296,0,0
24.00,33.43,25.11,20158,0,0
24.00,33.43,25.11,20178,0,0
24.00,33.00,24.00,-4,0,0
24.00,33.00,24.00,20,3920,1
24.00,33.00,24.00,-2,0,0
24.00,33.00,24.00,-4,0,0
24.00,33.44,25.13,20396,0,0
24.00,33.46,25.11,20156,0,0
24.00,33.46,25.12,20268,0,0
24.00,33.41,25.12,20322,0,0
24.00,33.40,25.11,20216,0,0
24.00,33.46,25.12,20168,0,0
24.00,33.00,24.00,-2,0,0
24.00,33.00,24.00,-2,0,0
24.00,33.00,24.00,-2,0,0
24.00,33.00,24.00,22,0,0

ন্যানোস> 250000

3.3 গিগাহার্টজ থেকে 3.4 গিগাহার্জ-এর টার্বোবূস্ট এখন নির্ভরযোগ্যভাবে ঘটে। ন্যানোগুলি বাড়ার সাথে সাথে লগগুলি 20000-চক্রের কোয়ান্টায় মোটামুটি পূর্ণসংখ্যার গুণে পূর্ণ হয়। অবশেষে এমন অনেক ন্যানো রয়েছে যে লিনাক্সের শিডিয়ুলার বিঘ্নগুলি স্থায়ী ফিক্সচারে পরিণত হয়, তবে পারফরম্যান্স কাউন্টারগুলির সাহায্যে সহজেই সনাক্ত করা যায়, এবং এর প্রভাবটি টার্বোবস্টের থামগুলির সাথে মোটেই সাদৃশ্যপূর্ণ নয়।

24.00,33.75,24.45,20166,0,0
24.00,33.78,24.45,20302,0,0
24.00,33.78,24.45,20202,0,0
24.00,33.68,24.91,41082,0,0
24.00,33.31,24.90,40998,0,0
24.00,33.70,25.30,58986,3668,1
24.00,33.74,24.42,18798,0,0
24.00,33.74,24.45,20172,0,0
24.00,33.77,24.45,20156,0,0
24.00,33.78,24.45,20258,0,0
24.00,33.78,24.45,20240,0,0
24.00,33.77,24.42,18826,0,0
24.00,33.75,24.45,20372,0,0
24.00,33.76,24.42,18798,4081,1
24.00,33.74,24.41,18460,0,0
24.00,33.75,24.45,20234,0,0
24.00,33.77,24.45,20284,0,0
24.00,33.78,24.45,20150,0,0
24.00,33.78,24.45,20314,0,0
24.00,33.78,24.42,18766,0,0
24.00,33.71,25.36,61608,0,0
24.00,33.76,24.45,20336,0,0
24.00,33.78,24.45,20234,0,0
24.00,33.78,24.45,20210,0,0
24.00,33.78,24.45,20210,0,0
24.00,33.00,24.00,-10,0,0
24.00,33.00,24.00,4,0,0
24.00,33.00,24.00,18,0,0
24.00,33.00,24.00,2,4132,1
24.00,33.00,24.00,44,0,0

উপসংহার

RDTSC-REFTSC জন্য RDTSC-REFTSC । এই তাত্পর্যটি এটি নির্ধারণ করতে ব্যবহার করা যেতে পারে যে 3.3 গিগাহার্জ থেকে 3.4 গিগাহার্জ-এ টার্বোবউস্টের রাষ্ট্রের রূপান্তরটি প্রায় 20500 রেফারেন্স ক্লক চক্র (8.5us) লাগে, এবং অ্যাড_রেফারেন্সে প্রবেশের পরে প্রায় 250000 এনএস (250us; 600000 রেফারেন্স ক্লক চক্র) এর পরে আর add_reference() হয় না add_reference() , যখন প্রসেসর সিদ্ধান্ত নেয় যে ফ্রিকোয়েন্সি-ভোল্টেজ স্কেলিংয়ের প্রাপ্য কাজের চাপ যথেষ্ট তীব্র।

ভবিষ্যতে কাজ

কীভাবে সংক্রমণের ব্যয় ফ্রিকোয়েন্সি সহ পরিবর্তিত হয় এবং পাওয়ার স্টেট নির্বাচন করা হার্ডওয়্যারটি সুর করা যায় কিনা তা নির্ধারণ করতে আরও গবেষণা করা দরকার needs আমার কাছে বিশেষ আগ্রহের বিষয় হ'ল "টার্বো অ্যাটেন্যুয়েশন ইউনিট", যে ইঙ্গিতগুলি আমি ওয়েবের প্রত্যন্ত অঞ্চলে দেখেছি। সম্ভবত টার্বো হার্ডওয়্যারটির একটি কনফিগারযোগ্য টাইম উইন্ডো রয়েছে? বর্তমানে স্থানান্তরের সময় ব্যয় করার সময় সময় ব্যয়ের অনুপাত 30: 1 (600us: 20us) us এটি সুর করা যাবে?





rdtsc