- লিনাক্স কার্নেল টিউন করার জন্য আর্কিটেকচারাল কনফিগারেশন, sysctl এবং ল্যাটেন্সি-ভিত্তিক CPU শিডিউলিং একত্রিত করতে হবে।
- কাস্টম কার্নেল এবং PREEMPT_RT প্যাচগুলি চরম লেটেন্সি হ্রাসের অনুমতি দেয়, তবে এগুলিতে আরও জটিলতা এবং রক্ষণাবেক্ষণ জড়িত।
- নেটওয়ার্ক, মেমোরি, ডিস্ক এবং সিস্টেম সার্ভিস অপ্টিমাইজেশন সর্বদা কঠোর পর্যবেক্ষণ এবং বেঞ্চমার্কিংয়ের মাধ্যমে পরিমাপ করা উচিত।
- একটি পুনরাবৃত্তিমূলক, মেট্রিক্স-চালিত পদ্ধতি কার্নেলের উন্নতিগুলিকে অ্যাপ্লিকেশন এবং ব্যবহারকারীদের জন্য প্রকৃত সুবিধায় পরিণত করে।

যখন আমরা লিনাক্সে পারফরম্যান্সের কথা বলি, তখন প্রায় সবকিছুই একই জায়গায় নির্দেশ করে: কার্নেল হল কেন্দ্রীয় উপাদান যা ল্যাটেন্সি, স্থিতিশীলতা এবং রিসোর্স ব্যবহার নিয়ন্ত্রণ করেএটিকে সঠিকভাবে উন্নত করার মাধ্যমে এমন একটি সিস্টেমের মধ্যে পার্থক্য করা যেতে পারে যা কেবল "কাজ করে" এবং এমন একটি সিস্টেম যা সার্ভার, ডেস্কটপ, ক্লাউড পরিবেশে, এমনকি অনেক পুরনো হার্ডওয়্যার.
এই নির্দেশিকাটি কীভাবে নিরাপত্তা বা রক্ষণাবেক্ষণের সাথে আপস না করে লেটেন্সি কমাতে লিনাক্স কার্নেলটি অপ্টিমাইজ করুন।আমরা মৌলিক স্থাপত্য ধারণা থেকে শুরু করে sysctl দিয়ে টুইকিং, কাস্টম কার্নেল কম্পাইল করা, রিয়েল-টাইম প্যাচ ব্যবহার করা, কম-বিলম্বিত নেটওয়ার্কের জন্য টিউনিং (যেমন EC2 তে), এবং আপনি যা টুইক করছেন তা আসলে কোনও উন্নতি করে কিনা তা পরিমাপ করার জন্য পর্যবেক্ষণ এবং বেঞ্চমার্কিং কৌশলগুলি সবকিছুই কভার করব।
লিনাক্স কার্নেল আর্কিটেকচার এবং ল্যাটেন্সির মূল বিষয়গুলি
লিনাক্স কার্নেল অ্যাপ্লিকেশন এবং হার্ডওয়্যারের মধ্যে একটি মধ্যস্থতাকারী স্তর হিসেবে কাজ করে, পরিচালনা করে মেমরি, প্রক্রিয়া, বাধা, ড্রাইভার এবং ফাইল সিস্টেম। তার একঘেয়ে কিন্তু মডুলার নকশালোডযোগ্য মডিউলগুলির জন্য ধন্যবাদ, এটি আপনাকে সম্পূর্ণ সিস্টেমটি পুনরায় কম্পাইল না করেই নমনীয়ভাবে কার্যকারিতা সক্রিয় বা নিষ্ক্রিয় করতে দেয়।
বিলম্ব কোথা থেকে আসে তা বোঝার জন্য, বেশ কয়েকটি সাবসিস্টেম জানা গুরুত্বপূর্ণ: প্রক্রিয়া পরিকল্পনাকারী (সময়সূচীকারী)মেমোরি ম্যানেজমেন্ট এবং ইন্টারাপ্ট হ্যান্ডলিং অত্যন্ত গুরুত্বপূর্ণ। একটি খারাপভাবে কনফিগার করা শিডিউলার, একটি আক্রমণাত্মক মেমোরি নীতি, অথবা অতিরিক্ত সংখ্যক অনিয়ন্ত্রিত ইন্টারাপ্টের ফলে শক্তিশালী হার্ডওয়্যার থাকা সত্ত্বেও ধীর প্রতিক্রিয়া সময় হতে পারে।
কার্নেল কনফিগারেশনে যেমন বিকল্পগুলি অন্তর্ভুক্ত থাকে CONFIG_PREEMPT, CONFIG_PREEMPT_VOLUNTARY অথবা CONFIG_SMPএই বিষয়গুলি নির্ধারণ করে যে কার্নেলকে আরও জরুরি কাজ করার জন্য কতটা বাধা দেওয়া যেতে পারে এবং এটি মাল্টি-কোর সিস্টেমগুলিকে কীভাবে কাজে লাগায়। সঠিক প্রিম্পশন মডেল নির্বাচন করলে ডেস্কটপ, কম-বিলম্বিত সার্ভার বা শিল্প সিস্টেমে অনুভূত ল্যাটেন্সি উল্লেখযোগ্যভাবে পরিবর্তিত হয়।
আধুনিক সার্ভারগুলিতে, হার্ডওয়্যার টপোলজিও গুরুত্বপূর্ণ: কোর, সকেট, NUMA এবং ক্যাশে শ্রেণিবিন্যাসের বন্টনCPU অ্যাফিনিটি এবং NUMA নীতিগুলিকে (যেমন, একই নোডে প্রক্রিয়া এবং মেমরি ঠিক করা) সূক্ষ্মভাবে সমন্বয় করা অ্যাক্সেসের সময় কমাতে এবং ক্যাশে হিট রেট উন্নত করতে সাহায্য করে, যা আমরা যখন জিটার এবং অপ্রত্যাশিত বিলম্ব কমাতে চাই তখন গুরুত্বপূর্ণ।
তদুপরি, CPU শিডিউলার এবং সাবসিস্টেমের মধ্যে মিথস্ক্রিয়া I/O (ডিস্ক এবং নেটওয়ার্ক) থ্রুপুট এবং এন্ড-টু-এন্ড ল্যাটেন্সি নির্ধারণ করে অ্যাপ্লিকেশনগুলি যা দেখতে পাবে। কোনও কিছু স্পর্শ করার আগে, বর্তমান অবস্থা (কার্নেল কনফিগারেশন, sysctl, GRUB, লোডেড মডিউল) নথিভুক্ত করা যুক্তিযুক্ত যাতে কোনও পরিবর্তনের ফলে কর্মক্ষমতা খারাপ হলে আপনি দ্রুত পূর্বাবস্থায় ফিরিয়ে আনতে পারেন।
লেটেন্সি এবং কর্মক্ষমতা উন্নত করতে sysctl এর মাধ্যমে সমন্বয়
ইন্টারফেস sysctl আপনাকে কার্নেল প্যারামিটারগুলি তাৎক্ষণিকভাবে পরিবর্তন করতে দেয় /proc/sys এর মাধ্যমে, পুনরায় কম্পাইল না করেই। কম্পাইলেশনে আটকে না থেকে টিউনিং শুরু করার জন্য এটি আদর্শ প্রবেশ বিন্দু।
নেটওয়ার্ক ক্ষেত্রে, প্যারামিটার যেমন net.core.rmem_max, net.core.wmem_max অথবা net.ipv4.tcp_congestion_control এগুলো সরাসরি থ্রুপুট, ল্যাটেন্সি এবং টিসিপি সংযোগ আচরণের উপর প্রভাব ফেলে। উচ্চ-ট্র্যাফিক ওয়েব সার্ভার বা কম-লেটেন্সি ক্লাউড ইনস্ট্যান্সের জন্য বাফার এবং কনজেশন অ্যালগরিদম সঠিকভাবে সামঞ্জস্য করা অত্যন্ত গুরুত্বপূর্ণ।
মেমরির জন্য, মান যেমন vm.swappiness, vm.dirty_ratio, vm.vfs_cache_pressure অথবা vm.overcommit_memory এগুলো আপনাকে কত পরিমাণে সোয়াপ ব্যবহার করা হবে, পৃষ্ঠার ক্যাশে কীভাবে পরিচালিত হবে এবং ভার্চুয়াল মেমোরির আচরণ নিয়ন্ত্রণ করতে দেয়। সোয়াপিনেস (উদাহরণস্বরূপ, ১০-এ) কমানো সাধারণত সিস্টেমকে ঘন ঘন সোয়াপ ব্যবহার করা থেকে বিরত রাখতে সাহায্য করে, যা ডিস্ক I/O ল্যাটেন্সি স্পাইক হ্রাস করে।
যদি আপনি বৃহৎ ডাটাবেস বা অ্যাপ্লিকেশনের সাথে কাজ করেন যা প্রচুর পরিমাণে শেয়ার্ড মেমোরি ব্যবহার করে, তাহলে এটি সামঞ্জস্য করা অত্যন্ত গুরুত্বপূর্ণ কার্নেল.শ্ম্যাম্যাক্স, কার্নেল.শমল এবং সর্বোচ্চ কতগুলি ফাইল খোলা হবে fs.file-max এবং fs.nr_openএই দুর্বল আকারের সীমাগুলি বাধা এবং ত্রুটির কারণ হতে পারে যা লোডের নিচে নির্ণয় করা কঠিন।
সবচেয়ে ভালো পন্থা হলো ছোট ছোট পরিবর্তন বাস্তবায়ন করা, পর্যবেক্ষণ সরঞ্জাম দিয়ে তাদের প্রভাব পরিমাপ করা, এবং শুধুমাত্র তখনই /etc/sysctl.conf অথবা /etc/sysctl.d/ এ এগুলি বজায় রাখুন।কন্টেইনারাইজড পরিবেশে, মনে রাখবেন যে অনেক কার্নেল প্যারামিটার হোস্টের জন্য গ্লোবাল: অসাবধানতাবশত সেগুলি পরিবর্তন করলে সমস্ত পরিষেবা প্রভাবিত হতে পারে, তাই sysctl-কে cgroups এবং namespace-এর সাথে একত্রিত করা প্রায় বাধ্যতামূলক।
কাস্টম কার্নেল কম্পাইল এবং রক্ষণাবেক্ষণ
যখনই আপনি চান, একটি কাস্টম কার্নেল কম্পাইল করা একটি অত্যন্ত শক্তিশালী হাতিয়ার হিসেবে রয়ে গেছে। বিলম্ব কমানো, অপ্রয়োজনীয় ওভারহেড অপসারণ করা, অথবা বিরল হার্ডওয়্যার সমর্থন করাযদিও ডিস্ট্রিবিউশনগুলিতে বেশ বহুমুখী কার্নেল থাকে, কিছু পরিস্থিতিতে একটি নির্দিষ্ট কার্নেলই সমস্ত পার্থক্য তৈরি করে।
ক্লাসিক ওয়ার্কফ্লোতে কোড ডাউনলোড করা জড়িত থেকে kernel.org অথবা প্যাচড ট্রি যেমন xanmod অথবা লিকোরিক্সএবং এর মতো সরঞ্জাম ব্যবহার করুন make menuconfig বিকল্পগুলি বেছে নিতে। বিল্ড স্ক্রিপ্টগুলির সাথে আপনার নিজস্ব গিট রিপোজিটরিতে .config ফাইলটি সংরক্ষণ করলে, আপনি বিল্ডগুলি পুনরুত্পাদন করতে এবং সংস্করণগুলির মধ্যে সামঞ্জস্য বজায় রাখতে পারবেন।
আপনি যদি ডেবিয়ান বা ডেরিভেটিভস ব্যবহার করেন, তাহলে কম্পাইল করা খুবই সুবিধাজনক “ডেবিয়ান-স্টাইল"কার্নেল, হেডার এবং সংশ্লিষ্ট লাইব্রেরির .deb প্যাকেজগুলি পেতে। এটি আপনাকে প্যাকেজগুলি ইনস্টল করে এবং আপনার নিজস্ব সংগ্রহস্থল দিয়ে সংস্করণগুলি পরিচালনা করে একাধিক মেশিনে সেই কাস্টম কার্নেলটি স্থাপন করতে দেয়।"
বাস্তব জগতে, যখন আপনি কাজ করেন তখন ম্যানুয়ালি কম্পাইল করা প্রায়শই অর্থপূর্ণ হয় পুরাতন বা খুব সীমিত হার্ডওয়্যারএকটি সাধারণ উদাহরণ হল একটি পুরাতন নেটবুক একটি অ্যাটম সিপিইউ এবং ১ গিগাবাইট র্যাম সহ, যেখানে অপ্রয়োজনীয় ড্রাইভার এবং সার্ভার বিকল্পে পরিপূর্ণ একটি আধুনিক জেনেরিক কার্নেল, ল্যাটেন্সি এবং অতিরিক্ত সিপিইউ খরচের প্রবর্তন করে যা আপনার পক্ষে বহন করা সম্ভব নয়।
একটি সাধারণ কৌশল হল বর্তমান কার্নেল কনফিগারেশন থেকে শুরু করা (উদাহরণস্বরূপ, অনুলিপি করে) /বুট কনফিগারেশন), এবং সেখান থেকে ক্রপ বা অ্যাডজাস্ট করুন। আপনি প্রিম্পশন মডেলটিকে "" এ পরিবর্তন করতে পারেন।প্রি-এমপিটিবল কার্নেল (কম-লেটেন্সি ডেস্কটপ)"ইন্টারেক্টিভ ডেস্কটপ প্রতিক্রিয়াকে অগ্রাধিকার দিতে, অথবা নির্দিষ্ট I/O শিডিউলার যোগ করতে যেমন বিএফকিউ যান্ত্রিক ডিস্কের অভিজ্ঞতা উন্নত করার জন্য একটি মডিউল আকারে।
আপনার জীবনের অর্ধেক কম্পাইলিং এড়াতে, আরও শক্তিশালী মেশিনে নির্মাণ করা এবং প্রয়োজনে ব্যবহার করা বুদ্ধিমানের কাজ। ক্রস-কম্পাইলিং (উদাহরণস্বরূপ, ARCH এবং সংশ্লিষ্ট টুলচেইনগুলি সামঞ্জস্য করে একটি x86_64 পিসি থেকে একটি Atom-এর জন্য একটি 32-বিট কার্নেল কম্পাইল করা)। তারপর আপনাকে কেবল টার্গেট মেশিনে .deb ফাইলগুলি ইনস্টল করতে হবে এবং GRUB-তে উপযুক্ত এন্ট্রি যুক্ত করতে হবে।
জটিল অংশ হল রক্ষণাবেক্ষণ: এটি যুক্তিযুক্ত ক্যানারি দ্বীপপুঞ্জের নোডগুলিতে নতুন কার্নেল পরীক্ষা করা হচ্ছে, বুট ম্যানেজারে স্পষ্ট রোলব্যাক পাথ থাকে এবং কর্মক্ষমতা বা ড্রাইভার সামঞ্জস্যের ক্ষেত্রে রিগ্রেশন সনাক্ত করার জন্য ট্রানজিশনের সময় লগ এবং মেট্রিক্স রেকর্ড করে।
কম-বিলম্বিত সিস্টেমের জন্য প্রিম্পশন মডেল এবং PREEMPT_RT প্যাচ
কার্নেলের প্রিম্পশন মডেলটি নির্দেশ করে যে একটি চলমান কাজকে কতটা বাধাগ্রস্ত করা যেতে পারে যাতে একটি উচ্চ-অগ্রাধিকারমূলক কাজটি দখল করতে পারে, যা সরাসরি প্রভাবিত করে প্রতিক্রিয়া বিলম্বিতাএর মধ্যে স্ট্যান্ডার্ড কনফিগারেশন বিকল্প এবং রিয়েল-টাইম প্যাচ উভয়ই অন্তর্ভুক্ত।
জেনেরিক কার্নেলগুলি বেশ কয়েকটি বিকল্প অফার করে: কোনও প্রিম্পশন নেই (সার্ভার থ্রুপুটের উপর বেশি মনোযোগী), স্বেচ্ছাসেবী প্রিম্পশন, এবং ডেস্কটপের জন্য প্রি-এমপিটিবল কার্নেলএটি ইন্টারেক্টিভ অ্যাপ্লিকেশনগুলির দ্রুত প্রতিক্রিয়া সময়কে অগ্রাধিকার দেয়। এই সেটিংটি সামঞ্জস্য করলে ডেস্কটপ সিস্টেম, অডিও, এমনকি ভারী লোডযুক্ত পুরানো মেশিনগুলির কর্মক্ষমতা উল্লেখযোগ্যভাবে উন্নত হতে পারে।
যখন আপনাকে আরও এক ধাপ এগিয়ে যেতে হবে, তখন নিম্নলিখিতগুলি উপস্থিত হবে: PREEMPT এবং PREEMPT_RT প্যাচএই পরিবর্তনগুলি কার্নেলের উল্লেখযোগ্য অংশগুলিকে পরিবর্তন করে অ-প্রি-এমপিটিবল অংশগুলিকে কমিয়ে আনে। PREEMPT_RT এমন সিস্টেমগুলির জন্য তৈরি যেখানে সবচেয়ে খারাপ-কেস ল্যাটেন্সি (শুধুমাত্র গড় নয়) খুব কম এবং অনুমানযোগ্য হতে হবে: শিল্প অটোমেশন, পেশাদার অডিও, টেলিযোগাযোগ, অথবা উচ্চ-ফ্রিকোয়েন্সি ট্রেডিং।
PREEMPT_RT চালু করার সিদ্ধান্ত ফ্যাশনের উপর ভিত্তি করে নয়, বরং লেটেন্সি এবং জিটারের নির্দিষ্ট পরিমাপপ্রথমত, RT ট্রির রক্ষণাবেক্ষণ জটিল করার আগে শিডিউলার সেটিংস, CPU অ্যাফিনিটি, sysctl এবং প্রযোজ্য ক্ষেত্রে, ডায়নামিক টিকলেসের মতো কনফিগারেশনগুলি সম্পূর্ণরূপে ব্যবহার করার পরামর্শ দেওয়া হয়।
সামঞ্জস্যতাও বিবেচনা করা প্রয়োজন: কিছু ড্রাইভার এবং সাবসিস্টেমগুলি RT-তে সম্পূর্ণরূপে অভিযোজিত নয় এবং এর জন্য নির্দিষ্ট সংস্করণ বা অতিরিক্ত প্যাচের প্রয়োজন হতে পারে। বুদ্ধিমান পদ্ধতি হল একটি রক্ষণাবেক্ষণ পরিকল্পনা প্রস্তুত করা যা স্পষ্টভাবে রূপরেখা দেয় কখন এবং কীভাবে মূল কার্নেলের নতুন সংস্করণগুলিকে RT শাখার সাথে একীভূত করতে হবে, যা পর্যায়ক্রমে সিঙ্ক্রোনাইজ করে কিন্তু এখনও কিছুটা পিছিয়ে থাকে।
সিপিইউ শিডিউলিং টিউনিং, টিকলেস অপারেশন এবং কোর আইসোলেশন
প্রিম্পশন মডেল বেছে নেওয়ার পাশাপাশি, আপনি CPU শিডিউলিং এবং কার্নেল টাইমার আচরণের সাথে খেলে ল্যাটেন্সি সূক্ষ্ম-টিউন করতে পারেন, বিশেষ করে RHEL-এর মতো এন্টারপ্রাইজ-ভিত্তিক বিতরণগুলিতে।
উদাহরণস্বরূপ, Red Hat Enterprise Linux 8 এর সাথে আসে নিষ্ক্রিয় CPU-এর জন্য ডিফল্টরূপে কার্নেল টিকলেসএটি কোর নিষ্ক্রিয় থাকাকালীন পর্যায়ক্রমিক বাধা এড়িয়ে শক্তি খরচ হ্রাস করে। ল্যাটেন্সি-সংবেদনশীল কাজের চাপের জন্য একটি মোড সক্ষম করা যেতে পারে। কার্নেলের একটি সেটে গতিশীল টিকলেসযাতে শুধুমাত্র একটি CPU ("হোম কোর") বেশিরভাগ সময়-ভিত্তিক কাজ পরিচালনা করে এবং বাকিগুলি পর্যায়ক্রমিক বাধা থেকে যতটা সম্ভব মুক্ত থাকে।
এই কনফিগারেশনটি উপযুক্ত পরামিতি যোগ করে করা হয় GRUB-তে কার্নেল কমান্ড লাইনকনফিগারেশন পুনঃজেনারেট করা, এবং তারপর গুরুত্বপূর্ণ কার্নেল থ্রেডের অ্যাফিনিটি সামঞ্জস্য করা, যেমন RCU থ্রেড বা থ্রেড bdi-flush, যাতে তারা রক্ষণাবেক্ষণের জন্য সংরক্ষিত কোরে থাকে।
এই পদ্ধতিটি প্যারামিটারের সাথে পরিপূরক হতে পারে আইসোলকপাসএটি কোরগুলিকে সাধারণ ব্যবহারকারী-স্থানের কাজগুলি থেকে আলাদা করতে দেয়। কম-বিলম্বিত পরিস্থিতিতে একটি গুরুত্বপূর্ণ অ্যাপ্লিকেশনের জন্য একচেটিয়াভাবে বেশ কয়েকটি কোর সংরক্ষণ করা খুবই সাধারণ, যখন সিস্টেমের বাকি অংশ (ডেমন, ইন্টারাপ্ট, ইত্যাদি) অন্যান্য কোর দ্বারা পরিচালিত হয়।
ডায়নামিক টিকলেস মোড কাজ করছে কিনা তা যাচাই করার জন্য, সহজ পরীক্ষাগুলি চালানো যেতে পারে stress অথবা এমন স্ক্রিপ্ট যা CPU কে এক সেকেন্ডের জন্য ব্যস্ত রাখে এবং পর্যবেক্ষণ করে টাইমার টিক কাউন্টার বিচ্ছিন্ন কোরে প্রতি সেকেন্ডে ইন্টারাপ্টের সংখ্যা হাজার হাজার থেকে কমে মাত্র একটিতে নেমে আসে, যা একটি লক্ষণ যে পর্যায়ক্রমিক টাইমার অদৃশ্য হয়ে গেছে।
লেটেন্সির উপর জোর দিয়ে মেমোরি এবং স্টোরেজ ব্যবস্থাপনা
কার্নেল যেভাবে মেমরি এবং ডিস্ক I/O পরিচালনা করে তার উপর বিশাল প্রভাব পড়ে অ্যাপ্লিকেশন দ্বারা অনুভূত বিলম্বিতাবিশেষ করে ডাটাবেস এবং পরিষেবাগুলিতে যা অনেক ছোট এবং ঘন ঘন ক্রিয়াকলাপ সম্পাদন করে।
মেমোরির দিক থেকে, কমিয়ে দিন vm.swappiness সোয়াপের ব্যবহার কমিয়ে দিন (যা প্রায় সবসময় RAM এর তুলনায় অনেক ধীর), vm.vfs_cache_pressure এটি নিয়ন্ত্রণ করে যে সিস্টেমটি কত দ্রুত ইনোড এবং ডেন্ট্রি ক্যাশে সাফ করার চেষ্টা করছে, এবং vm.nr_বিশাল পৃষ্ঠাগুলি এটি ডাটাবেস বা JVM-এর মতো ভারী লোডের জন্য স্ট্যাটিক হিউজপেজ সংরক্ষণের অনুমতি দেয়, যার ফলে TLB ওভারহেড হ্রাস পায়।
স্টোরেজে, বেছে নিন ডিস্কের ধরণ অনুসারে উপযুক্ত I/O শিডিউলার এটা খুবই গুরুত্বপূর্ণ। আধুনিক SSD গুলিতে, সাধারণত এটি ব্যবহার করা ভালো... none o mq-deadlineযেখানে মেকানিক্যাল ডিস্ক এবং মাল্টিটাস্কিং সিস্টেমে, ন্যায্যতার জন্য ডিজাইন করা অ্যালগরিদমগুলি আরও ভাল হতে পারে, যেমন বিএফকিউঅতিরিক্তভাবে, ফাইল সিস্টেম মাউন্ট করা যেমন বিকল্প সহ noatime y nodiratime প্রতিবার কোনও ফাইল বা ডিরেক্টরি অ্যাক্সেস করার সময় অপ্রয়োজনীয় লেখা এড়িয়ে চলুন।
ফাইল সিস্টেম সম্পর্কে, ext4 এবং XFS এগুলোই সবচেয়ে সাধারণ বিকল্প: একটি সু-সংগঠিত ext4 একটি নিরাপদ বাজি, অন্যদিকে XFS উচ্চ কনকারেন্সিতে আরও ভালোভাবে স্কেল করার প্রবণতা রাখে। খুব কঠিন পরিস্থিতিতে, RAID (ডাটাবেসের জন্য RAID 10, অস্থায়ী স্ক্র্যাচ স্টোরেজের জন্য RAID 0) একটি ভালো শিডিউলারের সাথে একত্রিত করলে গড় ল্যাটেন্সি এবং সর্বোপরি, পরিবর্তনশীলতা হ্রাস পেতে পারে।
লিনাক্স এবং EC2-তে কম ল্যাটেন্সির জন্য নেটওয়ার্ক এবং কার্নেল অপ্টিমাইজেশন
উচ্চ-কার্যক্ষমতা সম্পন্ন নেটওয়ার্কিং অ্যাপ্লিকেশনগুলিতে, ল্যাটেন্সি কেবল হার্ডওয়্যার বা দূরত্বের উপর নির্ভর করে না, বরং কিভাবে TCP/IP স্ট্যাক এবং কার্নেল নিজেই কনফিগার করা হয়এটি বিশেষ করে ENA ইন্টারফেস সহ Amazon EC2 এর মতো ক্লাউড ইনস্ট্যান্সগুলিতে দৃশ্যমান।
শুরুতেই, বাহ্যিক কারণগুলি যেমন সংখ্যা হ্রাস করা গুরুত্বপূর্ণ নেটওয়ার্ক হপস প্যাকেজগুলি কী কী কাজ করে: আরও সরাসরি টপোলজি ব্যবহার করে, ব্যাকএন্ডের কাছাকাছি লোড ব্যালেন্সার বা অপ্টিমাইজড অ্যাভাইবিলিটি জোন অপারেটিং সিস্টেম স্পর্শ করার আগেই ভ্রমণের সময় মিলিসেকেন্ডে কমিয়ে দেয়।
কার্নেলের মধ্যে, নেটওয়ার্ক কনফিগারেশন বৃদ্ধি করা জড়িত ফাইল বর্ণনাকারী (ulimit -n), আকার গ্রহণ এবং প্রেরণ বাফার সহ নেট.কোর.আরএমইএম_ম্যাক্স, নেট.কোর.ডব্লিউএমইএম_ম্যাক্স, নেট.আইপিভি৪.টিসিপি_আরএমইএম, নেট.আইপিভি৪.টিসিপি_ডব্লিউএমইএমএবং বিকল্পগুলি সক্রিয় করুন যেমন টিসিপি ফাস্ট ওপেন সংযোগ স্থাপনের বিলম্ব কমাতে।
AWS ENA ইন্টারফেসে, ইন্টারাপ্ট মডারেশন একটি গুরুত্বপূর্ণ ভূমিকা পালন করে: ডিফল্টরূপে, ড্রাইভার IRQ-এর সংখ্যা কমাতে প্যাকেটগুলিকে গ্রুপ করে। rx-usecs এবং tx-usecsআপনি যদি ল্যাটেন্সি সর্বনিম্ন পর্যায়ে কমাতে চান, তাহলে আপনি এই মডারেশনটি অক্ষম করতে পারেন ethtool -Crx-usecs এবং tx-usecs কে শূন্যে সেট করলে ল্যাটেন্সি কমবে কিন্তু ইন্টারাপ্ট ওভারহেড বৃদ্ধি পাবে, তাই লোডের উপর নির্ভর করে একটি ব্যালেন্স খুঁজে বের করতে হবে।
এটি ব্যবহার করা যেতে পারে একাধিক কোর জুড়ে IRQ বিতরণের জন্য irqbalance, অথবা এটি অক্ষম করুন এবং নির্দিষ্ট কোরের সাথে ইন্টারাপ্ট এবং নেটওয়ার্ক কিউ (RSS/RPS) অ্যাফিনিটি ম্যানুয়ালি সেট করুন, যা অতি-নিম্ন ল্যাটেন্সি পরিবেশে অথবা DPDK ব্যবহার করার সময় এবং কার্নেল স্ট্যাকের একটি ভাল অংশ এড়িয়ে যাওয়ার সময় খুবই সাধারণ।
বিবেচনা করার মতো আরেকটি প্যারামিটার হল সিপিইউ সি অবস্থাগভীর ঘুমের অবস্থা বিদ্যুৎ খরচ কমায় কিন্তু কোর "জাগ্রত" হলে বিলম্ব ঘটায়। প্রতিক্রিয়া বিলম্ব কমাতে, আপনি এই গভীর অবস্থাগুলি সীমিত করতে পারেন, উচ্চ শক্তি খরচ এবং অন্যান্য কোরগুলিতে টার্বো বুস্টের জন্য কম হেডরুম গ্রহণ করে। প্রতিটি পরিবেশে ব্যবহৃত ওয়াট এবং প্রাপ্ত মাইক্রোসেকেন্ডের মধ্যে একটি মিষ্টি স্থান থাকে।
ল্যাটেন্সি কমাতে CPU, পরিষেবা এবং অ্যাপ্লিকেশন অপ্টিমাইজেশন
কার্নেল ছাড়াও, আশেপাশের পরিবেশ সামগ্রিক বিলম্বিতা সম্পর্কে অনেক কিছু বলতে পারে: থেকে সিস্টেমে সক্রিয় পরিষেবাগুলি প্রতিটি অ্যাপ্লিকেশনের নির্দিষ্ট কনফিগারেশন পর্যন্ত।
একটি উচ্চ-কার্যক্ষমতা সম্পন্ন সার্ভার শুধুমাত্র চালানো উচিত যে ভূতগুলো সত্যিই প্রয়োজনীয়ব্যাকএন্ড মেশিনে ব্লুটুথ, প্রিন্টিং, অথবা নেটওয়ার্ক অটো-ডিসকভারি (CUPS, Avahi, ইত্যাদি) এর মতো পরিষেবাগুলি কোনও সুবিধা প্রদান না করে কেবল CPU, মেমরি এবং I/O ব্যবহার করে। পর্যালোচনা করুন systemctl list-unit-files --state=enabled আর অপ্রয়োজনীয় জিনিস বন্ধ করা আপনার করা সবচেয়ে সস্তা এবং কার্যকর কাজগুলির মধ্যে একটি।
গুরুত্বপূর্ণ প্রক্রিয়াগুলিকে অগ্রাধিকার দেওয়ার জন্য, আপনি যেমন সরঞ্জামগুলি ব্যবহার করতে পারেন রেনিস, সিআরটি এবং টাস্কসেটএকটি প্রক্রিয়ার অগ্রাধিকার (renice) সামঞ্জস্য করা, এটিকে রিয়েল-টাইম শিডিউলিং দেওয়া (chrt -f 99), অথবা নির্দিষ্ট কোরে (টাস্কসেট) বরাদ্দ করা অন্যান্য কাজের সাথে হস্তক্ষেপ হ্রাস করে, ডাটাবেস, VoIP, স্ট্রিমিং বা ট্রেডিং পরিষেবাগুলির জন্য CPU পূর্বাভাসযোগ্যতা উন্নত করে।
অ্যাপ্লিকেশন স্তরে, টিউনিং কার্নেল টিউনিংয়ের মতোই গুরুত্বপূর্ণ। ওয়েব সার্ভার যেমন এনগিনেক্স বা অ্যাপাচি তাদের কর্মীদের সূক্ষ্ম-টিউনিং, কিপলাইভ, ক্যাশে এবং কম্প্রেশন প্রয়োজন। ডাটাবেস যেমন পোস্টগ্রেএসকিউএল বা মাইএসকিউএল কম এবং স্থিতিশীল ল্যাটেন্সি অর্জনের জন্য তাদের বাফার সাইজ, চেকপয়েন্ট, সংযোগ পুল এবং সিঙ্ক্রোনাস লেখার প্যারামিটার পর্যালোচনা করতে হবে।
JVM গুলিও একটি ভূমিকা পালন করে: আবর্জনা সংগ্রহকারীদের নির্বাচন করা যেমন G1GC বা ZGC হিপের আকার সামঞ্জস্য করলে বিরতি কমানো সম্ভব, যা বাহ্যিক দৃষ্টিকোণ থেকে ল্যাটেন্সি হিসেবে দেখা দেয়। ভার্চুয়ালাইজড এবং কন্টেইনারাইজড পরিবেশে, সঠিক বিতরণ অত্যন্ত গুরুত্বপূর্ণ। vCPU, vRAM, এবং I/O কোটা এটি নীরব বিতর্ক এড়ায় যা পরবর্তীতে ডিস্ক বা স্যাচুরেটেড CPU-তে অন্তহীন সারি হিসাবে প্রদর্শিত হয়।
কার্নেল এবং সিস্টেম পর্যবেক্ষণ এবং বেঞ্চমার্কিং
যদি আপনি প্রভাব পরিমাপ না করেন তবে এই সমস্ত টিউনিং অর্থহীন। মূল বিষয় হল সমন্বয় করা। পুনরুৎপাদনযোগ্য কর্মক্ষমতা পরীক্ষার মাধ্যমে ক্রমাগত পর্যবেক্ষণযাতে কার্নেল বা sysctl-এর প্রতিটি পরিবর্তন বস্তুনিষ্ঠ তথ্য দিয়ে মূল্যায়ন করা যায়।
সিস্টেমের সামগ্রিক অবস্থা দেখতে, আপনি ক্লাসিক টুল ব্যবহার করতে পারেন যেমন htop, vmstat, iotop o sarযখন আপনার আরও বিস্তারিত তথ্যের প্রয়োজন হয়, তখন নির্দিষ্ট কার্নেল টুলগুলি কার্যকর হয়, যেমন পারফর্ম এবং এফট্রেসযা আপনাকে শিডিউলারের আচরণ, ইন্টারাপ্ট এবং অভ্যন্তরীণ কলগুলি যথেষ্ট নির্ভুলতার সাথে ট্রেস করতে দেয়।
উৎপাদন পরিবেশে, মেট্রিক্স সিস্টেম স্থাপন করার পরামর্শ দেওয়া হয় যেমন প্রমিথিউস, সংগৃহীত অথবা রপ্তানিকারকদের সাথে সিস্টেমস্ট্যাট যা CPU কাউন্টার, I/O, ডিস্ক এবং নেটওয়ার্ক ল্যাটেন্সি, প্রসেস কিউ ইত্যাদি প্রকাশ করে। গ্রাফানা বা অনুরূপ সরঞ্জামগুলিতে দৃশ্যমান এই ডেটা, শেষ ব্যবহারকারী সমস্যা লক্ষ্য করার আগেই রিগ্রেশন বা অসঙ্গতি সনাক্ত করতে সহায়তা করে।
বেঞ্চমার্কিংয়ের জন্য, ধারণাটি হল প্রকৃত কাজের চাপ প্রতিলিপি করা এবং প্রতিটি পরিবর্তনের "আগে এবং পরে" তুলনা করা। সরঞ্জাম যেমন sysbench (CPU এবং ডাটাবেসের জন্য), fio (ডিস্কের জন্য) অথবা iperf3 (নেটওয়ার্কের জন্য) তারা পুনরাবৃত্তিযোগ্য পরিস্থিতি তৈরির অনুমতি দেয়। ডকুমেন্টেশন অপরিহার্য। কার্নেল সংস্করণ, sysctl কনফিগারেশন, হার্ডওয়্যার এবং পরীক্ষার পরামিতি যাতে তুলনাগুলি সময়ের সাথে সাথে অর্থবহ হয়।
বাস্তবে, লিনাক্স কার্নেল অপ্টিমাইজেশন একটি পুনরাবৃত্তিমূলক প্রক্রিয়া: আপনি কয়েকটি পরিবর্তন পরীক্ষা করেন, ফলাফল পরিমাপ করেন, আসল সুবিধা কী দেয় তা রাখেন এবং বাকিগুলি বাতিল করেন। ভালো পরিবর্তন শাসনের মাধ্যমে, আপনি নতুন কার্নেল সংস্করণগুলিতে (যেমন শিডিউলার, গ্রাফিক্স, পাওয়ার, বা নেটওয়ার্কিং বর্ধিতকরণ সহ সাম্প্রতিক সিরিজ) উন্নতিগুলিকে আপনার অ্যাপ্লিকেশনগুলির জন্য পরিমাপযোগ্য সুবিধাগুলিতে রূপান্তর করতে পারেন, তা সে অন-প্রিমিসেস সার্ভার, ক্লাউডে, বা চাহিদাপূর্ণ ওয়ার্কস্টেশনে হোক না কেন।
কার্নেল স্থাপত্য জ্ঞান, sysctl এর সাথে সূক্ষ্ম-সুরকরণ, নিয়ন্ত্রিত সংকলন, রিয়েল-টাইম প্যাচের নির্বাচনী ব্যবহার এবং একটি ভাল মেট্রিক্স সিস্টেমের সমন্বয় একজন প্রশাসক বা অপারেশন দলকে অর্জন করতে সাহায্য করে দ্রুত প্রতিক্রিয়া, কম লেটেন্সি এবং উন্নত সামগ্রিক স্থিতিশীলতা সামান্যতম উস্কানিতে হার্ডওয়্যার পরিবর্তন না করে বা সিস্টেমের নিরাপত্তার সাথে আপস না করে।
সুচিপত্র
- লিনাক্স কার্নেল আর্কিটেকচার এবং ল্যাটেন্সির মূল বিষয়গুলি
- লেটেন্সি এবং কর্মক্ষমতা উন্নত করতে sysctl এর মাধ্যমে সমন্বয়
- কাস্টম কার্নেল কম্পাইল এবং রক্ষণাবেক্ষণ
- কম-বিলম্বিত সিস্টেমের জন্য প্রিম্পশন মডেল এবং PREEMPT_RT প্যাচ
- সিপিইউ শিডিউলিং টিউনিং, টিকলেস অপারেশন এবং কোর আইসোলেশন
- লেটেন্সির উপর জোর দিয়ে মেমোরি এবং স্টোরেজ ব্যবস্থাপনা
- লিনাক্স এবং EC2-তে কম ল্যাটেন্সির জন্য নেটওয়ার্ক এবং কার্নেল অপ্টিমাইজেশন
- ল্যাটেন্সি কমাতে CPU, পরিষেবা এবং অ্যাপ্লিকেশন অপ্টিমাইজেশন
- কার্নেল এবং সিস্টেম পর্যবেক্ষণ এবং বেঞ্চমার্কিং