আমার কিছু অদলবদল কেন ব্যবহার করা হচ্ছে, যখন আমার এখনও অব্যবহৃত র‌্যাম রয়েছে?


9

সমস্যার চেয়ে কৌতূহল বেশি; এবং, আমি স্বীকার করি, একটি বিব্রতকরভাবে প্রাথমিক প্রশ্নটির কিছু:

আমি লক্ষ করেছি যে অনেক সময়, আমার লিনাক্স মেশিনে আমার used 600MB অব্যবহৃত র্যাম থাকা সত্ত্বেও আমার ব্যবহারের জন্য ~ 500MB অদলবদল থাকবে।

আমার নিষ্পাপ উচ্চ-স্তরের বোঝাপড়াটি ছিল, র‌্যাম শেষ হয়ে না যাওয়া পর্যন্ত অদলবদল স্থান কিক করে না।

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

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

আমার স্পষ্ট করে বলা উচিত, আমার লিনাক্স সার্ভারে 2 গিগাবাইট র‌্যাম এবং 2 জিবি স্বাপের স্থান রয়েছে।


1
4 টি প্রশ্ন কেন এই প্রশ্নটি বন্ধ করে দেবে?

2
@ অ্যারন: আপনার খারাপ প্রশ্ন আছে তা নয়। আপনি এটি সিস্টেম ম্যানেজমেন্টের ক্ষেত্রে সবেমাত্র উচ্চারণ করেছেন যাতে শক্তি ব্যবহারকারী বা সার্ভার প্রশাসকগুলির সাথে এটি আরও ভাল ফিট করে। আপনি যে কৌতূহল হিসাবে এটি সম্পর্কে আশ্চর্য হয়ে গেছেন তা পাওয়ার ইউজার পিওভির মতো মনে হয়।

উত্তর:


11

অব্যবহৃত RAM এর অংশ HDD এর ক্যাশে হিসাবে ব্যবহার আসলে। আপনি যদি এটির বিষয়ে চিন্তা করেন, আপনি আসলে আপনার ডিস্কের কিছু অংশগুলি প্রায়শই পড়েন যে আপনি র‌্যামের কিছু অংশ অ্যাক্সেস করেন। এইচডিডি ডেটা ক্যাশে রাখতে র‌্যাম ব্যবহার করার সময়, এই ডিস্কটি এই র‌্যামটি রাখার অর্থ দেয়।


7

জিনিসগুলি আগে থেকেই অদলবদল করার অর্থবোধ করে যেহেতু আপনার যখন সত্যিই মেমরির প্রয়োজন হয় তখন ডিস্ক অ্যাক্সেস দিয়ে কার্নেলটি সম্পন্ন না হওয়া পর্যন্ত আপনাকে অপেক্ষা করতে হবে না।

উদাহরণস্বরূপ, ধরুন যে আপনি একটি বড় চিত্র খুলতে চান। চিত্রটি লোড হয়ে গেলে, এটি র‌্যামের 300MB লাগে takes যদি কার্নেল এটির মতো সমস্ত র‍্যাম ব্যবহার করে তবে আপনার চিত্রটি লোড করার জন্য কার্নেলটি 200MB কে র‌্যাম থেকে ডিস্কে স্থানান্তরিত করতে হবে। যদি এটি সক্রিয়ভাবে র্যামটি আগেই খালি করে দেয় তবে আপনি কয়েকটি মিলিসেকেন্ড সংরক্ষণ করতে পারেন।


7

২ টি কারণ:

  1. (@dtrosset) আরও ক্যাশে এবং বাফার দিতে লিনাক্স প্রোগ্রামগুলির অব্যবহৃত বিটগুলিকে অদলবদল করবে।
  2. আপনি অতীতে আরও স্মৃতি ব্যবহার করতে পারেন এবং কিছু জিনিস অদলবদল করতে পারেন, এবং এটি অদলবদল করা হয়নি কারণ এটি ব্যবহৃত হয়নি, যদিও এখন যা জোর করে ফেলেছে তা চলে গেছে।

1

