লিনাক্সে IRQbalance কীসের জন্য ব্যবহৃত হয় এবং এটি কীভাবে উন্নত অপ্টিমাইজেশনের সাথে খাপ খায়?

সর্বশেষ আপডেট: 17/12/2025
লেখক: ইসহাক
  • irqbalance ইন্টারাপ্ট বিতরণ করে হার্ডওয়্যার SMP সিস্টেমে বাধা এড়াতে কোরের মধ্যে সংযোগ স্থাপন করা, বিশেষ করে উচ্চ-ট্রাফিক সার্ভারগুলিতে কার্যকর।
  • প্রকৃত কর্মক্ষমতা নির্ভর করে NAPI-এর সাথে irqbalance, নেটওয়ার্ক কিউ, ভাল আকারের TCP বাফার, আধুনিক qdisc এবং BBR-এর মতো কনজেশন নিয়ন্ত্রণ অ্যালগরিদমের সমন্বয়ের উপর।
  • উন্নত NIC সেটিংস (রিং বাফার, RSS/RPS, অফলোড) এবং ম্যানুয়াল IRQ অ্যাফিনিটি অ্যাসাইনমেন্ট CPU গুলির মধ্যে লোড বিতরণের আরও সূক্ষ্ম-টিউনিংয়ের অনুমতি দেয়।
  • সামগ্রিক অপ্টিমাইজেশন লিনাক্স এটি মেমরি, সোয়াপ, zram, অস্থায়ী ফাইল সিস্টেম এবং ডেস্কটপ প্যারামিটার এবং ফায়ারফক্সের মতো অ্যাপ্লিকেশনগুলিতে পরিবর্তনের মাধ্যমে সম্পন্ন হয়।

লিনাক্সে IRQbalance কনফিগার করা

যখন আপনি একটি GNU/Linux সিস্টেমের কর্মক্ষমতা নিয়ে ঝাঁকুনি শুরু করেন, তখনই হোক বা কাল, একজন পুনরাবৃত্ত নায়কের আবির্ভাব ঘটে: CPU-গুলির মধ্যে irqbalance এবং হার্ডওয়্যার ইন্টারাপ্টের বিতরণএটি সম্পর্কে ফোরামে, বিতরণ ডকুমেন্টেশনে এবং সিস্টেমটিকে "টিউনিং" করার টিউটোরিয়ালে আলোচনা করা হয়েছে যাতে এটি উড়তে পারে... কিন্তু এটি আসলে কী করে, কোন পরিস্থিতিতে এটি অবদান রাখে এবং কোন পরিস্থিতিতে আপনি কিছুই লক্ষ্য করবেন না তা খুব কমই ভালভাবে ব্যাখ্যা করা হয়েছে।

তাছাড়া, এই সবকিছু সম্পর্কে IRQ ব্যালেন্সিং এটি অন্যান্য উন্নত ধারণার সাথে জট পায়: NAPI, কার্নেল রিসিভ কিউ, NIC বাফার, TCP কনজেশন কন্ট্রোল অ্যালগরিদম, RSS/RPS, BBR, sysctl সেটিংস, প্রিলোডের মতো পারফরম্যান্স ডেমন, zram-compressed swap, GTK অপ্টিমাইজেশন, RAM-এ অস্থায়ী ফাইল ইত্যাদি। প্যারামিটারগুলির মধ্যে হারিয়ে যাওয়া খুব সহজ। comandos এবং কনফিগারেশন ফাইলগুলি প্রতিটি জিনিস কী করে তা স্পষ্টভাবে না বুঝে।

IRQbalance কী এবং লিনাক্সে এটি আসলে কীসের জন্য ব্যবহৃত হয়?

irqbalance হল একটি ইউজার-স্পেস ডেমন যা বিভিন্ন CPU কোরের মধ্যে হার্ডওয়্যার ইন্টারাপ্ট (IRQ) বিতরণের জন্য দায়ী। SMP (মাল্টিপ্রসেসর বা মাল্টিকোর) সিস্টেমে। এর লক্ষ্য জাদুকরী নয়: এটি কেবল ডিভাইসগুলির (নেটওয়ার্ক, ডিস্ক,) পরিষেবা প্রদানের সমস্ত কাজকে বাধা দেওয়ার চেষ্টা করে। ইউএসবি, ইত্যাদি) সর্বদা একই নিউক্লিয়াসের উপর পড়ে।

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

