একটি প্রোগ্রাম ধীরে ধীরে চালানো করুন


102

লিনাক্সে কোনও ওএস পরামিতি পরিবর্তন করে ধীরে ধীরে কোনও সি ++ প্রোগ্রাম চালানোর কোনও উপায় আছে কি? এইভাবে আমি অনুকরণ করতে চাই যে যদি সেই নির্দিষ্ট প্রোগ্রামটি সত্যিকারের ধীর মেশিনে চালিত হয় তবে কী হবে।

অন্য কথায়, একটি দ্রুত মেশিনের সেই নির্দিষ্ট প্রোগ্রামের জন্য ধীর মেশিন হিসাবে আচরণ করা উচিত।


5
আপনি এটিকে সত্যিকার অর্থেই কম অগ্রাধিকার দেওয়ার জন্য 'দুর্দান্ত' ব্যবহার করতে পারেন - কোনও নির্দিষ্ট বিষয় নয়, তবে সাহায্য করতে পারেন!
3136

7
প্রসেসরের স্পিন করে এমন কোনও প্রোগ্রামের সাথে এটি একটি ভিএম এর ভিতরে চালান।
17:30

12
niceএকটি কমান্ড যা তফসিলের অগ্রাধিকার হ্রাস করে। পৃথক, অপেক্ষাকৃত অপরিশোধিত। আপনি নির্ধারিত অগ্রাধিকারগুলির দিকে নজর রাখতে পারেন, তবে মেশিনটি যদি অন্য কোনও কাজে ব্যস্ত না হয় তবে আপনার প্রোগ্রামটি এখনও দ্রুত চলবে। সুতরাং, এটি সম্ভবত যথেষ্ট সাহায্য করবে না।
জোনাথন লেফলার

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

23
"টার্বো" বোতামটি চাপুন!
সফটডেভ

উত্তর:


