সিস্টেমের মেমোরিতে ... বিশেষত `tmpfs,` `shm,` এবং `বিশাল পৃষ্ঠাগুলির মধ্যে পার্থক্য…`


16

আমি ইদানীং বিভিন্ন লিনাক্স কার্নেল মেমরি ভিত্তিক ফাইল সিস্টেমগুলি সম্পর্কে কৌতূহলী হয়েছি।

Note:যতদূর আমি উদ্বিগ্ন, শিরোনামে উত্থাপিত এর আরও ভাল বোঝার সাথে তুলনা করার সময় নীচের প্রশ্নগুলিকে কমবেশি optionচ্ছিক বিবেচনা করা উচিত। আমি তাদের নীচে জিজ্ঞাসা করছি কারণ আমি বিশ্বাস করি যে তাদের উত্তর দেওয়া আমাকে পার্থক্যগুলি বোঝার জন্য আরও ভালভাবে সহায়তা করতে পারে, তবে আমার বোঝার বিষয়টি স্বীকার করা সীমাবদ্ধ থাকায় এটি অনুসরণ করে যে অন্যরা আরও ভালভাবে জানতে পারে। আমি শিরোনামে উল্লিখিত তিনটি ফাইল সিস্টেমের মধ্যে পার্থক্য সম্পর্কে আমার বোঝাকে সমৃদ্ধ করে এমন কোনও উত্তর গ্রহণ করতে আমি প্রস্তুত।

শেষ পর্যন্ত আমি মনে করি আমি একটি ব্যবহারযোগ্য ফাইল সিস্টেমটি মাউন্ট করতে চাই hugepages,যদিও কিছু হালকা গবেষণা (এবং এখনও হালকা টিঙ্কারিং) আমাকে বিশ্বাস করতে পরিচালিত করেছে যে rewritable hugepage mountকোনও বিকল্প নয়। আমি কি ভুল করছি? এখানে নাটকটিতে কী রয়েছে?

এছাড়াও সম্পর্কিত hugepages:

     uname -a
3.13.3-1-MANJARO \
#1 SMP PREEMPT \
x86_64 GNU/Linux

    tail -n8 /proc/meminfo
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:     8223772 kB
DirectMap2M:    16924672 kB
DirectMap1G:     2097152 kB

(এখানে / proc / meminfo এবং / proc / cpuinfo এর সম্পূর্ণ পাঠ্য সংস্করণ রয়েছে )

উপরের দিকে কী চলছে? আমি কি ইতিমধ্যে বরাদ্দ করছি মেমরি পৃষ্ঠাগুলি এবং এর hugepages?মধ্যে কোনও পার্থক্য রয়েছেDirectMaphugepages?

আপডেট @ গিলস থেকে কিছুটা ধাক্কা দেওয়ার পরে, আমি উপরে আরও 4 টি লাইন যুক্ত করেছি এবং মনে হচ্ছে এটির একটি পার্থক্য থাকতে হবে, যদিও আমি গতকাল DirectMapএটি টানার আগে কখনও শুনিনি tail... সম্ভবত DMIবা কিছু?

আরও কিছুটা ...

hugepagesপ্রচেষ্টার সাথে কোনও সাফল্য ব্যর্থ হওয়া এবং কোনও চিত্র ফাইলের হার্ডডিস্ক ব্যাকআপ ধরে নেওয়া, tmpfs?আমার ফাইল সিস্টেমটি swappedসবচেয়ে খারাপ পরিস্থিতি হ'ল কি থেকে ঝাঁকুনি পড়তে পারে? আমি বুঝতে পারি tmpfsফাইল সিস্টেমের ক্যাশে মাউন্ট করা আছে - আমার মাউন্ট করা লুপফাইলে কি স্মৃতি থেকে চাপ দেওয়া যায়? এটি এড়াতে আমি কি গ্রহণযোগ্য পদক্ষেপ নিতে পারি?

শেষ - ঠিক কি হয় shm,যাইহোক? এটি কীভাবে আলাদা হয় বা অন্তর্ভুক্ত হয় hugepagesবাtmpfs?


1
কি পূর্ববর্তী লাইন সম্পর্কে /proc/meminfoযেগুলিতে HugePage(অথবা আপনার কার্নেল সংস্করণ এই নেই)? এটি কোন আর্কিটেকচারে রয়েছে (x86_64 আমি মনে করি)?
গিলস 23'14

