লিনাক্স পেজিংয়ের কি এইভাবে আচরণ করা উচিত?


26

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

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

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char** argv) {
   long int max = -1;
   int mb = 0;
   long int size = 0;
   long int total = 0;
   char* buffer;

   if(argc > 1)
     {
       max = atol(argv[1]);
       size = atol(argv[2]);
     }
   printf("Max: %lu bytes\n", max);
   while((buffer=malloc(size)) != NULL && total < max) {
       memset(buffer, 0, size);
       mb++;
       total=mb*size;
       printf("Allocated %lu bytes\n", total);       
   }      
   sleep(3000000);
   return 0;
}

কোডের দ্বিতীয় অংশটি ঠিক প্রথমটি যা করে তা sleep(1);হ'ল এর পরে তার অধিকার রয়েছে printf(আমি পুরো কোডটির পুনরাবৃত্তি করব না)। সিস্টেমটি যখন পৃষ্ঠাগুলি "মৃদু" আকারে আস্তে আস্তে আস্তে আস্তে আস্তে আস্তে আস্তে আস্তে আস্তে আস্তে আস্তে আস্তে নতুন মেমরির বরাদ্দ করার অনুরোধ করে তা ব্যবহার করা হবে (যাতে সিস্টেমটি অবশ্যই পৃষ্ঠাগুলি অদলবদল করতে সক্ষম হয়) এবং নতুন অনুরোধগুলি বজায় রাখুন)।

সুতরাং, কোড দুটি টুকরো টুকরো টুকরো টাক করে, আসুন স্বীকৃত এক্সেস্ট ফাস্টেটার এবং স্লোইটারকে কল করুন, আসুন এটি করা যাক:

1) আপনার প্রিয় গুই শুরু করুন (অবশ্যই কঠোরভাবে প্রয়োজনীয় নয়)

২) কিছু মেম / স্বাপ মিটার শুরু করুন (উদাঃ watch -n 1 free)

3) একাধিক উদাহরণ শুরু করুন fasteater x yযেখানে x গিগা বাইটের ক্রম এবং y মেগাবাইটের ক্রম। যতক্ষণ না আপনি প্রায় মেষটি পূরণ করেন ততক্ষণ এটি করুন।

4) এর একটি উদাহরণ আবার শুরু করুন sloweater x y, যেখানে x গিগা বাইটের ক্রম এবং y হ'ল মেগাবাইটের ক্রম।

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

ক) মেষটি প্রায় পূর্ণ

খ) অদলবদলও প্রায় পূর্ণ (মনে রাখবেন, এটি শুরুর দিকে খালি ছিল)

গ) কোনও ওম কিলারের হস্তক্ষেপ নেই।

এবং লক্ষ্য করুন যে অদলবদলটি একটি এসএসডি-তে রয়েছে। সুতরাং, সিস্টেমটি ধীরে ধীরে (এবং মাত্র কয়েক মেগাবাইটের) স্লোটারের অনুরোধগুলির জন্য জায়গা তৈরি করতে ধীরে ধীরে র্যাম থেকে অদলবদল (সম্ভবত দ্রুত ঘুমাচ্ছে এমন ফাস্টটিটারগুলি থেকে) পৃষ্ঠাগুলি সরিয়ে নিতে অক্ষম বলে মনে হচ্ছে।

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

কেউ কি এটি পরীক্ষা করতে পারে? এবং সম্ভবত এমন কেউ যার বিএসডি সিস্টেম রয়েছে।

আপডেট 1 আমি নীচে মন্তব্যে মার্ক প্লটনিকের পরামর্শ অনুসরণ করেছিলাম vmstat 1 >outএবং পেজিং পরীক্ষাটি চালিয়ে যাওয়ার আগে আমি শুরু করেছিলাম । আপনি নীচের ফলাফলটি দেখতে পাচ্ছেন (আমি পুরো প্রাথমিক অংশটি কেটেছি যেখানে অদলবদল জড়িত ছাড়াই রাম পূর্ণ হয়):

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0   6144 160792      8 272868    0    0     0     0  281 1839  1  0 99  0  0
0  0   6144 177844      8 246096    0    0     0     0  425 2300  1  1 99  0  0
0  0   6144 168528      8 246112    0    0    16     0  293 1939  1  0 99  0  0
0  0   6144 158320      8 246116    0    0     0     0  261 1245  0  0 100  0  0
2  0  10752 161624      8 229024    0 4820 17148  4820  845 3656  1  2 97  0  0
2  0  10752 157300      8 228096    0    0 88348     0 2114 8902  0  5 94  1  0
0  0  10752 176108      8 200052    0    0 108312     0 2466 9772  1  5 91  3  0
0  0  10752 170040      8 196780    0    0 17380     0  507 1895  0  1 99  0  0
0 10  10752 160436      8 191244    0    0 346872    20 4184 17274  1  9 64 26  0
0 29 12033856 152888      8 116696 5992 15916880 1074132 15925816 819374 2473643  0 94  0  6  0
3 21 12031552 295644      8 136536 1188    0 11348     0 1362 3913  0  1 10 89  0
0 11 12030528 394072      8 151000 2016    0 17304     0  907 2867  0  1 13 86  0
0 11 12030016 485252      8 158528  708    0  7472     0  566 1680  0  1 23 77  0
0 11 12029248 605820      8 159608  900    0  2024     0  371 1289  0  0 31 69  0
0 11 12028992 725344      8 160472 1076    0  1204     0  387 1381  0  1 33 66  0
0 12 12028480 842276      8 162056  724    0  3112     0  357 1142  0  1 38 61  0
0 13 12027968 937828      8 162652  776    0  1312     0  363 1191  0  1 31 68  0
0  9 12027456 1085672      8 163260  656    0  1520     0  439 1497  0  0 30 69  0
0 10 12027200 1207624      8 163684  728    0   992     0  411 1268  0  0 42 58  0
0  9 12026688 1331492      8 164740  600    0  1732     0  392 1203  0  0 36 64  0
0  9 12026432 1458312      8 166020  628    0  1644     0  366 1176  0  0 33 66  0

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