সিস্টেমে একটি একক CPU বা কোর যা সম্পূর্ণরূপে L2 ক্যাশে ভাগ করে নেয়irqbalance নিজেই সনাক্ত করে যে এর করার মতো কোনও কার্যকরী কাজ নেই এবং এটি বন্ধ করে দেয়। এটি কোনও ত্রুটি নয়; উন্নতির কোনও সুযোগ নেই। তবে, একাধিক ফিজিক্যাল CPU বা অনেক কোর সহ সার্ভারগুলিতে, বিশেষ করে ভারী নেটওয়ার্ক ট্র্যাফিক বা উচ্চ I/O সহ, এটি ল্যাটেন্সি এবং স্থিতিশীলতার ক্ষেত্রে পার্থক্য আনতে পারে।

ডেমনটি ব্যাকগ্রাউন্ডে (সার্ভিস মোডে) অথবা প্রয়োজন অনুসারে চলতে পারে বিকল্পটি সহ -একটি শট। উপরন্তু, নির্দিষ্ট IRQ বাদ দেওয়ার অনুমতি দেয় বিকল্প দ্বারা --banirq এবং পরিবেশ ভেরিয়েবলে সংজ্ঞায়িত CPU মাস্ক সহ নির্দিষ্ট কোর ব্যবহার করা থেকে এটিকে বিরত রাখুন IRQBALANCE_BANNED_CPUSএই সবই সাধারণত আপনার কনফিগারেশন ফাইল থেকে নিয়ন্ত্রিত হয়, যা অনেক ডিস্ট্রিবিউশনে অবস্থিত /etc/default/irqbalance o /etc/irqbalance.env.

IRQ ব্যালেন্সিং: কার্নেল বনাম irqbalance এবং কখন এটি লক্ষণীয়

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

এই কারণেই কেউ তাদের ডেস্কটপ ডিস্ট্রোতে irqbalance চেষ্টা করে বলে: "আমি কোন উন্নতি লক্ষ্য করছি না, তবে খারাপও কিছু নেই।"এটা একেবারে স্বাভাবিক। একটি ল্যাপটপে যেখানে কোয়াড-কোর প্রসেসর এবং একটি একক নেটওয়ার্ক কার্ড থাকে, সেখানে ভারী I/O লোড ছাড়াই, লিনাক্স শিডিউলার এবং অভ্যন্তরীণ কার্নেল প্রক্রিয়া (NAPI, নেটওয়ার্ক কিউ, ইত্যাদি) ইতিমধ্যেই জিনিসগুলিকে যথেষ্ট ভারসাম্য বজায় রাখে।

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

কিছু ব্যবহারকারী irqbalance এর পরিবর্তে irqbalance ব্যবহার করতে পছন্দ করেন। কার্নেলকে প্যারামিটারাইজ করুন যেমন বিকল্পগুলি ব্যবহার করে acpi_irq_balance GRUB-তে। এই প্যারামিটারটি ACPI এবং কার্নেল কীভাবে IRQ বরাদ্দ করে তা প্রভাবিত করে, কিন্তু এটি irqbalance-এর মতো একই গতিশীল নমনীয়তা প্রদান করে না, যা প্রকৃত লোডের উপর ভিত্তি করে বরাদ্দ পুনর্মূল্যায়ন করে। এগুলি ভিন্ন পদ্ধতি: প্রথমটি আরও স্থিতিশীল এবং নিম্ন-স্তরের; দ্বিতীয়টি, আরও অভিযোজিত।

  IIS ব্যবহার করে আপনার পিসিকে একটি স্থানীয় FTP সার্ভারে পরিণত করুন: একটি সম্পূর্ণ নির্দেশিকা

অতি-নিম্ন ল্যাটেন্সি পরিবেশে (উদাহরণস্বরূপ, নির্দিষ্ট ট্রেডিং প্ল্যাটফর্ম বা DPDK সহ নেটওয়ার্ক), বিপরীতটি ঘটে: irqbalance সাধারণত নিষ্ক্রিয় থাকে এবং IRQ গুলি নির্দিষ্ট কোরে ম্যানুয়ালি বরাদ্দ করা হয়।NIC কিউ এবং CPU-এর মধ্যে সাবধানে ম্যাপিং করার পাশাপাশি। এই পরিস্থিতিতে, পরম নিয়ন্ত্রণ চাওয়া হয় এবং কিছু অটোমেশন ত্যাগ করা হয়।

