লিনাক্স কার্নেলের স্মৃতি সীমা


12

আমার একটা বিভ্রান্তির সমস্যা আছে আমার কাছে একটি লাইব্রেরি রয়েছে যা কাস্টমাইজড সিডিবিগুলি চালানোর জন্য এসএজি ব্যবহার করে। এমন বেশ কয়েকটি সিস্টেম রয়েছে যা নিয়মিতভাবে এস.এ.জে মেমরি বরাদ্দ নিয়ে সমস্যা থাকে । সাধারণত, এসএজি ড্রাইভারের প্রায় 4 এমবি হার্ড সীমা থাকে তবে আমরা এটি কয়েকটি সিস্টেমে ~ 2.3mb অনুরোধ সহ দেখতে পাচ্ছি। অর্থাৎ সিডিবিরা ২.৩ এমএম স্থানান্তরের জন্য বরাদ্দ দেওয়ার প্রস্তুতি নিচ্ছে। এখানে কোনও সমস্যা হওয়া উচিত নয়: 2.3 <4.0।

এখন, মেশিনের প্রোফাইল। এটি একটি 64 বিট সিপিইউ তবে সেন্টস 6.0 32-বিট চালায় (আমি এগুলি তৈরি করি নি বা এই সিদ্ধান্তের সাথে আমার কিছু করার নেই)। এই সেন্টস ডিস্ট্রোর কার্নেল সংস্করণটি 2.6.32। তাদের র‌্যাম 16 জিবি রয়েছে।

এখানে সিস্টেমে মত মেমোরি ব্যবহার সৌন্দর্য (যদিও, কারণ স্বয়ংক্রিয় পরীক্ষার সময় এই ত্রুটি দেখা দেয়, আমি এখনও যাচাই করা যদি এই অবস্থায় এই errno থেকে ফিরিয়ে দেওয়া হয় প্রতিফলিত কি SG )।

top - 00:54:46 up 5 days, 22:05,  1 user,  load average: 0.00, 0.01, 0.21
Tasks: 297 total,   1 running, 296 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  15888480k total,  9460408k used,  6428072k free,   258280k buffers
Swap:  4194296k total,        0k used,  4194296k free,  8497424k cached

আমি এই নিবন্ধটি লিনাক্স জার্নাল থেকে পেয়েছি যা কার্নেলের মধ্যে মেমরি বরাদ্দ করার বিষয়ে। নিবন্ধটি তারিখযুক্ত তবে এটি 2.6 (মাথার লেখক সম্পর্কে কিছু মন্তব্য) এর সাথে সম্পর্কিত বলে মনে হচ্ছে। নিবন্ধটিতে উল্লেখ করা হয়েছে যে কার্নেলটি প্রায় 1 জিবি মেমরির মধ্যে সীমাবদ্ধ (যদিও এটি দৈহিক এবং ভার্চুয়াল বা মোটের জন্য প্রতিটি 1 জিবি যদি পাঠ্য থেকে সম্পূর্ণ পরিষ্কার নয়)। আমি ভাবছি এটি ২.6.৩২ এর সঠিক বিবৃতি কিনা। শেষ পর্যন্ত, আমি ভাবছি যে এই সিস্টেমগুলি এই সীমাটি ছুঁচ্ছে।

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

উত্তর:


21

32-বিট সিস্টেমে লিনাক্স কার্নেল মেমরির জন্য 1 জিআইবি সীমাটি 32-বিট সম্বোধনের ফলস্বরূপ এবং এটি বেশ শক্ত সীমাবদ্ধ। এটি পরিবর্তন করা অসম্ভব নয়, তবে এটি খুব ভাল কারণেই রয়েছে; এটির পরিবর্তনের পরিণতি রয়েছে।

1990 এর দশকের গোড়ার দিকে ওয়েবব্যাক মেশিনটি নিয়ে যাওয়া যাক, যখন লিনাক্স তৈরি করা হয়েছিল। সেই দিনগুলিতে, আমাদের লিনাক্স 2 মিমি র‌্যামে চালিত করা যায় বা সত্যিকার অর্থে 4 টি সম্পূর্ণ এমআইবি দরকার হয় কিনা তা নিয়ে আমাদের যুক্তি রয়েছে । অবশ্যই, উচ্চ-প্রান্তের স্নোবগুলি তাদের 16 টি এমআইবি দৈত্য সার্ভার সহ আমাদের দিকে তাকাচ্ছে।

