লিনাক্স: ফাইল পড়তে I / O কত ডিস্ক লাগে? কীভাবে এটি হ্রাস করা যায়? [নকল]


10

ফেসবুকের খড়ের এই কাগজ অনুসারে :

" এনএএস অ্যাপ্লিকেশনগুলি ডিরেক্টরি মেটাডেটা পরিচালনা করার কারণে ডিরেক্টরিটিতে হাজার হাজার ডলার কম রাখার ফলে ডিরেক্টরিটির ব্লকম্যাপটি অ্যাপ্লায়েন্সের দ্বারা কার্যকরভাবে ক্যাশে করা যায় না। ফলস্বরূপ 10 টিরও বেশি ডিস্ক ক্রিয়াকলাপ পুনরুদ্ধার করার জন্য সাধারণ ছিল একক চিত্র। ডিরেক্টরি প্রতি মঞ্চে শত শত চিত্রের আকার হ্রাস করার পরে, ফলস্বরূপ সিস্টেমটি সাধারণত একটি চিত্র আনতে 3 ডিস্ক অপারেশন করতে পারে: একটি ডিরেক্টরি মেটাডেটা মেমরিতে পড়তে, দ্বিতীয়টি মেমোরিতে ইনোড লোড করতে এবং একটি তৃতীয় ফাই Le সামগ্রীগুলিকে পড়ার। "

আমি ধরে নিয়েছি ফাইল সিস্টেম ডিরেক্টরি মেটাডেটা এবং ইনোডটি সর্বদা ওএস দ্বারা র‌্যামে ক্যাশে হবে এবং একটি ফাইল রিডে সাধারণত 1 ডিস্ক আইও প্রয়োজন require

এই কাগজে কী "মাল্টিপল ডিস্ক আইও'র একক ফাইল পড়তে হবে" সমস্যাটি এনএএস অ্যাপ্লিকেশনগুলির জন্য অনন্য, বা লিনাক্সেরও একই সমস্যা রয়েছে?

আমি ইমেজ পরিবেশন করার জন্য একটি লিনাক্স সার্ভার চালানোর পরিকল্পনা করছি। আমি যে কোনও উপায়ে ডিস্কের সংখ্যা কমিয়ে আনতে পারি IO - আদর্শভাবে নিশ্চিত করে যে ওএস সমস্ত ডিরেক্টরি এবং র‍্যামের ইনোড ডেটা ক্যাশে করে এবং প্রতিটি ফাইলের পড়ার জন্য কেবল 1 ডিস্কেরও বেশি আর আইও লাগবে না?


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

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

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

আপনি ফাইল সিস্টেমটি তৈরি করার সময় ব্লকের আকার পরিবর্তন করতে পারেন, উদাহরণস্বরূপ mke2fs -b 32768এটিকে 32 কে তৈরি করে। তবে আপনার যদি সেই ফাইল সিস্টেমে ছোট ফাইল না থাকে তবে এটি কার্যকর files

উত্তর:


5

লিনাক্স একই "সমস্যা" আছে। এখানে আমার একটি শিক্ষার্থী দুই বছর আগে প্রকাশিত একটি গবেষণাপত্র রয়েছে, যেখানে এর প্রভাব লিনাক্সে প্রদর্শিত হয়। একাধিক আইও বিভিন্ন উত্স থেকে আসতে পারে:

  • ফাইল পাথের প্রতিটি ডিরেক্টরি স্তরের ডিরেক্টরি অনুসন্ধান। ডিরেক্টরি ইনোড এবং এক বা একাধিক ডিরেক্টরি এন্ট্রি ব্লক পড়ার প্রয়োজন হতে পারে
  • ফাইলের ইনোড

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

এখানে কয়েকটি ধারনা:

1) ফাইল-সিস্টেম সম্পর্কিত ক্যাশে সহায়তা করে। একটি বড় ক্যাশে বেশিরভাগ পাঠকে শোষণ করবে। তবে, আপনি যদি কোনও মেশিনে কয়েকটি ডিস্ক রাখতে চান তবে ডিস্ক-টু-র‌্যাম অনুপাত কতটা ক্যাশে হয় তা সীমাবদ্ধ করে।