ইন্টারাপ্ট, NAPI, এবং নেটওয়ার্ক কিউ: IRQbalance কীভাবে ফিট করে

irqbalance এর ভূমিকা আরও ভালোভাবে বুঝতে হলে, আমাদের আরেকটি স্তরে যেতে হবে এবং দেখতে হবে কিভাবে লিনাক্স এগুলো পরিচালনা করে। নেটওয়ার্ক ব্যাঘাত এবং প্যাকেট গ্রহণকার্নেলের নেটওয়ার্ক সাবসিস্টেমটি বেশ কয়েকটি মূল উপাদানকে একত্রিত করে: NAPI, রিসিভ কিউ (DMA বাফার), প্যারামিটার net.core.*, কিউ ম্যানেজমেন্ট অ্যালগরিদম (qdisc) এবং ল্যাটেরাল স্কেলিং (RSS/RPS)।

NAPI (নতুন API) এই প্রক্রিয়াটি দ্বারা কার্নেল যখন প্রচুর ট্র্যাফিক আসে তখন ইন্টারাপ্ট স্টর্ম কমিয়ে দেয়। প্রতিটি প্যাকেটের জন্য একটি IRQ ফায়ার করার পরিবর্তে, NIC একটি ইন্টারাপ্ট তৈরি করে যা নির্দেশ করে "কাজ বাকি আছে", এবং কার্নেল প্রোব রিসিভ কিউটি খালি না হওয়া পর্যন্ত অথবা সময়/প্যাকেট বাজেট শেষ না হওয়া পর্যন্ত প্রক্রিয়া করা হয়। এটি জট কমায় এবং কর্মক্ষমতা উন্নত করে, যদিও এটি কিছু ল্যাটেন্সি পরিবর্তনও আনতে পারে।

নেটওয়ার্ক স্ট্যাক দ্বারা প্রক্রিয়াকরণের আগে প্যাকেটগুলি যেখানে অবতরণ করে তাকে সাধারণত বলা হয় কার্নেল রিসিভ কিউ বা DMA বাফারএর ক্ষমতা নিম্নলিখিত পরামিতিগুলির দ্বারা সীমাবদ্ধ:

  • net.core.netdev_max_backlog: যখন কার্নেল যে হারে প্যাকেটগুলি প্রক্রিয়া করতে পারে না, তখন সফ্টওয়্যারের সর্বাধিক সংখ্যক প্যাকেট কিউ গ্রহণ করে।
  • net.core.netdev_budget_usecs: প্রতিটি চক্রে সারি খালি করার জন্য NAPI-এর মাইক্রোসেকেন্ডে সময়ের "বাজেট"।
  • net.core.dev_weight: সেই বাজেটের মধ্যে প্রতিটি রাউন্ডে প্রতি ইন্টারফেসে প্রক্রিয়াজাত প্যাকেটের সংখ্যা।

Si netdev_max_backlog খুবই কম এবং NIC কার্নেলের সামর্থ্যের চেয়ে বেশি প্যাকেট পাঠায়, আমরা "ড্রপড প্যাকেট" দেখতে শুরু করব /proc/net/softnet_statউচ্চ-ট্রাফিক সার্ভারগুলিতে সূক্ষ্ম-টিউনিংয়ের জন্য একটি সাধারণ সূচনা বিন্দু হল এর পরিসরে 4000 প্যাক, কনফিগার করা হয়েছে /etc/sysctl.conf এরকম কিছু সহ:

net.core.netdev_max_backlog = ২৫০০০০

এটি পরিবর্তন করার পর, এটি প্রয়োগ করা হয় sysctl -p বা সাথে একটি sysctl -w সময়নিষ্ঠ। এইভাবে, লেজ আগমনের শিখরগুলিকে আরও ভালোভাবে শোষণ করে যতক্ষণ পর্যন্ত প্রক্রিয়াকরণের বাকি অংশটি ধরে থাকে, প্যাকেটগুলি না হারিয়ে।

