উত্তর:
/dev/shm
অস্থায়ী ফাইল স্টোরেজ ফাইল সিস্টেম যা tmpfs যা ব্যাকিং স্টোরের জন্য র্যাম ব্যবহার করে। এটি একটি ভাগ করা মেমরি বাস্তবায়ন হিসাবে কাজ করতে পারে যা আইপিসির সুবিধার্থ করে ।
সাম্প্রতিক ২.6 লিনাক্স কার্নেল বিল্ডগুলি একটি র্যামডিস্ক আকারে ভাগ করে নেওয়া মেমরি হিসাবে / dev / shm অফার শুরু করেছে, বিশেষত একটি বিশ্ব-লিখনযোগ্য ডিরেক্টরি যা মেমরিতে / etc / default / tmpfs এ একটি সংজ্ঞায়িত সীমা দ্বারা সঞ্চিত থাকে। / dev / shm সমর্থন কার্নেল কনফিগারেশন ফাইলের মধ্যে সম্পূর্ণরূপে alচ্ছিক। এটি ফেডোরা এবং উবুন্টু উভয় বিতরণেই ডিফল্টরূপে অন্তর্ভুক্ত করা হয়েছে, যেখানে এটি বেশিরভাগভাবে পালসোডিও অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হয়। (সামনে জোর দাও.)
/tmp
ফাইল সিস্টেম হায়ারার্কি স্ট্যান্ডার্ডে সংজ্ঞায়িত অস্থায়ী ফাইলগুলির অবস্থান , যা প্রায় সমস্ত ইউনিক্স এবং লিনাক্স বিতরণ অনুসরণ করে।
যেহেতু র্যাম ডিস্ক স্টোরেজের তুলনায় উল্লেখযোগ্যভাবে দ্রুত, আপনি যদি প্রসেসটি I / O নিবিড় এবং অস্থায়ী ফাইলগুলি ব্যাপকভাবে ব্যবহার করেন তবে পারফরম্যান্স বৃদ্ধির পরিবর্তে আপনি ব্যবহার/dev/shm
/tmp
করতে পারেন ।
আপনার প্রশ্নের উত্তর দেওয়ার জন্য: না, আপনি সর্বদা /dev/shm
উপস্থিত থাকার উপর নির্ভর করতে পারবেন না , অবশ্যই স্মৃতিতে আটকে থাকা মেশিনগুলিতে নয় not আপনার ব্যবহারের /tmp
খুব ভাল কারণ না থাকলে ব্যবহার করা উচিত /dev/shm
।
মনে রাখবেন যে পৃথক মাউন্টের পরিবর্তে ফাইল সিস্টেমের /tmp
অংশ হতে পারে এবং এটি /
প্রয়োজনীয় হিসাবে বৃদ্ধি করতে পারে। আকারের আকারটি /dev/shm
সিস্টেমে অতিরিক্ত র্যামের মাধ্যমে সীমাবদ্ধ এবং তাই আপনার এই ফাইল সিস্টেমের স্থান খুব কম চলে more
/dev/shm
। /dev/shm
মেমোরি (tmpfs) ডিস্কের সাহায্যে রয়েছে (অদলবদল)। /var/tmp
ডিস্কের সাহায্যে মেমোরি (ডিস্ক ক্যাশে) (অন ডিস্ক ফাইল সিস্টেম)। অনুশীলনে, পারফরম্যান্সটি প্রায় একই রকম (tmpfs এর সামান্য প্রান্ত রয়েছে তবে বিষয়টি যথেষ্ট নয়)। /tmp
tmpfs হতে পারে বা প্রশাসক কীভাবে এটি কনফিগার করেছেন তার উপর নির্ভর করে। /dev/shm
আপনার স্ক্রিপ্টগুলিতে ব্যবহার করার কোনও ভাল কারণ নেই ।
/tmp
তবে এটি স্বাভাবিক অবস্থান ( $TMPDIR
ওভাররাইড সহ)। /tmp
অদলবদল, অন্যান্য ডিস্ক স্পেস বা কিছুই দ্বারা ব্যাকড করা পছন্দ প্রশাসকের নয়।
tmpfs
সম্ভাব্যতার ক্রমবর্ধমান ক্রম :
┌───────────┬──────────────┬────────────────┐
│ /dev/shm │ always tmpfs │ Linux specific │
├───────────┼──────────────┼────────────────┤
│ /tmp │ can be tmpfs │ FHS 1.0 │
├───────────┼──────────────┼────────────────┤
│ /var/tmp │ never tmpfs │ FHS 1.0 │
└───────────┴──────────────┴────────────────┘
যেহেতু আপনি একটি Linux নির্দিষ্ট সম্পর্কে জিজ্ঞাসা করা হয় tmpfs একটি portably সংজ্ঞায়িত যে ডিরেক্টরি বনাম mountpoint পারে tmpfs হতে (আপনার sysadmin উপর নির্ভর করে এবং আপনার কি ডিস্ট্রো জন্য ডিফল্ট আছে), আপনার প্রশ্নের দুটি দিক, যাতে অন্যান্য উত্তর ভিন্নভাবে জোর আছে আছে:
রক্ষণশীল সংস্করণ ( এফএইচএসের কনভেনশনগুলির মিশ্রণ এবং সাধারণ ব্যবহার):
/tmp
।/var/tmp
বৃহত্তর ডেটার জন্য ব্যবহার করুন যা রামের সাথে সহজেই ফিট না।/var/tmp
রিবুটগুলি জুড়ে রাখার জন্য উপকারী এমন ডেটার জন্য ব্যবহার করুন (ক্যাশের মতো)।/dev/shm
কল করার পার্শ্ব-প্রতিক্রিয়া হিসাবে ব্যবহার করুন shm_open()
। উদ্দেশ্যে করা শ্রোতাগুলি সীমিত বাফার যা অন্তহীনভাবে ওভাররাইট করা হয়। সুতরাং এটি দীর্ঘকালীন ফাইলের জন্য যার বিষয়বস্তু অস্থির এবং ভয়াবহ নয় notmktemp
প্রোগ্রামটি TMPDIR
পরিবেশের পরিবর্তনশীলকে সম্মান করে ।ব্যবহারিক সংস্করণ:
/dev/shm
Tmpfs ব্যবহার করা যখন গুরুত্বপূর্ণ তখন ব্যবহার করুন, /var/tmp
যখন অন্যথায় না করা গুরুত্বপূর্ণ /tmp
।
fsync
টিএমপিএফ-তে একটি অন-অপশন। এই সিস্কলটি (আইও) পারফরম্যান্সের এক নম্বর শত্রু (এবং যদি আপনি সে সম্পর্কে যত্নশীল হন তবে দীর্ঘায়ুতে ফ্ল্যাশ করুন), যদিও আপনি নিজেকে tmpfs (বা ডায়েডমিটা) ব্যবহার করে খুঁজে পান) কেবল সাইককে পরাস্ত করার জন্য, তারপরে আপনি (বা চেইনের অন্য কোনও বিকাশকারী) কিছু ভুল করছেন। এর অর্থ হ'ল স্টোরেজ ডিভাইসের দিকে লেনদেনগুলি আপনার প্রয়োজনের জন্য অযৌক্তিকভাবে জরিমানা - আপনি পারফরম্যান্সের জন্য কিছু সংরক্ষণের পয়েন্ট এড়াতে ইচ্ছুক, যেহেতু আপনি এখন সেগুলি সর্বনাশ করার চূড়ান্ত দিকে চলে গেছেন - খুব কমই সবচেয়ে ভাল আপস করুন। এছাড়াও, এটি এখানে লেনদেনের পারফরম্যান্সের জমিতে রয়েছে যেখানে একটি এসএসডি থাকার কিছু সুবিধা রয়েছে - কোনও স্পিনিং ডিস্ক সম্ভবত গ্রহণ করতে পারে তার তুলনায় কোনও শালীন এসএসডি এই পৃথিবীর বাইরে সম্পাদন করতে চলেছে (7200 আরপিএম = 120 হার্জ , যদি অন্য কেউ এটি অ্যাক্সেস করে থাকে), ফ্ল্যাশ মেমরি কার্ডগুলির উল্লেখ না করা, যা এই মেট্রিকটিতে ব্যাপকভাবে পরিবর্তিত হয় (কমপক্ষে নয় কারণ এটি ক্রমযুক্ত পারফরম্যান্সের সাথে একটি ট্রেড অফ, যা তাদের দ্বারা রেট করা হয়, যেমন এসডি কার্ড শ্রেণীর রেটিং)। সুতরাং সাবধান,
শুনতে চান একটি হাস্যকর গল্প? আমার প্রথম fsync
পাঠ: আমার একটি কাজ ছিল যা নিয়মিতভাবে পরিবর্তিত বর্তমান ফর্ম্যাটে স্ক্লাইট ডেটাবেসগুলির একটি গুচ্ছ (টেস্টকেস হিসাবে রাখা) একগুচ্ছ "আপগ্রেড" জড়িত। "আপগ্রেড" ফ্রেমওয়ার্কটি একটি ডেটাবেস আপগ্রেড করার জন্য কমপক্ষে একটি লেনদেন করে স্ক্রিপ্টগুলির একগুচ্ছ চালায়। অবশ্যই আমি আমার ডাটাবেসগুলিকে সমান্তরালে আপগ্রেড করেছি (সমান্তরালে 8, যেহেতু আমি একটি শক্তিশালী 8 কোর সিপিইউ দিয়ে আশীর্বাদ পেয়েছি)। তবে আমি যেমন জানতে পেরেছি, সেখানে কোনও সমান্তরাল স্পিডআপ ছিল না (বরং সামান্য আঘাত ) কারণ প্রক্রিয়াটি সম্পূর্ণ আইও আবদ্ধ ছিল। হাসিখুশিভাবে, একটি স্ক্রিপ্টে আপগ্রেড ফ্রেমওয়ার্কটি মোড়ানো যা প্রতিটি ডাটাবেসে অনুলিপি করে /dev/shm
, সেখানে এটি আপগ্রেড করে, এবং এটি ডিস্কে ফিরে অনুলিপি করা 100 গুণ দ্রুত গতির মতো (এখনও সমান্তরালে 8 সহ)। বোনাস হিসাবে, পিসি ব্যবহারযোগ্য ছিল খুব, ডেটাবেস আপগ্রেড করার সময়।
Tmpfs এর যথাযথ ব্যবহার হ'ল অস্থায়ী ডেটার অপ্রয়োজনীয় লেখা এড়ানো। নিয়মিত ফাইল সিস্টেমে অনন্তকে সেট /proc/sys/vm/dirty_writeback_centisecs
করার মতো লিখিতব্যাক কার্যকরভাবে অক্ষম করা ।
পারফরম্যান্সের সাথে এটির খুব সামান্য সম্পর্ক রয়েছে, এবং এটি ব্যর্থ হওয়া ফিনসিঙ্কের সাথে আপত্তিজনক হওয়ার চেয়ে অনেক ছোট উদ্বেগ: লিখনব্যাকের সময়সীমা নির্ধারণ করে যে ডিস্কের বিষয়বস্তু পৃষ্ঠাচরণের সামগ্রীর পরে কীভাবে আপডেট হয় এবং 5 সেকেন্ডের ডিফল্ট একটি কম্পিউটারের জন্য দীর্ঘ সময় হয় - একটি অ্যাপ্লিকেশন কোনও ফাইলকে পেজ ক্যাশে হিসাবে যতবার চায় তার ওভাররাইট করতে পারে, তবে ডিস্কে থাকা সামগ্রীটি প্রতি 5 সেকেন্ডে প্রায় একবার আপডেট হয়। অ্যাপ্লিকেশন এটিকে ফাইন্যাক দিয়ে জোর করে না দিলে তা হয়। এই সময়ে কোনও অ্যাপ্লিকেশন একটি ছোট ফাইলকে কতবার আউটপুট দিতে পারে সে সম্পর্কে চিন্তাভাবনা করুন এবং আপনি দেখতে পাচ্ছেন কেন প্রতিটি একককে ফাইসিং করা অনেক বড় সমস্যা হবে।
fsync
অবশ্যই আপনি এটি সঙ্গে জোর করা না হলে ।ঠান্ডা তথ্য রাখছি । আপনি ভাবতে প্ররোচিত হতে পারেন যে অদলবদলের বাইরে ফাইলগুলি সরবরাহ করা একটি সাধারণ ফাইল সিস্টেমের মতোই দক্ষ, তবে এটি না হওয়ার কয়েকটি কারণ রয়েছে:
mount -t tmpfs "jarno is great" /mnt/jarno
চাইলে করতে পারেন! তৃতীয়ত, ডিফল্ট আকারটি রামের অর্ধেক পরিমাণে - আমি বাজি ধরে রাখি যে আপনার কাছে 4 জিবিবি র্যাম রয়েছে।
ঠিক আছে, বাস্তবতা এখানে।
উভয় tmpfs এবং একটি সাধারণ ফাইল সিস্টেম ডিস্কের ওপরে একটি মেমরি ক্যাশে।
টিএমপিএফস মেমরি এবং স্ব্যাপস্পেস ব্যবহার করে কারণ এটি ফাইল সিস্টেমের জন্য একটি ডিস্কের একটি নির্দিষ্ট ক্ষেত্র ব্যবহার করে, এটি কোনও সিস্টেম সিস্টেমের আকারের মধ্যেই সীমাবদ্ধ নয়, কোনও গিগাবাইটের চেয়ে কম র্যামের মেশিনে 200 গিগাবাইট টিএমপিএফ রাখা সম্ভব quite আপনার যথেষ্ট পরিমাণ সোয়াপস্পেস আছে।
যখন ডিস্কে ডেটা লেখা হয় তখন পার্থক্য হয়। একটি tmpfs জন্য যখন কেবল মেমরি পূর্ণ হয়ে যায় বা ডেটা ব্যবহার করার সম্ভাবনা কম থাকে তখন কেবলমাত্র ডেটা লেখা হয়। OTOH বেশিরভাগ সাধারণ লিনাক্স ফাইল সিস্টেমগুলি সর্বদা ডিস্কে আরও কম বা কম সামঞ্জস্যপূর্ণ ডেটা তৈরির জন্য ডিজাইন করা হয় যাতে ব্যবহারকারী যদি প্লাগ টানেন তবে তারা সবকিছু হারাবেন না।
ব্যক্তিগতভাবে, আমি অপারেটিং সিস্টেমগুলি ব্যবহার করতে অভ্যস্ত যা ক্র্যাশ হয় না এবং ইউপিএস সিস্টেমগুলি (যেমন: ল্যাপটপ ব্যাটারি) তাই আমার মনে হয় ext2 / 3 ফাইল সিস্টেমগুলি তাদের 5-10 সেকেন্ড চেকপয়েন্টের ব্যবধানের সাথে খুব বিড়ম্বনাযুক্ত। এক্সট 4 ফাইল সিস্টেমটি 10 মিনিটের চেকপয়েন্টের সাথে আরও ভাল, এটি বাদে এটি ব্যবহারকারীর ডেটাটিকে দ্বিতীয় শ্রেণির হিসাবে বিবেচনা করে এবং এটি সুরক্ষা দেয় না। (ext3 একই তবে 5 সেকেন্ড চেকপয়েন্টের কারণে আপনি এটি লক্ষ্য করেন না)
এই ঘন ঘন চেকপয়েন্টিংটির অর্থ এই যে অপ্রয়োজনীয় ডেটা নিয়মিতভাবে ডিস্কে লেখা থাকে, এমনকি / টিএমপি জন্যও।
সুতরাং ফলস্বরূপ আপনাকে নিজের / টিএমপি হওয়ার জন্য যতটা প্রয়োজন স্বাপের স্থান তৈরি করতে হবে (এমনকি আপনার যদি একটি সোয়াফিল ফাইল তৈরি করতে হয়) এবং সেই স্থানটি প্রয়োজনীয় আকারের একটি tmpfs / tmp এ মাউন্ট করতে ব্যবহার করতে পারেন।
কখনও / dev / shm ব্যবহার করবেন না।
যদি না আপনি এটি খুব ছোট (সম্ভবত এমএমপি'ডি) আইপিসি ফাইলগুলির জন্য ব্যবহার করছেন এবং আপনি নিশ্চিত যে এটি বিদ্যমান (এটি কোনও মান নয়) এবং মেশিনটিতে পর্যাপ্ত মেমরি + অদলবদুর চেয়েও বেশি উপলব্ধ।
অস্থায়ী ফাইলগুলির জন্য / টিএমপি / ব্যবহার করুন। আপনি যখন ভাগ করা মেমরি চান (/ ফাইলের মাধ্যমে আন্তঃসম্পর্কিত যোগাযোগ) চান / dev / shm / ব্যবহার করুন।
আপনি / টিএমপি / সেখানে থাকার উপর নির্ভর করতে পারেন, তবে / dev / shm / অপেক্ষাকৃত সাম্প্রতিক লিনাক্সের একমাত্র জিনিস।
1>/dev/null 2>&1
আমি এটি কয়েক হাজার বার করব তাই একটি টিএমপিএফস ভাল লাগবে However তবে আমি যদি স্ক্রিপ্ট আমি tmpfs উপর নির্ভর করতে পারে না জন্য ব্যবহৃত হচ্ছে মুক্তি /tmp
যেমন আমার মনে হয় এটা যে সাধারণ নয় যদি জন্য আরো সাধারণ হবে। /dev/shm
তারপর যে আমার জন্য ভালো কিন্তু আমি বহনযোগ্যতা ইত্যাদি সংক্রান্ত নির্দেশিকা খুঁজছি।
অন্য সময় যখন আপনি (লিনাক্সের 2.6 এবং উপরোক্ত জন্য) ব্যবহার করা উচিত / dev / shm যখন আপনি একটি ফাইল সিস্টেম tmpfs নিশ্চিত কারণ আপনার যদি আপনি জানেন না প্রয়োজন পারবেন ডিস্কে লিখুন।
কেন্দ্রীয় সার্ভারে জমা দেওয়ার জন্য তার প্রতিবেদন তৈরি করার সময় অস্থায়ী ফাইলগুলি লেখার প্রয়োজনের সাথে আমি পরিচিত একটি মনিটরিং সিস্টেম। এটি অনুশীলনে অনেক বেশি সম্ভাবনা রয়েছে যে কোনও ফাইল সিস্টেম সিস্টেমে কিছু লিখতে বাধা দেবে (ডিস্কের জায়গার বাইরে বা একটি অন্তর্নিহিত RAID ব্যর্থতা সিস্টেমটিকে একটি হার্ডওয়ার পঠন মোডে ঠেলে দিয়েছে) তবে আপনি সতর্কতার সাথে লম্পট করতে সক্ষম হবেন এটি সম্পর্কে যদি কোনও কিছু সমস্ত উপলভ্য মেমরিকে ছড়িয়ে দেয় যেমন টিএমপিএফগুলি ব্যবহারযোগ্য হবে না (এবং বাক্সটি মৃত হবে না)। এই জাতীয় ক্ষেত্রে, একটি মনিটরিং সিস্টেমটি র্যামে লেখাটি পছন্দ করবে যাতে সম্পূর্ণ ডিস্ক বা মৃত / মৃত হার্ডওয়্যার সম্পর্কে একটি সতর্কতা পাঠাতে সক্ষম হয়।
/ dev / shm ভাগ করা ভার্চুয়াল মেমরি সিস্টেম নির্দিষ্ট ডিভাইস ড্রাইভার এবং প্রোগ্রামগুলির জন্য ব্যবহৃত হয়।
আপনি যদি এমন কোনও প্রোগ্রাম তৈরি করছেন যা ভার্চুয়াল মেমোরিতে ম্যাপ করা উচিত এমন ভার্চুয়াল মেমরি হিপ দরকার। এটি দ্বিগুণ হয় সুতরাং আপনার যদি সেই মেমরিটিকে নিরাপদে অ্যাক্সেস করতে সক্ষম হতে একাধিক প্রক্রিয়া বা থ্রেডের প্রয়োজন হয়।
আসল বিষয়টি হ'ল ড্রাইভার তার জন্য tmpfs এর একটি বিশেষ সংস্করণ ব্যবহার করে, তার অর্থ এই নয় যে আপনার এটি জেনেরিক tmpfs পার্টিশন হিসাবে ব্যবহার করা উচিত। পরিবর্তে, আপনার অস্থায়ী ডিরেক্টরিতে যদি আপনি চান তবে আপনার কেবল অন্য একটি tmpfs পার্টিশন তৈরি করা উচিত।
পিইআরএল-তে, কোনও মেশিনে সর্বনিম্ন 8 গিগাবাইট থাকা (সমস্ত চলমান লিনাক্স মিন্ট), আমি মনে করি ডিবি_ফায়াল-ভিত্তিক (একটি ফাইলের মধ্যে ডেটা স্ট্রাকচার) / ডি / / ব্যবহার করে কয়েক মিলিয়নের সাথে জটিল অ্যালগরিদমগুলি করা একটি ভাল অভ্যাস think shm
অন্যান্য ভাষায়, সর্বত্র একত্রিত না হয়ে, নেটওয়ার্ক ট্রান্সফার শুরু হওয়া এবং থামানো এড়াতে (ক্লায়েন্ট-সার্ভার বায়ুমণ্ডলে কোনও সার্ভারে অবস্থিত এমন একটি ফাইলে স্থানীয়ভাবে কাজ করা), কোনও প্রকারের ব্যাচের ফাইলটি ব্যবহার করে, আমি অনুলিপি করব সম্পূর্ণ (300-900MB) ফাইলটি একবারে / dev / shm এ, / dev / shm এ আউটপুট দিয়ে প্রোগ্রামটি চালান, ফলাফলটি সার্ভারে ফিরে লিখুন এবং / dev / shm থেকে মুছুন
স্বাভাবিকভাবেই, আমার যদি কম র্যাম থাকে তবে আমি এটি করতাম না। সাধারণত, / dev / shm এর ইন-মেমরি ফাইল সিস্টেমটি আপনার উপলব্ধ র্যামের অর্ধেক আকার হিসাবে পাঠ করে। তবে র্যামের সাধারণ ব্যবহার অবিচ্ছিন্ন। সুতরাং আপনি 2 জিবি বা তারও কম সংখ্যক ডিভাইসে সত্যিই এটি করতে পারবেন না। প্যারাফ্রেজটিকে হাইপারবোলে রূপান্তর করতে, প্রায়শই র্যামে এমন জিনিস থাকে যা এমনকি সিস্টেম ভাল রিপোর্ট করে না।
/dev/shm
উপস্থিত কিনা তা যাচাই করব , এটি থাকলে এটি ব্যবহার করুন, বা পড়ে যাবেন/tmp
। ভাল লাগছে কি?