এই মজাদার ছোট্ট ভিগনেটের কোনও কিছুর সাথে কী সম্পর্ক আছে? সেই বিশ্বে, আপনি সাধারণ 32-বিট ঠিকানা থেকে 4 জিআইবি ঠিকানা স্থান কীভাবে ভাগ করবেন সে সম্পর্কে সিদ্ধান্ত নেওয়া সহজ make কিছু ওএস ঠিক ঠিক মাঝখানে বিভক্ত করে ঠিকানার উপরের বিটটিকে "কার্নেল পতাকা" হিসাবে চিকিত্সা করে: 0 থেকে 2 31 -1 ঠিকানার মধ্যে শীর্ষ বিটটি সাফ হয়ে যায়, এবং ব্যবহারকারীর স্পেস কোডের জন্য ছিল, এবং ঠিকানাগুলি 32 31 থেকে 2 32 - 1 এর শীর্ষ বিট সেট ছিল, এবং কার্নেলের জন্য ছিল। আপনি কেবল ঠিকানাটি দেখে বলতে পারেন: 0x80000000 এবং তার বেশি, এটি কার্নেল-স্পেস, অন্যথায় এটি ব্যবহারকারী-স্থান।

পিসি মেমরির আকারগুলি 4 জিআইবি মেমরি সীমাটির দিকে বেলুন করা হওয়ায়, এই 2/2 বিভক্তটি একটি সমস্যা হয়ে উঠতে শুরু করে। ব্যবহারকারীর স্থান এবং কার্নেল স্পেস উভয়েরই প্রচুর র‍্যামের ভাল দাবী ছিল, তবে যেহেতু কম্পিউটার থাকার ক্ষেত্রে আমাদের উদ্দেশ্যটি সাধারণত কার্নেল চালানোর পরিবর্তে ব্যবহারকারী প্রোগ্রামগুলি চালানো হয়, তাই ওএস ব্যবহারকারী / কার্নেল বিভাজনের সাথে খেলা শুরু করে। 3/1 বিভাজন একটি সাধারণ আপস।

শারীরিক বনাম ভার্চুয়াল সম্পর্কে আপনার প্রশ্নের বিষয়ে, এটি আসলে কিছু যায় আসে না। প্রযুক্তিগতভাবে বলতে গেলে এটি ভার্চুয়াল মেমরির সীমা, তবে এটি কেবলমাত্র লিনাক্স একটি ভিএম-ভিত্তিক ওএস। 32 গিগাবাইট দৈহিক র‌্যাম ইনস্টল করার ফলে কোনও পরিবর্তন হবে না এবং এটি swapon32 গিগাবাইট অদলবদলকেও সহায়তা করবে না । আপনি যা-ই করেন না কেন, একটি 32-বিট লিনাক্স কার্নেল একসাথে 4 GiB এর বেশি সম্বোধন করতে সক্ষম হবে না।