এই সার্কিট জুড়ে, irqbalance নির্ধারণ করে যে কোন CPU নেটওয়ার্ক ইন্টারফেসের সাথে সম্পর্কিত IRQ গুলি পরিচালনা করবে। যদি আমরা সমস্ত NIC ইন্টারাপ্টকে একটি একক কোরে কেন্দ্রীভূত করি, তাহলে সেই কোরটি NAPI রুটিনগুলি চালাবে এবং নিজেই কিউটি ড্রেন করবে।যদি আমরা IRQ গুলি সঠিকভাবে বিতরণ করি এবং RSS বা RPS এর মতো প্রক্রিয়া ব্যবহার করি, তাহলে বেশ কয়েকটি CPU প্যাকেট প্রক্রিয়াকরণে সহযোগিতা করতে পারে, যার ফলে সারি এবং ক্ষতি হ্রাস পাবে।

ভারী ট্র্যাফিকের জন্য সারি, বাফার এবং TCP উইন্ডো ঠিক করুন

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

প্রথম সমন্বয় ব্লকটি হল প্যাকেট রিসিভ বাফার এবং টিসিপি উইন্ডোলিনাক্স নিম্নলিখিত পরামিতিগুলি প্রকাশ করে:

  • net.ipv4.tcp_rmem: প্রতি সকেটে TCP রিসিভ মেমোরির ট্রিপলেট (সর্বনিম্ন, ডিফল্ট, সর্বোচ্চ)।
  • net.ipv4.tcp_wmem: শিপিংয়ের সমতুল্য।
  • net.core.rmem_max y net.core.wmem_max: একটি অ্যাপ্লিকেশনের অনুরোধ করা সর্বোচ্চ হার্ড বাফার।

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

net.ipv4.tcp_rmem = 4096 16384 10880000
net.ipv4.tcp_wmem = 4096 16384 10880000

সর্বোচ্চ যে 10,8 XNUMX এমবি এটি খুব কম RTT (~0,00017 সেকেন্ড) সহ 1 Gbps লিঙ্কের জন্য নির্দিষ্ট গণনা থেকে এসেছে। থ্রুপুট বা ল্যাটেন্সি যত বেশি হবে, উইন্ডো দ্বারা সীমাবদ্ধ না হয়ে ব্যান্ডউইথের সুবিধা নেওয়ার জন্য বাফারটি তত বেশি হওয়া প্রয়োজন।

এই সর্বোচ্চ মানটি প্যাকেট গ্রহণকারী সারির আকারের সাথে সম্পর্কিত করা গুরুত্বপূর্ণ। যদি নেটডেভ_ম্যাক্স_ব্যাকলগ = ৪০০০ এবং প্রতিটি কার্যকর প্যাকেটের আকার প্রায় ১৪৮০ বাইট, সেই সারিটি প্রায় ~৫.৯ মেগাবাইট। TCP উইন্ডো বাফারটি অবশ্যই সারিতে থাকা বাফারের চেয়ে বড় হতে হবে।অথবা সারির আগে বাফার স্যাচুরেট করে আমরা প্যাকেটগুলি হারাবো।

ক্ষতির উপর নজর রাখানিম্নলিখিত কমান্ডগুলি ব্যবহার করা যেতে পারে:

  • cat /sys/class/net/eth0/statistics/rx_dropped: NIC-তে প্যাকেট হারিয়ে গেছে।
  • watch -n 1 -t -d cat /proc/net/softnet_stat: প্রতি CPU-তে কলাম প্রক্রিয়া করা, বাদ দেওয়া, সময় কমানো ইত্যাদি।
  • watch -n 1 -t -d "netstat -s | grep err": নেটওয়ার্ক স্ট্যাক ত্রুটি।

Si netstat ত্রুটি নির্দেশ করে কিন্তু /proc/net/softnet_stat তা নির্দেশ করে নাখুব সম্ভবত, ক্ষতিগুলি আমাদের হোস্টের বাইরে ঘটছে (পথ ধরে, একটি মধ্যবর্তী ফায়ারওয়ালের মাধ্যমে, ইত্যাদি)। কনজেশন নিয়ন্ত্রণ অ্যালগরিদমের কারণে সর্বদা কিছু ক্ষতি হবে, তবে এটি নিয়ন্ত্রণে থাকা উচিত এবং ট্র্যাফিক স্পাইকের সাথে সম্পর্কিত হওয়া উচিত।

  সমকালীন প্রোগ্রামিং কী এবং কীভাবে এটি আয়ত্ত করা যায়