145
  • nice(এবং / অথবা renice) ব্যবহার করে অগ্রাধিকারটি কম করুন । nice()সিস্টেম কল ব্যবহার করে আপনি এটি প্রোগ্রামগতভাবেও করতে পারেন । এটি প্রতি সেমি কার্যকর করার গতি কমিয়ে দেবে না, তবে লিনাক্স শিডিয়ুলারকে কম (এবং সম্ভবত আরও সংক্ষিপ্ততর) এক্সিকিউশন সময় ফ্রেম বরাদ্দ করবে, প্রায়শই প্রায়শই প্রারম্ভিক করা হবে ইত্যাদি। সময়সূচী সম্পর্কে আরও তথ্যের জন্য লিনাক্স কার্নেল বোঝার প্রক্রিয়া নির্ধারণ (অধ্যায় 10) দেখুন ।
  • কার্নেলের উপর বেশি বোঝা চাপানোর জন্য আপনি টাইমার বিঘ্নিত ফ্রিকোয়েন্সি বাড়াতে চাইতে পারেন , যার ফলে সবকিছু ধীরে ধীরে কমবে। এর জন্য একটি কার্নেল পুনর্নির্মাণের প্রয়োজন।
  • আপনি সিপিইউ ফ্রিকোয়েন্সি স্কেলিং প্রক্রিয়াটি ব্যবহার করতে পারেন (কার্নেল মডিউল প্রয়োজন) এবং cpufreq-setকমান্ডটি ব্যবহার করে সিপিইউ নিয়ন্ত্রণ করতে (ধীর গতিতে, গতি বাড়িয়ে তুলতে) ।
  • আর একটি সম্ভাবনা হ'ল কল করা sched_yield(), যা আপনার প্রোগ্রামের সমালোচনামূলক অংশে (কোড পরিবর্তনের প্রয়োজন হয়) অন্যান্য প্রসেসের পরিমাণ অর্জন করে।
  • তোমার মত সাধারণ ফাংশন হুক করতে পারেন malloc(), free(), clock_gettime()ব্যবহার ইত্যাদি LD_PRELOAD , এবং কয়েক লাখ CPU- র চক্র বার্ন মত কিছু নিরীহ উপাদান কি rep; hop;মেমরির বাধা ইত্যাদি এই নিচে নিশ্চিত জন্য প্রোগ্রাম মন্থর করে দেবে সন্নিবেশ। ( এই জিনিসগুলির কিছু কীভাবে করা যায় তার উদাহরণের জন্য এই উত্তরটি দেখুন )।
  • @ বিলে উল্লিখিত হিসাবে আপনি সর্বদা ভার্চুয়ালাইজেশন সফ্টওয়্যারটিতে লিনাক্স চালাতে পারেন যা আপনাকে বরাদ্দকৃত সিপিইউ সংস্থান, মেমরি ইত্যাদির পরিমাণ সীমিত করতে দেয় allows
  • আপনি যদি সত্যিই আপনার প্রোগ্রামটি ধীর হতে চান তবে ভালগ্রাইন্ডের অধীনে এটি চালান (আপনার অ্যাপ্লিকেশনে কিছু সমস্যা যেমন মেমরি ফাঁস, খারাপ মেমোরি রেফারেন্স ইত্যাদিতে আপনাকে সহায়তা করতে পারে)।
  • অক্ষম অপ্টিমাইজেশানগুলির সাথে আপনার বাইনারিটি পুনরায় সংশোধন করে কিছু অলসতা অর্জন করা যেতে পারে (উদাহরণস্বরূপ -O0এবং দৃser়তাগুলি সক্ষম করুন (ie -DDEBUG)।
  • আপনি সর্বদা একটি পুরানো পিসি বা একটি সস্তা নেটবুক কিনতে পারেন (যেমন প্রতি শিশু হিসাবে ওয়ান ল্যাপটপ , এবং একবার পরীক্ষা করার পরে কোনও সন্তানের কাছে এটি দান করতে ভুলবেন না) এবং ধীর সিপিইউ দিয়ে আপনার প্রোগ্রামটি চালাতে পারেন।

আশা করি এটা সাহায্য করবে.


15
+1: পরামর্শের বিবিধ সেট, প্রত্যেকের বুনিয়াদি প্রয়োজনীয়তা সহ
lxop

4
ডিবাগিং প্রতীকগুলি সক্ষম করা ( -ggdb3) বাইনারি কার্যকর করা ধীর করে না । এটি কেবল এটিকে আরও বড় করে তোলে।
ক্যাফে

11
+1 এর জন্য, "... একটি পুরাতন পিসি বা একটি সস্তা নেটবুক কিনুন ... এবং একবার পরীক্ষা করার পরে কোনও সন্তানের কাছে এটি দান করতে ভুলবেন না"
ক্রিস

3
কীভাবে আপনি 'উত্তর' ধীরের বিভিন্ন ধরণের অনুকরণ করবেন তা দেখানোর জন্য আপনার উত্তরটি সম্পাদনা করতে পারেন? ধীর আই / ও, ধীর সিপিইউ, স্লো মেমোরি, মেমরি থ্র্যাশিং ইত্যাদির মধ্যে পার্থক্য রয়েছে
পরজীবী

3
ভ্লাদের জন্য +1। সম্ভবত আপনার সিপিইউ এবং লিনাক্স কার্নেল সমর্থন থাকলে সিফুফেরিক করা সহজ easy এটিতে নির্দেশের স্তরের গ্রানুলারিটি থাকা উচিত। এটি সম্ভবত নতুন হার্ডওয়্যার না কিনে সেরা জেনেরিক উত্তর; এটি ধীর গতির নেটওয়ার্ক, ডিস্ক, ভিডিও ইত্যাদির অনুকরণ করে না যাও দৌড়ের কারণ হতে পারে।
নির্মম আওয়াজ

36

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

বিকল্পভাবে, আপনি অন্য সিপিইউ-লিনাক্স (আর্ম-নন-জ্নুয়াবি-লিনাক্স, ইত্যাদি) এর সংকলনটি অতিক্রম করতে পারেন এবং তারপরে QEMU সেই কোডটি চালানোর জন্য অনুবাদ করতে পারেন।

চমৎকার প্রস্তাবনা সহজ এবং আপনি যদি এটা অন্য প্রক্রিয়া যার cpu 'র গ্রাস করবে সঙ্গে মেশা কাজ করতে পারে।

nice -19 test &
while [ 1 ] ; do sha1sum /boot/vmlinuz*; done;

আপনি বলেন নি যে আপনার গ্রাফিক্স, ফাইল এবং / অথবা নেটওয়ার্ক আই / ও দরকার আছে? আপনি যে শ্রেণীর ত্রুটিটি অনুসন্ধান করছেন সে সম্পর্কে কিছু জানেন ? এটি কি কোনও রেসের শর্ত, বা কোডটি কোনও গ্রাহক সাইটে ঠিক খারাপ আচরণ করে?

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


1
এবং বোচগুলি পুরানো এবং ধীর সিপিই এমুলেটর (কেবলমাত্র x86)।
osgx

22

ব্যবহার cpulimit:

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

ব্যবহৃত সিপিইউ পরিমাণের নিয়ন্ত্রণ প্রক্রিয়াগুলিতে সিগস্টপ এবং সিগকন্ট পসিক্স সিগন্যাল প্রেরণ করা হয়ে থাকে।

সমস্ত শিশু প্রক্রিয়াগুলি এবং নির্দিষ্ট প্রক্রিয়াটির থ্রেডগুলি একই শতাংশের সিপিইউ ভাগ করে নেবে।

এটি উবুন্টু স্টোরের মধ্যে রয়েছে। মাত্র

apt-get install cpulimit

ইতিমধ্যে চলমান প্রোগ্রামে এটি কীভাবে ব্যবহার করা যায় তার কয়েকটি উদাহরণ এখানে দেওয়া হয়েছে:

এক্সিকিউটেবল নাম দ্বারা প্রক্রিয়া 'বিগলুপ' সীমাবদ্ধ করুন 40% সিপিইউ:

cpulimit --exe bigloop --limit 40
cpulimit --exe /usr/local/bin/bigloop --limit 40 

পিআইডি দ্বারা একটি প্রক্রিয়া 55% সিপিইউতে সীমাবদ্ধ করুন:

cpulimit --pid 2960 --limit 55

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

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

মজাদার. আপনি ঠিক বলেছেন, আমি এইচডিডি বা জিপিইউ বিবেচনা করি নি। আমি মনে করি সত্যিকারের ধীর গতির হার্ডওয়্যার দিয়ে পরীক্ষা করা এটি সর্বোত্তম উপায়, তবে এই মুহুর্তে আমার কাছে কেবলমাত্র একটি শক্তিশালী ওয়ার্কস্টেশন রয়েছে যদিও আমি এমনকি লোয়ার-এন্ড ফোনের (জেএস + ওয়েবজিএল অ্যাপ) প্রকাশ করতে চাই।
trusktr

13
  1. একটি পুরানো কম্পিউটার পান
  2. ভিপিএস হোস্টিং প্যাকেজগুলি ধীরে ধীরে চলতে থাকে, প্রচুর বিঘ্ন ঘটায় এবং বন্যার সাথে বিভিন্নভাবে বিলম্বিত হয়। আপনি যত কম সস্তা যান হার্ডওয়ারটি তত খারাপ হবে। সত্যিকারের পুরানো হার্ডওয়্যার থেকে ভিন্ন, তাদের মধ্যে এমন একটি দুর্দান্ত সুযোগ রয়েছে যাতে তারা নির্দেশিকা সেট (এসএসই 4) রাখবেন যা সাধারণত পুরানো হার্ডওয়ারে পাওয়া যায় না। নিঃসন্দেহে, আপনি যদি এমন একটি সিস্টেম চান যা ধীরে ধীরে চলাফেরা করে এবং প্রায়শই শাটারগুলি বন্ধ করে দেয় তবে একটি সস্তা ভিপিএস হোস্ট দ্রুততম শুরু হবে।

3

আপনি যদি সত্যিই ধীর মেশিনে আপনার প্রোগ্রামটির আচরণ বিশ্লেষণের জন্য কেবল অনুকরণ করতে চান তবে আপনি নিজের পুরো প্রোগ্রামটিকে threadঅন্য কোনও প্রধান প্রোগ্রাম হিসাবে চালিত করার চেষ্টা করতে পারেন ।

এই পদ্ধতিতে আপনি একবারে কয়েকটি থ্রেডে বিভিন্ন অগ্রাধিকারের সাথে একই কোডটিকে অগ্রাধিকার দিতে পারেন এবং আপনার বিশ্লেষণের ডেটা সংগ্রহ করতে পারেন। আমি ফ্রেম-প্রসেসিং বিশ্লেষণের জন্য গেম ডেভলপমেন্টে এটি ব্যবহার করেছি।


2

ঘুম ব্যবহার করুন বা আপনার কোডের ভিতরে অপেক্ষা করুন। এটি করার উজ্জ্বলতম উপায় নয় তবে বিভিন্ন গতির সাথে সমস্ত ধরণের কম্পিউটারে গ্রহণযোগ্য।


2

এটি করার সহজতম উপায় হ'ল আপনার মূল চলমান কোডটি এর শেষে ঘুমের সাথে কিছুক্ষণ লুপ করে রাখা।

উদাহরণ স্বরূপ:

void main()
{
    while 1
    {
        // Logic
        // ...
        usleep(microseconds_to_sleep)
    }
}

লোকেরা যেমন উল্লেখ করবে, এটি সবচেয়ে সঠিক উপায় নয়, কারণ আপনার যুক্তি কোডটি এখনও স্বাভাবিক গতিতে চলবে তবে রানের মধ্যে বিলম্বের সাথে। এছাড়াও, এটি ধরে নিয়েছে যে আপনার লজিক কোডটি এমন কিছু যা লুপে চলে।

তবে এটি উভয়ই সহজ এবং কনফিগারযোগ্য।

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