2) লক্ষ লক্ষ ছোট ফাইল ব্যবহার করবেন না। এগুলিকে বড় ফাইলগুলিতে একত্রিত করুন এবং ফাইলের নাম এবং ফাইলের মধ্যে অফসেট সংরক্ষণ করুন।

3) কোনও এসএসডি-তে মেটাডেটা স্থাপন বা ক্যাশে করুন।

4) এবং অবশ্যই একটি ফাইল সিস্টেম ব্যবহার করুন যা সম্পূর্ণ অ্যানার্কিক অন ডিস্ক ডিরেক্টরি বিন্যাসে নেই have কোনও পাঠককে রৈখিক সময়ের চেয়ে বেশি সময় নেওয়া উচিত নয় এবং সরাসরি ফাইল অ্যাক্সেস আদর্শভাবে কেবল লোগারিথমিক সময় হিসাবে নেওয়া উচিত।

ডিরেক্টরি ছোট রাখার ফলে (1000 বা তারও কম) খুব বেশি সহায়তা করা উচিত নয় কারণ আপনাকে ক্যাশে করার জন্য আরও ডিরেক্টরি প্রয়োজন।


এবং অবশ্যই এমন একটি ফাইল সিস্টেম ব্যবহার করবেন যা সম্পূর্ণ ডিস্কিক অন ডিস্ক ডিরেক্টরি বিন্যাসে নেই। কোনও পাঠককে রৈখিক সময়ের চেয়ে বেশি সময় নেওয়া উচিত নয় এবং সরাসরি ফাইল অ্যাক্সেস আদর্শভাবে কেবল লোগারিথমিক সময় হিসাবে নেওয়া উচিত।
jørgensen

আমি উত্তরে 4 র্থ পয়েন্ট হিসাবে যুক্ত করেছি
dmeister

@dmeister ভাল জিনিস। +1
ম্যাগেলান

@dmeister আপনার লিঙ্কটি মারা গেছে।
ডন স্কট

1

এটি আপনার ব্যবহারের পরিকল্পনা করা ফাইল সিস্টেমের উপর নির্ভর করে। ফাইল ডেটা সিস্টেম পড়ার আগে:

  • ডিরেক্টরি ফাইল পড়ুন।
  • আপনার ফাইলের ইনোড পড়ুন
  • আপনার ফাইলের সেক্টরগুলি পড়ুন

ফোল্ডারে যদি বিপুল সংখ্যক ফাইল থাকে তবে এটি ক্যাশে বড় প্রস্তাবনা।


আপনি ইনপুট / আউটপুট ব্যবহারের তালিকা হয়, এটি আরো দ্বারা সঞ্চালিত সেই আলাদা করতে আগ্রহপূর্ণ হতে পারে এমন open()দ্বারা সঞ্চালিত থেকে read()। পৃষ্ঠায় win.tue.nl/~aeb/linux/vfs/trail.html একটি চমৎকার হাঁটা দেখায় যদিও জড়িত বিভিন্ন কার্নেল ধারণাগুলি জড়িত। (সম্ভবত এটি পুরানো? আমি বলতে সক্ষম হব না))
এডল

0

আপনি সম্ভবত সমস্ত ডিরেক্টরি এবং ইনোড ডেটা র‍্যামে রাখতে সক্ষম হবেন না, কারণ আপনার কাছে সম্ভবত র‌্যামের চেয়ে আরও বেশি ডিরেক্টরি এবং ইনোড ডেটা রয়েছে। আপনিও চাইবেন না, যেহেতু র‌্যামটি অন্য উদ্দেশ্যে আরও ভালভাবে ব্যবহার করা যেতে পারে; আপনার চিত্রের উদাহরণে, আপনি কি প্রায়শই অ্যাক্সেস করা চিত্রের ডিরেক্টরি এন্ট্রির চেয়ে র‌্যামে প্রায়শই অ্যাক্সেস করা চিত্রের ডেটা পছন্দ করবেন না?

এটি বলেছিল, আমি মনে করি এটি নিয়ন্ত্রণ করতে vfs_cache_pressure নকটি ব্যবহৃত হয়। "যখন vfs_cache_pressure = 0 হয়, মেমরির চাপের কারণে কার্নেল কখনই ডেন্টি এবং আইনডগুলি পুনরায় দাবি করতে পারে না এবং এটি সহজেই মেমরির বহির্ভূত অবস্থার কারণ হতে পারে।"

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