সারি ব্যবস্থাপনা (qdisc), QoS এবং TCP কনজেশন নিয়ন্ত্রণ

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

লিনাক্স অফার বেশ কিছু প্রাসঙ্গিক qdiscs:

  • পিফিফো_ফাস্ট: পুরাতন ডিফল্ট শৃঙ্খলা, তিনটি অগ্রাধিকার ব্যান্ড সহ একটি FIFO।
  • fq_codel: বাফারব্লট মোকাবেলায় CoDel এর সাথে ফেয়ার কিউইং এর সমন্বয়, রাউটার এবং সাধারণ ব্যবহারের জন্য অত্যন্ত প্রস্তাবিত।
  • fq: সহজ ন্যায্য সারিবদ্ধতা, উচ্চ-লোড সার্ভারগুলিতে খুবই কার্যকর।
  • কেক (sch_cake): আজকের সবচেয়ে উন্নত, কিন্তু এর জন্য কম্পাইলিং বা কার্নেলে মডিউল থাকা প্রয়োজন।

ডিফল্ট qdisc দেখতে এরকম:

sysctl net.core.default_qdisc

এবং এটি হট-সোয়াপ করা যেতে পারে:

sysctl -w net.core.default_qdisc=fq_codel

একটি নির্দিষ্ট ইন্টারফেস যাতে একটি নির্দিষ্ট শৃঙ্খলা ব্যবহার করে তা নিশ্চিত করার জন্য, একজন অবলম্বন করে tc:

sudo tc qdisc প্রতিস্থাপন dev eth0 শিকড় fq_codel

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

sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

মডিউলগুলি দেখে উপলব্ধ অ্যালগরিদমের তালিকা পরীক্ষা করা যেতে পারে tcp_* en /lib/modules/<versión>/kernel/net/ipv4/. একটি উপযুক্ত qdisc (fq/fq_code) এবং একটি ভালো বাফার কনফিগারেশনের সাথে BBR একত্রিত করুন। এর ফলে অনেক বেশি স্থিতিশীল ডেটা প্রবাহ ঘটে।

উন্নত NIC সেটিংস: রিং বাফার, RSS, RPS, এবং অফলোড

নেটওয়ার্ক কার্ডের নিজস্ব সারি এবং বাফারের সেটও রয়েছে: রিসিভ (RX) এবং ট্রান্সমিট (TX) এর জন্য রিং বাফারএর সর্বোচ্চ আকার হার্ডওয়্যারের উপর নির্ভর করে এবং এর সাথে প্রদর্শিত হয়:

ethtool -g ethX সম্পর্কে

ক্ষেত্র "পূর্বনির্ধারিত সর্বোচ্চ" তারা নির্দেশ করে যে এটি কতটা বাড়ানো যেতে পারে। যদি কার্ডটি এটির অনুমতি দেয়, তাহলে RX এবং TX কে 4096, 8192, অথবা 16384 এর মতো মানগুলিতে বাড়ানো যেতে পারে:

ethtool -G ethX rx 4096 tx 4096

যদি "ডিভাইস রিং প্যারামিটার সেট করা যাচ্ছে না: অবৈধ যুক্তি" এর মতো একটি ত্রুটি দেখা দেয়, এই মানটি NIC-এর সক্ষমতাকে ছাড়িয়ে গেছে এবং আমাদের আরও ছোট ভাজক চেষ্টা করতে হবে।

পাড়া একটি একক CPU-কে সমস্ত গ্রহণের কাজ পরিচালনা করতে বাধা দিনঅনেক আধুনিক NIC বাস্তবায়ন করে আরএসএস (পার্শ্ব স্কেলিং গ্রহণ করুন)বিভিন্ন কার্নেলের সাথে যুক্ত বেশ কয়েকটি হার্ডওয়্যার সারি তৈরি করা। লিনাক্সে, এই বিতরণটি দেখতে এরকম দেখাচ্ছে:

বিড়াল /proc/ইন্টারপ্ট | গ্রেপ

আরএসএস ছাড়া কার্ডগুলিতে, অনুরূপ কিছু "অনুকরণ" করা যেতে পারে RPS (রিসিভ প্যাকেট স্টিয়ারিং), ইন্টারফেস সফ্টওয়্যার কিউতে CPU গুলি বরাদ্দ করা:

ইকো f > /sys/class/net/enp4s0f0/queues/rx-0/rps_cpus