(হ্যাঁ, আমি পিএই সম্পর্কে জানি Now এখন অবশেষে 64৪-বিট ওএসএস হ'ল, আমি আশা করি আমরা সেই বাজে হ্যাকটিকে ভুলে যেতে শুরু করব I আমি বিশ্বাস করি না যে এটি যাইহোক এই ক্ষেত্রে আপনাকে সহায়তা করতে পারে))

তল লাইনটি হ'ল আপনি যদি 1 জিআইবি কার্নেল ভিএম সীমাতে ছুটে চলেছেন তবে আপনি 2/2 বিভাজন দিয়ে কার্নেলটি পুনর্নির্মাণ করতে পারেন, তবে এটি সরাসরি ব্যবহারকারীর স্পেস প্রোগ্রামগুলিকে প্রভাবিত করে।

64-বিট সত্যই সঠিক উত্তর।


1
ধন্যবাদ। এই লেখালেখি দুর্দান্ত। আমি উইন্ডোতে সাধারণত ব্যবহৃত 2/2 বিভাজনে চলে এসেছি। সেই সময়, আমি শিখেছি যে লিনাক্স 3/1 বিভক্ত ব্যবহার করে। আমি ইচ্ছা করছিলাম নিবন্ধটি পড়ার সময় আমি এটির বিষয়ে চিন্তাভাবনা করেছি, আমি মনে করি যে বিন্দুগুলি সংযুক্ত করতাম। সুতরাং ... এই মনে হচ্ছে আমি এই মনে রাখা আবশ্যক। পরীক্ষাগুলির প্রকৃতি বিবেচনা করে এই ব্যবস্থাগুলি সীমাবদ্ধতা ছুঁড়েছে বলে মনে করা খুব বেশি দূরে নয়। বড় প্রশ্নটি হচ্ছে, অন্যান্য সিস্টেমগুলিও কেন এটি অনুভব করছে না। আবার ধন্যবাদ.
অ্যান্ড্রু ফালঙ্গা

1
@ অ্যান্ড্রুফালঙ্গা: প্রকৃতপক্ষে, আধুনিক উইন্ডোজগুলিও একটি अस्पष्ट 3/1 বিভাজন ব্যবহার করে।
ওয়ারেন ইয়ং

1
আমাদের মধ্যে কয়েকজন 12 এমবি সার্ভার পেতে এসএসসি থেকে উত্তরাধিকার সূত্রে প্রাপ্ত তিনটি পৃথক মেশিনের থেকে মেমরিটি একত্রিত করতে সক্ষম হয়েছিল। তাই অনেক স্মৃতি আমরা কিছু আমরা চেয়েছিলাম করতে পারে ...
dmckee --- সাবেক মডারেটরের বিড়ালছানা

3
"হ্যাঁ, আমি x86 সেগমেন্টেড মেমোরি মডেল সম্পর্কে জানি Now এখন অবশেষে 32-বিট ওএসএস নেওয়া শুরু করেছে, আমি আশা করি আমরা এই বাজে হ্যাকটিকে ভুলে যেতে শুরু করব।"
একটি সিভিএন

16-32 এবং 32- এর মধ্যে 32- এবং 64-বিটের মধ্যে দ্বিগুণ দ্বিগুণ রয়েছে, যা আমাদের যেমন হ্যাকগুলি বন্ধ করতে হবে তার দ্বিগুণ, অন্য সব সমান being তবে সমস্ত কিছুই সমান নয় , মুর ল এর সূর্যাস্তের সাথে কি। আমরা 32-বিট x86 কম্পিউটিংয়ের মধ্যে দুই দশক পেয়েছি। আমরা 64৪-বিটের মধ্যে সেঞ্চুরি পেতে পারি । আজকের ডিআরএএম ব্যান্ডউইথগুলিতে র‌্যামের 2⁶⁴ বাইটের একক পাস পড়তে 30 বছর সময় লাগবে । আমাদের the৪-বিটের সীমাতে যেতে সক্ষম করতে ব্যান্ডউইথ বৃদ্ধিটি কোথা থেকে আসছে?
ওয়ারেন ইয়ং

2

ওয়ারেন ইয়ংয়ের দুর্দান্ত উত্তরে আমি কিছুটা যুক্ত করতে চাই , কারণ তাঁর লেখার চেয়ে বিষয়গুলি আসলে খারাপ।

1 জিবি কার্নেল ঠিকানা স্থানটিকে আরও দুটি ভাগে ভাগ করা হয়েছে। vmalloc128MB এর জন্য এবং 896MB এর জন্য lowmem। আসলে এর অর্থ কী তা মনে করবেন না। মেমরি বরাদ্দ করার সময়, কার্নেল কোড অবশ্যই এটি চয়ন করতে পারে choose যে কোনও পুলের ফাঁকা জায়গা রয়েছে তা থেকে আপনি কেবল স্মৃতি পেতে পারেন না।

আপনি যদি চয়ন করেন তবে আপনি vmalloc128MB এর মধ্যে সীমাবদ্ধ। এখন 1 জিবি তেমন খারাপ দেখাচ্ছে না ...

আপনি যদি চয়ন করেন lowmem, আপনি 896MB এর মধ্যে সীমাবদ্ধ। 1 জিবি থেকে এখনও পর্যন্ত নয়, তবে এই ক্ষেত্রে, সমস্ত বরাদ্দ 2 পরবর্তী ক্ষমতা পর্যন্ত গোল করা হয় So সুতরাং একটি 2.3 এমবি বরাদ্দটি আসলে 4 এমবি গ্রহণ করে। এছাড়াও, আপনি ব্যবহার করার সময় এক কলে 4MB এর বেশি বরাদ্দ করতে পারবেন না lowmem

64-বিট সত্যই সঠিক উত্তর।


আপনার উত্তর সম্পর্কিত আমার একটি প্রশ্ন আছে। লোমেম নামের এই মেমরির জায়গার জন্য , এখানেই কি কমলোক এবং কেজমলোকের মতো কলগুলি থেকে স্মৃতি আসে?
অ্যান্ড্রু ফালঙ্গা

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