আমি তাদের যুক্ত করব। আমি এটি খুব দীর্ঘ সম্পর্কে উদ্বিগ্ন ছিল।
মাইক্রসারভ

@ গিলস - আমি উপরের সরল পাঠ্যের সাথে লিঙ্ক করেছি। আমি আশা করি ঠিক আছে। জিজ্ঞাসা করার জন্য ধন্যবাদ - আমার এটি প্রথম স্থানে অন্তর্ভুক্ত করা উচিত ছিল - আমি জানি না যে আমি কীভাবে এটি মিস করেছি।
মাইকজার্ভ

উত্তর:


13

বিটওয়েম টিএমপিএফ এবং এসএমএস কোনও পার্থক্য নেই। tmpfs shm এর নতুন নাম। shm এর অর্থ শारेডমেমোরি।

দেখুন: লিনাক্স tmpfs

Tmpfs আজও ব্যবহৃত হওয়ার মূল কারণটি হ'ল আমার / ইত্যাদি / fstab এ আমার ভেন্টু বক্সে দেওয়া মন্তব্য। বিটিডাব্লু ক্রোমিয়ামটি লাইনটি হারিয়ে যাওয়ার সাথে তৈরি করবে না:

# glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for 
# POSIX shared memory (shm_open, shm_unlink). 
shm                     /dev/shm        tmpfs           nodev,nosuid,noexec     0 0 

যা লিনাক্স কার্নেল ডকুমেন্টেশন থেকে বেরিয়ে এসেছিল

বরাত দিয়ে:

tmpfs এর নিম্নলিখিত ব্যবহার রয়েছে:

1) সর্বদা একটি কার্নেল অভ্যন্তরীণ মাউন্ট থাকে যা আপনি কখনই দেখতে পাবেন না
। এটি ভাগ করা বেনামে ম্যাপিং এবং এসওয়াইএসভি ভাগ করা
মেমরির জন্য ব্যবহৃত হয় ।

এই মাউন্টটি CONFIG_TMPFS এর উপর নির্ভর করে না। যদি CONFIG_TMPFS সেট না করা থাকে তবে tmpfs এর ব্যবহারকারীর দৃশ্যমান অংশটি তৈরি হয় না। তবে অভ্যন্তরীণ
প্রক্রিয়া সর্বদা উপস্থিত থাকে।

২) গ্লিবসি ২.২ এবং
তারপরে পোসিক্স শেয়ার্ড মেমোরি (shm_open, shm_unlink) এর জন্য tmpfs / dev / shm এ বসানো হবে বলে আশা করে। নিম্নলিখিত
লাইনটি / etc / fstab এ যুক্ত করা উচিত এটির যত্ন নেওয়া উচিত:

tmpfs / dev / shm tmpfs 0 0 ডিফল্ট হয়

আপনার প্রয়োজন অনুসারে tmpfs মাউন্ট করার জন্য যে ডিরেক্টরিটি তৈরি করতে চান তা মনে রাখবেন।

এই মাউন্টটি SYSV ভাগ করা মেমরির প্রয়োজন হয় না । অভ্যন্তরীণ
মাউন্ট তার জন্য ব্যবহৃত হয়। (২.৩ কার্নেল সংস্করণে
এসএমএসভি
শেয়ার্ড মেমরি ব্যবহারের জন্য tmpfs (shm fs) এর পূর্বসূরীর মাউন্ট করা প্রয়োজন ছিল )

3) কিছু লোক (আমাকে সহ) এটি মাউন্ট করা খুব সুবিধাজনক বলে মনে করে
যেমন / tmp এবং / var / tmp এবং একটি বড় অদলবদল রয়েছে। এবং এখন
tmpfs ফাইলের লুপ মাউন্টগুলি কাজ করে, তাই বেশিরভাগ
বিতরণ দ্বারা প্রেরিত মকিনিতার্ড একটি tmpfs / tmp দিয়ে সফল হওয়া উচিত।

4) এবং সম্ভবত আরও অনেক কিছু আমি :-) সম্পর্কে জানি না

tmpfs এর আকার দেওয়ার জন্য তিনটি মাউন্ট অপশন রয়েছে:

আকার: এই tmpfs উদাহরণের জন্য বরাদ্দ করা বাইটের সীমা। অদলবদল ছাড়াই ডিফল্ট আপনার শারীরিক র‌্যামের অর্ধেক। আপনি যদি নিজের টিএমপিএফস উদাহরণগুলিকে বড় করেন তবে মেশিনটি অচল হয়ে যাবে যেহেতু ওওএম হ্যান্ডলার সেই মেমরিটি মুক্ত করতে সক্ষম হবে না।
এনআর_ব্লকস: আকারের মতো, তবে PAGE_CACHE_SIZE এর ব্লকগুলিতে।
nr_inodes: এই দৃষ্টান্তের জন্য সর্বাধিক সংখ্যক ইনোড । ডিফল্টটি আপনার শারীরিক র‍্যাম পৃষ্ঠাগুলির সংখ্যার অর্ধেক, বা (হাইমেমযুক্ত কোনও মেশিনে) লোমেম র‌্যাম পৃষ্ঠাগুলির সংখ্যা, যার মধ্যে কম হয়।

স্বচ্ছ হিউজপেজ কার্নেল ডক থেকে:

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

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


কিছু গণনা করার পরে নতুন মন্তব্য:

হিউজপেজের আকার: 2 এমবি
হিউজেপেজ ব্যবহৃত: সমস্ত 0 এর প্রমাণ অনুসারে কিছুই নেই / অফ, তবে উপরের 2 এমবি অনুযায়ী সক্ষম হয়েছে।
ডাইরেক্টম্যাপ 4 কে: 8.03
জিবি ডাইরেক্টম্যাপ 2 এম: 16.5
জিবি ডাইরেক্টম্যাপ 1 জি: 2 জিবি

টিএইচএসে অপ্টিমাইজেশান সম্পর্কিত উপরের অনুচ্ছেদটি ব্যবহার করে, দেখে মনে হচ্ছে আপনার মেমরির 8ob মেমরি 4K, 16.5Gb এর ম্যালোক ব্যবহার করে এমন অ্যাপ্লিকেশন ব্যবহার করছে যা 2M এর ম্যালোক ব্যবহার করে অ্যাপ্লিকেশন দ্বারা অনুরোধ করা হয়েছে। 2M এর mallocs ব্যবহার করে অ্যাপ্লিকেশনগুলি কার্নেলের 2M বিভাগগুলি অফলোড করে হিউজপেজ সমর্থন অনুকরণ করছে। এটি পছন্দসই পদ্ধতি, কারণ কার্নেল দ্বারা একবার ম্যালোক প্রকাশিত হলে, মেমরিটি সিস্টেমে প্রকাশিত হয়, যেখানে বিশাল পৃষ্ঠাগুলি ব্যবহার করে tmpf গুলি মাউন্ট করার ফলে সিস্টেমটি পুনরায় চালু না হওয়া পর্যন্ত সম্পূর্ণ পরিচ্ছন্নতার ফলাফল হয় না। শেষ অবধি, সহজটি আপনার 2 টি প্রোগ্রাম খোলা / চলমান রয়েছে যা 1Gb এর ম্যালোকের অনুরোধ করেছে

আপনারা যারা পড়েন যে কোনও ম্যালোক জানেন না সেটি সি এর একটি স্ট্যান্ডার্ড স্ট্রাকচার যা মেমরি অ্যালোকেশনকে বোঝায়। এই গণনাগুলি প্রমাণ হিসাবে কাজ করে যে ডাইরেক্টম্যাপিং এবং টিএইচএসের মধ্যে ওপির পারস্পরিক সম্পর্ক সঠিক হতে পারে। এছাড়াও মনে রাখবেন যে কেবলমাত্র fs মাউন্ট করার ফলে কেবল 2MB বৃদ্ধি পাওয়া যায়, যদিও THS ব্যবহার করে সিস্টেমটিকে মেমরি পরিচালনা করতে দেওয়া হয় বেশিরভাগ 4k ব্লকে, মেমরি পরিচালনার ক্ষেত্রে প্রতিটি ম্যালোক কল সিস্টেমকে 2044k বাঁচায় (2048 - 4 ) অন্য কিছু প্রক্রিয়া ব্যবহারের জন্য।