মানটি একটি হেক্সাডেসিমেল মাস্ক। উদাহরণস্বরূপ, f বাইনারি (1111) তে, এটি প্রথম চারটি কার্নেল ব্যবহার নির্দেশ করে। কার্নেলটি অবশ্যই কম্পাইল করতে হবে CONFIG_RPS এটা কাজ করতে.

তুমি এর সাথেও খেলতে পারো চেকসাম অফলোড এবং সেগমেন্টেশন CPU থেকে NIC প্রসেসরে কাজ অফলোড করার জন্য। ethtool -k সক্রিয় ক্ষমতাগুলি দৃশ্যমান, এবং নিম্নলিখিতগুলির মতো জিনিসগুলি চালু করা যেতে পারে:

ethtool -K ethX rx চালু (রিসেপশনে চেকসাম যাচাইকরণ)
ethtool -K ethX tso on (TCP সেগমেন্টেশন অফলোড)

এই পরিবর্তনগুলি দীর্ঘস্থায়ী হওয়ার জন্য, সাধারণত নেটওয়ার্ক স্ক্রিপ্টে স্থাপন করা হয় (/etc/network/interfaces ডেবিয়ান/উবুন্টুতে, /etc/sysconfig/network-scripts/ifcfg-ethX Red Hat-এ) অথবা udev নিয়মে।

IRQ অ্যাফিনিটি ম্যানুয়ালি সূক্ষ্মভাবে সুরক্ষিত করুন এবং IRQbalance এর সাথে লাইভ করুন

পুরোনো কার্নেলগুলিতে অথবা যেখানে আমরা সূক্ষ্ম নিয়ন্ত্রণ চাই, সেখানে এটি সম্ভব কোন CPU একটি নির্দিষ্ট IRQ পরিচালনা করে তা ম্যানুয়ালি নির্ধারণ করুন।সমস্ত তথ্য এখানে আছে /proc/irq y /proc/interruptsএকটি সাধারণ প্রবাহ হবে:

  • বাধাগুলি দেখুন: বিড়াল / proc / বাধা দেয় এবং নেটওয়ার্ক ইন্টারফেস লাইনটি সনাক্ত করুন (যেমন, enp0s8 এর জন্য IRQ 25)।
  • বর্তমান সম্বন্ধ পরীক্ষা করুন: বিড়াল /proc/irq/25/smp_affinity (হেক্স মাস্ক: ০২ = CPU1, ০১ = CPU0, ০৪ = CPU2, ইত্যাদি)।
  • ইহা পরিবর্তন করুন: প্রতিধ্বনি ১ > /proc/irq/25/smp_affinity CPU0 এ সরাতে।

এইভাবে আপনি, উদাহরণস্বরূপ, ওভারলোডেড CPU থেকে অফলোড একটি IRQ কে কম ব্যস্ত কোরে স্থানান্তর করা। যদি আপনার irqbalance ইনস্টল এবং সক্রিয় থাকে, তাহলে একটি বিকল্প যোগ করে এটিকে সেই নির্দিষ্ট ইন্টারাপ্টটি স্পর্শ না করার জন্য বলা গুরুত্বপূর্ণ:

বিকল্প="--banirq=25"

en /etc/default/irqbalanceঅথবা বিকল্পটি ব্যবহার করে --banirq=25 যখন রাক্ষস শুরু করে। ঠিক তেমনই আপনি এটিকে এর স্বয়ংক্রিয় বিতরণ যুক্তি থেকে বাদ দেন। এবং তুমি তোমার ম্যানুয়াল অ্যাসাইনমেন্টকে সম্মান করো।

তাহলে এটা এরকম পরিবর্তন হয় echo 1 > /proc/irq/25/smp_affinity রিবুট থেকে বেঁচে যাওএগুলি সাধারণত ক্লাসিকে যোগ করা হয় /etc/rc.local (যদি সক্রিয় থাকে) অথবা নির্দিষ্ট systemd ইউনিটে।

অন্যান্য সম্পর্কিত কর্মক্ষমতা সেটিংস: সোয়াপ, zram, অস্থায়ী ফাইল, প্রিলোড