আপডেট 2: আমি ফ্রিবিএসডি একটি দ্রুত ইনস্টলেশন করেছি এবং লিনাক্সের সাথে ব্যবহৃত একই বরাদ্দ স্কিমটি পুনরাবৃত্তি করেছি ... এবং এটি যেমন হওয়া উচিত তত মসৃণ ছিল। ফ্রিবিএসডি পৃষ্ঠাগুলি ধীরে ধীরে অদলবদল করছিলো যখন ধীরগতিতে তার সমস্ত 10MB মেমরির বরাদ্দ দেওয়া হয়। কোনও ধরণের একা এইচটি নয় ... ডাব্লুটিএফ এখানে চলছে ?!

আপডেট 3: আমি কার্নেল বাগট্র্যাকারের সাথে একটি বাগ দায়ের করেছি। এটি কিছুটা মনোযোগ পাচ্ছে বলে মনে হচ্ছে ... আঙ্গুলগুলি পেরিয়ে গেছে ...


2
যেমনটি আমি উল্লেখ করেছি, সবকিছু লক হয়ে গেছে। আমি অন্য সিস্টেম থেকে এটি বেরিয়ে আসার চেষ্টা করেছি মাত্র কয়েকবার।
জন টেরাগন

2
আমি stdout আউটপুট দিয়ে vmstat 1 শুরু করা হলে, আমি মনে করি এটি হিমশীতল হতে চলেছে। তবে আপনি ঠিক বলেছেন, আমি কেবল vmstat 1>somefileসিস্টেম থেকে সরাসরি শুরু করতে পারি এবং তারপরে সিস্টেমটি পুনরুত্থিত হওয়ার পরে এটি কী রিপোর্ট করে তা দেখতে পেতাম । আমি চেষ্টা করব।
জন টেরাগন 11

2
আমি ভিএমস্ট্যাট ব্যবহার করেছি। উপরের আপডেটের ফলাফল।
জন টেরাগন

3
swappinessডিফল্ট 60 (এটি পরিবর্তন করা আরও ভাল ফলাফল দেয় না)। vmstatরানটির সাথে ব্যবহৃত কার্নেলটি 4.14.35 তবে আমি 4.15, 4.16 চেষ্টা করেছি এবং আমি এমনকি 4.0 সিরিজে ফিরে এসেছি (!): সর্বদা একই আচরণ। এবং এটি এমন নয় যে আমি কিছু অদ্ভুত বিতরণ ব্যবহার করছি, এটি কেবল ডেবিয়ান। আমি ডেবিয়ান থেকে কার্নেল চিত্রগুলি ব্যবহার করি না (এটি আমার অস্বাভাবিক কনফিগারগুলি নেই) তবে আমি সেগুলির মধ্যে একটির চেষ্টা করেছি ... একই আচরণ।
জন টেরাগন

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

উত্তর:


1

এটি হ'ল থ্রেশ-রক্ষার জন্য বিদ্যমান।

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


-3

আপনি কেবল মেমরি বরাদ্দ করছেন - আপনি আসলে এতে কিছুই রাখেন না। একটি "সাধারণ" প্রোগ্রাম একটি অংশ বরাদ্দ এবং তারপরে এটি ব্যবহার শুরু করে। বরাদ্দ মেমরির ব্যবহারের মতো নয়।


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

প্রকৃতপক্ষে, আমি আমার ডেস্কটপে এটি 2 গিগাবাইট ব্যবহৃত, 6 জিবি বিনামূল্যে ব্যবহার করে সংকলন করেছি এবং চালিত করেছি। এটি প্রথমে ধীর গতিতে প্রথমে অদলবদল হয়েছিল এবং এটি যখন সীমাটি আঘাত করেছিল তখনই এটি আক্রমণাত্মকভাবে বদলে যায় - যার ফলে বিভিন্ন জিইআইআই ক্রিয়াকলাপগুলি দখল করতে পারে।
জেরেমি বোডেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.