2
এটি সত্যিই ভাল- এইচএইচএস আমার ডিরেক্টম্যাপ ?
মাইক্রজারভ

আমি যেমন ডাইরেক্টম্যাপিংটি গুগল করেছিলাম এবং টিএমপিএফস সম্পর্কিত কোনও কিছুই খুঁজে পাইনি তেমন উত্তর আমি দিতে পারছি না, কেবলমাত্র আমি খুঁজে পেলাম কীভাবে লিনাক্সের স্বাদে চলমান ওরাকল ডেটাবেসগুলির জন্য হিউজিম সাপোর্টটি কনফিগার করা যায়, যার অর্থ তারা টিএইচএসের পরিবর্তে হিউজপেজ ব্যবহার করছেন means আমি উল্লেখ। 2.6 শাখার সমস্ত কার্নেল যদিও THS সমর্থন করে। হুঙ্ক থো হিসাবে, উপরে আমার নতুন মন্তব্য দেখুন।
eyoung100

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

হ্যাঁ, এবং এটি যথাযথভাবে মাউন্ট করার সময় লিখিত হয় তবে সচেতন থাকুন: ১. যেহেতু আপনি এটি মাউন্ট করেছেন, আপনি ক্লিনআপের দায়িত্বে রয়েছেন ২. এটি অপব্যয়: আপনার উদাহরণটি ব্যবহার করে বলতে পারি যে আপনার লুপটিতে কেবল একটি টেক্সট ফাইল রয়েছে, চরিত্রগুলি: হ্যালো, আমার নাম মাইক। প্রতিটি অক্ষর 1k হিসাবে ধরে নেওয়া, সেই ফাইলটি 23 কে হিসাবে সংরক্ষণ করবে। বিশাল পৃষ্ঠা আপনাকে 2 এমবি দিয়েছে বলে আপনি 2025k নষ্ট করেছেন। এই অপব্যয়মূলক আচরণের কারণে মেমরি পরিচালনা কার্নেলের মধ্যে নির্মিত হয়েছিল। এটি আমাদের কার্নেল
32

এবং শেষ অবধি ৩. আপনি পুনরায় বুট বা ক্র্যাশ করে নিজের মাউন্টটি হারাবেন।
eyoung100

4

"ডাইরেক্টম্যাপ" ইস্যুটি সমাধান করার জন্য: কার্নেলের প্রতিটি শারীরিক মেমরির লিনিয়ার ("ডাইরেক্ট") ম্যাপিং রয়েছে , প্রতিটি ব্যবহারকারীর প্রক্রিয়াতে বরাদ্দ করা ভার্চুয়াল ম্যাপিং থেকে আলাদা।

কার্নেল টিএলবি চাপ কমানোর জন্য এই ম্যাপিংয়ের জন্য সবচেয়ে বড় সম্ভাব্য পৃষ্ঠাগুলি ব্যবহার করে।

যদি আপনার সিপিইউ 1 জিবি পৃষ্ঠাগুলি সমর্থন করে (বার্সেলোনা; কিছু ভার্চুয়াল পরিবেশগুলি সেগুলি অক্ষম করে), এবং কার্নেলে সক্ষম করা থাকলে - ডিফল্টটি 2.6.29+ এর জন্য চালু থাকে তবে ডাইরেক্টম্যাপ 1 জি দৃশ্যমান।


3

shmএবং tmpfs(আসলে, tmpfsকেবলমাত্র পূর্বের নতুন নাম shmfs) এর মধ্যে কোনও পার্থক্য নেই । hugetlbfsএকটি tmpfsবেসড ফাইল সিস্টেম যা কার্নেল বিশাল পৃষ্ঠাগুলি থেকে তার স্থান বরাদ্দ করে এবং কিছু অতিরিক্ত কনফিগারেশন সাশ্রয় করা প্রয়োজন (এটি কীভাবে ডকুমেন্টেশন / vm / hugetlbpage.txt এ ব্যাখ্যা করা হয় )।


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

1
@mikeserv - আমি এই পরিবর্তন খুঁজে পাওয়া যায়নি শো কি DirectMaps কাজ থেকে গণনা করা যে হয়: lkml.org/lkml/2008/11/6/163
SLM
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.