নেটওয়ার্ক প্রতিক্রিয়া এবং IRQ বিতরণ উন্নত করার জন্য এই সমস্ত কাজ সাধারণত এর সাথে থাকে অন্যান্য সিস্টেম টিউনিং যা, যদিও সরাসরি ভারসাম্যের সাথে সম্পর্কিত নয়, পারফরম্যান্সের চিত্রটি সম্পূর্ণ করে।

  gcc কমান্ড এবং এর মূল বিকল্পগুলির সম্পূর্ণ টিউটোরিয়াল

স্মৃতির ক্ষেত্রে, অনেক প্রশাসক কমিয়ে দেন সোয়াপের আক্রমণাত্মক ব্যবহার পরিবর্তন /etc/sysctl.conf যেমন পরামিতি সহ:

  • vm.swappiness: কার্নেল কতটা সোয়াপ ব্যবহার করতে পছন্দ করে (0-100, ডিফল্ট 60)। কম মান (1-10) RAM কে অগ্রাধিকার দেয়।
  • vm.vfs_cache_pressureইনোড এবং ডেন্ট্রি ক্যাশে চাপ। এটি কমানো RAM-তে মেটাডেটা ধরে রাখতে সাহায্য করে।
  • ভিএম.ডার্টি_রাইটব্যাক_সেন্টিসেক্স y vm.নোংরা_মেয়াদোত্তীর্ণ_সেন্টিসেক্স: ডিস্কে নোংরা পৃষ্ঠা লেখার ফ্রিকোয়েন্সি এবং মেয়াদ শেষ।
  • vm.নোংরা_অনুপাত y vm.dirty_background_ratio: জোরপূর্বক লেখার আগে নোংরা ডেটা দিয়ে পূর্ণ হতে পারে এমন মেমরির শতাংশ।

উপযুক্ত মান সহ (উদাহরণস্বরূপ vm.swappiness = 1, vm.vfs_cache_pressure=50ইত্যাদি) এটি অর্জন করা হয় যে পৃষ্ঠা শুরু করার আগে সিস্টেমটি আরও বেশি RAM ব্যবহার করবে।, প্রচুর মেমরি সহ সার্ভারগুলিতে পছন্দসই কিছু।

আরেকটি ক্লাসিক পরিমাপ হল অস্থায়ী ডিরেক্টরিগুলি RAM-এ সরান এগুলোকে মাউন্ট করা হচ্ছে tmpfs en /etc/fstab:

tmpfs /tmp tmpfs noatime,nodiratime,nodev,nosuid,mode=1777,ডিফল্ট 0 0
tmpfs /var/tmp tmpfs noatime,nodiratime,nodev,nosuid,mode=1777,ডিফল্ট 0 0

এর সাহায্যে, অস্থায়ী অ্যাক্সেস (সংকলন, অ্যাপ্লিকেশন ওয়ার্কিং ফাইল, ইত্যাদি) করা হয় র‍্যামের গতি এবং ডিস্কের ক্ষয় কমায় এসএসডি.

কম সম্পদের পরিবেশেও সক্রিয় করা সাধারণ zram-swapRAM-তে একটি সংকুচিত সোয়াপ ডিভাইস। এটি একটি সংগ্রহস্থল থেকে ইনস্টল করা হয় (উদাহরণস্বরূপ, ক্লোনিং করে Git ব্যবহার করে)। zram-swap এবং তার মৃত্যুদণ্ড কার্যকর করা install.sh) এবং একটি সংকুচিত ব্লক ডিভাইস তৈরি করে যেখানে সিস্টেমটি অদলবদল করে, যদি উপলব্ধ থাকে, ডিস্ক অদলবদলের আশ্রয় নেয়। আপনি কিছুটা বেশি CPU খরচ করে কার্যকর মেমোরি অর্জন করতে পারবেন।যা অনেক বোঝার জন্য ক্ষতিপূরণ দেয়।

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

GTK, GRUB, Firefox এবং অন্যান্য "জীবনযাত্রার মান" পরিবর্তন

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

GTK2, GTK3 এবং GTK4-তে, সমন্বয় করা যেতে পারে। ফাইলগুলিতে কয়েক ডজন প্যারামিটার যেমন ~/.gtkrc-2.0, ~/.config/gtk-3.0/settings.ini o ~/.config/gtk-4.0/settings.iniঅ্যানিমেশন, ডাবল-ক্লিক টাইমিং, কার্সার সাইজ, টাইটেল বার ডিজাইন, ডার্ক থিমের ব্যবহার, টুলটিপ আচরণ, ফন্ট অ্যান্টিএলিয়াসিং ইত্যাদি। এই ফাইলগুলি ম্যানুয়ালি সম্পাদনা করা হয় (সহ nano) অথবা এর মাধ্যমে লাইন যোগ করে echo >> থেকে প্রান্তিক.