অন্যান্য উত্তরগুলির পাশাপাশি, আপনি কোনও বরাদ্দ মেমরির জন্য সমর্থন প্রয়োজন লিনাক্স কনফিগার করতে পারেন, এমনকি যদি প্রোগ্রামগুলি এটি ব্যবহার না করে।

ওভার কমিট মেমরি এবং OOM হত্যাকারীকে ভয় করা লিনাক্স অভিজ্ঞতার প্রয়োজনীয় অংশ নয়। কেবলমাত্র সিসটেল প্যারামিটারটি ভিএম / ওভারকমিট_মেমরি 2 সেট করে ওভারকমিট আচরণ বন্ধ করে দেয় এবং ওওএম কিলারকে চিরতরে বেড়াতে থাকে। বেশিরভাগ আধুনিক সিস্টেমে বেশিরভাগ পরিস্থিতিতে পর্যাপ্ত অদলবদল সরবরাহ করার জন্য পর্যাপ্ত ডিস্কের স্থান থাকা উচিত। অতিরিক্ত কম মেমরি ফুরিয়ে যাওয়ার সময় পোষা প্রাণীর প্রক্রিয়াগুলি নিহত হওয়ার চেষ্টা করার পরিবর্তে পরিস্থিতি পুরোপুরি এড়ানো সহজতর হতে পারে। [ ওওএম ঘাতক থেকে অবকাশ ]

যদি কোনও প্রোগ্রাম মেমোরি বরাদ্দ করে তবে কার্নেলটি সোপেলের আরও পৃষ্ঠাগুলিকে প্রতিশ্রুতিবদ্ধ হিসাবে চিহ্নিত করতে পারে। এই ইঙ্গিতটি কার্নেলের মেমরি ম্যানেজারে সঞ্চয় করা আছে, আসল ডিস্কের স্পেসটি এখনও স্পর্শ করা হয়নি। যতক্ষণ না সেই মেমরিটি ব্যবহার করা হয়, ততক্ষণ কিছুই আসলে অভ্যন্তরে বাইরে যেতে হয় না। যদি সেগুলি কখনও ব্যবহার না করা হয়, তবে অদলবদলের ব্যবহার পারফরম্যান্সকে প্রভাবিত না করে ওঠানামা করবে।

যেহেতু প্রক্রিয়াগুলি তাদের নিজস্ব ঠিকানা স্পেস বা "ভিউ" উপস্থাপন করা হয় (এটি স্ব্যাপটি প্রথম স্থানে কিভাবে কাজ করে), কার্নেলের দ্বারা এটি কীভাবে পরিচালিত হয় সে সম্পর্কে অনেকগুলি প্রবণতা রয়েছে। উপরের লিঙ্কযুক্ত নিবন্ধ থেকেও কাঁটাচামচ উদাহরণ ব্যবহার করা, যেহেতু এটি প্রচুর অব্যবহৃত মেমরির তাজা করে বরাদ্দ দেওয়ার চেয়ে ভাগ করে নেওয়া মেমরি পৃষ্ঠাগুলি বেশি থাকে, তাই অদলবদলের ব্যবহারের সংখ্যা বাড়িয়ে মেমরিটিকে অনুলিপি-অন-লিখিত বরাদ্দ করা যায়। যখন এটি আসলে লিখিত (যা সম্ভবত না ঘটে), তারপরে সেই "প্রতিশ্রুতিবদ্ধ অদলবদল" কোনও অব্যবহৃত র‌্যাম (তারপরে র‌্যামের ব্যবহার বাড়ানো এবং অদলবদলের ব্যবহার হ্রাস করা) দিয়ে প্রতিস্থাপন করা যেতে পারে। বরাদ্দকৃত 500MB সহ এমন একটি প্রক্রিয়াটি কল্পনা করুন যা সমস্ত বা প্রায় সমস্ত র‌্যাম ব্যবহারে মেশিনে কাঁটাচামচ করে। যদি অদলবদলে 500 এমবি পাওয়া যায় (এবং ডিস্কের স্থানটি সস্তা হয়, আজকের টিবি ড্রাইভের 1% কত বড়?: পি), কোনও মেমোরি অনুলিপি করতে হয় না (এখনও,

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

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

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