সংস্করণগুলিও সাধারণত সামঞ্জস্য করা হয়। "বিশ্বব্যাপী" এই পরামিতিগুলির মধ্যে /etc/gtk-2.0/gtkrc, /etc/gtk-3.0/settings.ini y /etc/gtk-4.0/settings.ini, যাতে তারা সমস্ত ব্যবহারকারীকে প্রভাবিত করে, সর্বদা এই বিষয়টিকে সম্মান করে যে সেই ক্ষেত্রে আপনাকে রুট হতে হবে (এর মাধ্যমে su - o sudo).

El ম্যানেজারের অপেক্ষার সময় বুট GRUB- র সম্পাদনা করলে এটি ছোট হয়ে যায়। /etc/default/grub এবং পরিবর্তন করা হচ্ছে GRUB_TIMEOUT (উদাহরণস্বরূপ, ১০ থেকে ৩ সেকেন্ড পর্যন্ত), এবং কার্নেলে প্যারামিটার যোগ করা যেমন noresume o acpi_irq_balance en GRUB_CMDLINE_LINUX_DEFAULT। তারপর এটি কার্যকর করা হয় update-grub (ডেবিয়ান/উবুন্টু) অথবা grub-mkconfig -o /boot/grub/grub.cfg (আর্কাইভ এবং ডেরিভেটিভস)।

ব্রাউজারের ক্ষেত্রে, ফাইল আছে যেমন user.js ফায়ারফক্সের জন্য এই সেটিংস আপনাকে ব্রাউজিং দ্রুত করার লক্ষ্যে বিভিন্ন পছন্দ প্রয়োগ করতে দেয়: সংযোগের সংখ্যা, ক্যাশে আচরণ, কম্প্রেশন, ওয়েবসকেট ইত্যাদি। স্বাভাবিক পদ্ধতি হল প্রোফাইল রিসেট করা, "সমস্যা সমাধানের তথ্য" থেকে প্রোফাইল ডিরেক্টরি খুলুন, ফায়ারফক্স বন্ধ করুন এবং নিম্নলিখিতটি পেস্ট করুন: user.js প্রোফাইল ফোল্ডারে এবং ব্রাউজারটি আবার খুলুন।

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

পুরো প্যাকেজটি দেখলে—আইআরকিউ অ্যালোকেশন, ম্যানুয়াল বা আইআরকিউ, ন্যাপি এবং অপ্টিমাইজড কিউ, সঠিক আকারের টিসিপি বাফার, আধুনিক কিউডিস্ক যেমন fq_codel বা fq, বিবিআর কনজেশন কন্ট্রোল, এক্সপেন্ডেড রিং বাফার, সক্রিয় আরএসএস/আরপিএস, সোয়াপ এবং জেডআরএম আন্ডার কন্ট্রোল, র‍্যামে অস্থায়ী ফাইল এবং একটি সূক্ষ্মভাবে সুরক্ষিত ডেস্কটপ পরিবেশ—এটা স্পষ্ট হয়ে ওঠে যে irqbalance হলো আরও একটি বড় ধাঁধার টুকরো মাত্র।মাল্টি-কোর সার্ভার এবং উচ্চ ট্র্যাফিকের ক্ষেত্রে এর ভূমিকা অত্যন্ত গুরুত্বপূর্ণ, অনেক ডেস্কটপে এটি অপ্রাসঙ্গিক এবং চরম ল্যাটেন্সি সিস্টেমে বিপরীতমুখী যেখানে ম্যানুয়াল অ্যাফিনিটি পছন্দ করা হয়; এই প্রেক্ষাপটটি ভালভাবে বোঝা এটিকে কাজ করতে দেওয়া, সীমিত করা, নাকি কেবল অক্ষম করা তা সিদ্ধান্ত নেওয়ার মূল চাবিকাঠি।

KVM এবং Virt-Manager ব্যবহার করে ভার্চুয়ালাইজেশন
সম্পর্কিত নিবন্ধ:
KVM এবং Virt-Manager এর সাথে ভার্চুয়ালাইজেশন: আপনার যা জানা দরকার