সাধারণত ডিস্ক ক্যাশের কর্মক্ষমতা উন্নত করা কেবল ফাইল সিস্টেমের ক্যাশের আকার বাড়ানোর চেয়ে বেশি নয় যতক্ষণ না আপনার পুরো সিস্টেমটি র্যামের সাথে ফিট করে যে ক্ষেত্রে আপনার র্যাম ড্রাইভ ব্যবহার করা উচিত ( tmpfsভাল কারণ এটি যদি আপনাকে কোনও ক্ষেত্রে র্যামের প্রয়োজন হয় তবে ডিস্কে ফিরে যেতে দেয়) রানটাইম স্টোরেজ (এবং শুরুতে স্টোরেজ থেকে র্যাম ড্রাইভে সিস্টেম অনুলিপি করার জন্য একটি প্রাথমিক স্ক্রিপ্ট) for
আপনার স্টোরেজ ডিভাইসটি এসএসডি বা এইচডিডি কিনা তা আপনি জানাননি। আমার জন্য কাজ করার জন্য আমি যা পেয়েছি তা এখানে (আমার ক্ষেত্রে sdaএকটি এইচডিডি মাউন্ট করা /homeএবং sdbএসএসডি মাউন্ট করা আছে /)।
প্রথমে লোড-স্টাফ-থেকে-স্টোরেজ-থেকে-ক্যাশে অংশটি অনুকূলিত করুন:
এইচডিডির জন্য আমার সেটআপ এখানে রয়েছে (নিশ্চিত করুন যে আপনার টগলস থাকলে BIOS এএইচসিআই + এনসিকিউ সক্ষম হয়েছে):
echo cfq > /sys/block/sda/queue/scheduler
echo 10000 > /sys/block/sda/queue/iosched/fifo_expire_async
echo 250 > /sys/block/sda/queue/iosched/fifo_expire_sync
echo 80 > /sys/block/sda/queue/iosched/slice_async
echo 1 > /sys/block/sda/queue/iosched/low_latency
echo 6 > /sys/block/sda/queue/iosched/quantum
echo 5 > /sys/block/sda/queue/iosched/slice_async_rq
echo 3 > /sys/block/sda/queue/iosched/slice_idle
echo 100 > /sys/block/sda/queue/iosched/slice_sync
hdparm -q -M 254 /dev/sda
এইচডিডি কেসটির পক্ষে উল্লেখযোগ্য পরিমাণ উচ্চ fifo_expire_async(সাধারণত লিখুন) এবং slice_syncএকটি একক প্রক্রিয়া উচ্চতর আউটপুট পাওয়ার অনুমতি দেয় ( slice_syncআপনি যদি এমন পরিস্থিতিতে আঘাত করেন যেখানে একাধিক প্রক্রিয়া সমান্তরালে ডিস্ক থেকে কিছু ডেটার জন্য অপেক্ষা করছে) lower slice_idleসবসময় HDDs জন্য একটি আপস কিন্তু সীমার 3-20 কোথাও এটা সেটিং ডিস্ক ব্যবহার এবং ডিস্কে ফার্মওয়্যার উপর নির্ভর করে ঠিক আছে হওয়া উচিত। আমি কম মানগুলির জন্য টার্গেট করতে পছন্দ করি তবে এটি খুব কম সেট করা আপনার থ্রুপুটকে ধ্বংস করবে। quantumসেটিং থ্রুপুট অনেক প্রভাবিত কিন্তু সম্ভব এই কম রাখার যুক্তিসম্মত স্তরে লেটেন্সি রাখার চেষ্টা বলে মনে হয়। quantumখুব কম সেট করা থ্রুপুটকে ধ্বংস করবে। 3-8 পরিসরের মানগুলি এইচডিডি সহ ভাল কাজ করে বলে মনে হচ্ছে। একটি পড়ার জন্য সবচেয়ে খারাপ ক্ষেত্রে বিলম্ব হ'ল ( quantum* slice_sync) + ( slice_async_rq*slice_async) এমএস যদি আমি কার্নেলের আচরণটি সঠিকভাবে বুঝতে পারি তবে। অ্যাসিঙ্কটি বেশিরভাগ লেখক দ্বারা ব্যবহৃত হয় এবং যেহেতু আপনি ডিস্কে লেখার জন্য বিলম্ব করতে ইচ্ছুক, উভয় সেট করে slice_async_rqএবং slice_asyncখুব কম সংখ্যায়। তবে, slice_async_rqখুব কম মান নির্ধারণের ফলে স্টল পড়তে পারে কারণ লেখাগুলি আর বেশি কিছু পড়ার পরে আর দেরি করা যায় না। আমার কনফিগ 10 সেকেন্ড পরে সর্বাধিক ডিস্কে ডেটা লিখতে পরে ডেটা কার্নেলের সাথে প্রেরণ করা হয়েছে চেষ্টা করবে কিন্তু যেহেতু আপনি শক্তি ক্ষয় ডেটা সেট হারানোর সহ্য করতে পারে fifo_expire_asyncথেকে 3600000বলতে 1 ঘন্টা ডিস্কে বিলম্বের জন্য ঠিক আছে। তবে slice_asyncকম রাখুন, অন্যথায় আপনি উচ্চ পঠিত বিলম্ব পেতে পারেন।
hdparmকমান্ড কর্মক্ষমতা AHCI + + NCQ অনুমতি দেয় অনেক প্রাণনাশ থেকে এএএম প্রতিরোধ প্রয়োজন। যদি আপনার ডিস্কটি খুব বেশি শব্দ করে, তবে এড়িয়ে যান।
এসএসডি (ইন্টেল 320 সিরিজ) এর জন্য আমার সেটআপ এখানে রয়েছে:
echo cfq > /sys/block/sdb/queue/scheduler
echo 1 > /sys/block/sdb/queue/iosched/back_seek_penalty
echo 10000 > /sys/block/sdb/queue/iosched/fifo_expire_async
echo 20 > /sys/block/sdb/queue/iosched/fifo_expire_sync
echo 1 > /sys/block/sdb/queue/iosched/low_latency
echo 6 > /sys/block/sdb/queue/iosched/quantum
echo 2 > /sys/block/sdb/queue/iosched/slice_async
echo 10 > /sys/block/sdb/queue/iosched/slice_async_rq
echo 1 > /sys/block/sdb/queue/iosched/slice_idle
echo 20 > /sys/block/sdb/queue/iosched/slice_sync
এখানে বিভিন্ন স্লাইস সেটিংসের জন্য কম মানগুলি লক্ষ্য করার মতো। এসএসডি-র সবচেয়ে গুরুত্বপূর্ণ সেটিংটি slice_idleযা 0-1 তে সেট করতে হবে be এটিকে শূন্যে সেট করা সমস্ত আদেশের সিদ্ধান্তগুলি দেশীয় এনসিকিউ-তে সেট করে রাখার সময় 1 এ সেট করার পরে কার্নেলকে অনুরোধগুলি অর্ডার করতে দেয় (তবে এনসিকিউ সক্রিয় থাকলে, হার্ডওয়্যার আংশিকভাবে কার্নেল অর্ডারকে ওভাররাইড করতে পারে)। পার্থক্যটি দেখতে পাচ্ছেন কিনা তা দেখতে উভয় মান পরীক্ষা করুন। ইন্টেল 320 সিরিজের জন্য, মনে হচ্ছে যে সেটিং slide_idleথেকে 0সেরা থ্রুপুট দেয় কিন্তু এটি সেটিং 1সেরা (সর্বনিম্ন) সামগ্রিক লেটেন্সি দেয়।
এই টিউনবেলগুলি সম্পর্কে আরও তথ্যের জন্য http://www.linux-mag.com/id/7572/ দেখুন ।
বুদ্ধিমান পারফরম্যান্সের সাহায্যে আমরা যখন ডিস্ক থেকে ক্যাশে স্টাফ লোড করার জন্য কার্নেলটি কনফিগার করেছি, তখন সময়টি ক্যাশের আচরণটি সামঞ্জস্য করার:
আমি যে মানদণ্ডগুলি করেছি তা অনুসারে, আমি সামনের blockdevদিকে পড়াটি সেট করা মোটেই বিরক্ত করব না । কার্নেলের ডিফল্ট সেটিংস ঠিক আছে।
অ্যাপ্লিকেশন কোডের তুলনায় ফাইল ডেটা অদলবদল করতে পছন্দ করে নিন সিস্টেমটি সেট করুন (আপনার কাছে পুরো ফাইল সিস্টেম এবং সমস্ত অ্যাপ্লিকেশন কোড এবং র্যামে অ্যাপ্লিকেশন দ্বারা বরাদ্দকৃত সমস্ত ভার্চুয়াল মেমরি রাখার জন্য পর্যাপ্ত র্যাম থাকলে তা বিবেচনা করে না )। এটি একটি একক অ্যাপ্লিকেশন থেকে বড় ফাইলগুলি অ্যাক্সেসের জন্য বিলম্বের চেয়ে বিভিন্ন অ্যাপ্লিকেশনগুলির মধ্যে অদলবদলকে কমিয়ে দেয়:
echo 15 > /proc/sys/vm/swappiness
আপনি যদি অ্যাপ্লিকেশনগুলিকে প্রায় সর্বদা র্যামে রাখতে পছন্দ করেন তবে আপনি এটিকে 1 এ সেট করতে পারেন আপনি যদি এটি শূন্যতে সেট করেন তবে OOM এড়ানোর জন্য একেবারে প্রয়োজনীয় না হলে কার্নেলটি অদলবদল করবে না। আপনি যদি মেমোরি সীমাবদ্ধ থাকেন এবং বড় ফাইলগুলির সাথে কাজ করেন (যেমন এইচডি ভিডিও সম্পাদনা), তবে এটি প্রায় 100 টি সেট করা বুদ্ধিমান হতে পারে।
আপনার কাছে পর্যাপ্ত র্যাম থাকলে আমি আজকাল (2017) মোটামুটি কোনও অদলবদল করতে পছন্দ করি না। কোনও অদলবদল না হওয়া সাধারণত দীর্ঘ চলমান ডেস্কটপ মেশিনে 200-1000 এমবি র্যাম হারাবে। আমি খারাপ পরিস্থিতি দেরি করতে না পারাতে এতটা ত্যাগ করতে ইচ্ছুক (র্যামটি পূর্ণ হলে অ্যাপ্লিকেশন কোডটি অদলবদল করে)। অনুশীলনে, এর অর্থ এই যে আমি ওওম কিলারকে অদলবদল করতে পছন্দ করি। আপনি যদি অদলবদলের প্রয়োজন / প্রয়োজন /proc/sys/vm/watermark_scale_factorহয় তবে কিছুটা বিলম্বিতা এড়াতে আপনিও বাড়াতে চাইতে পারেন । আমি 100 এবং 500 এর মধ্যে মানগুলির পরামর্শ দেব You আপনি এই সেটিংটি লোয়ার অদলবদলের জন্য ট্রেডিং সিপিইউ ব্যবহার হিসাবে বিবেচনা করতে পারেন। ডিফল্ট 10 এবং সর্বাধিক সম্ভব 1000 হয় possible উচ্চতর মান ( কার্নেল ডকুমেন্টেশন অনুযায়ী ) kswapdপ্রক্রিয়াগুলির জন্য উচ্চ সিপিইউ ব্যবহারের ফলে এবং সামগ্রিকভাবে অদলবদল কম করতে পারে।
এরপরে, কিছু র্যাম মুক্ত করার প্রয়োজনে ফাইলের বিষয়বস্তুগুলির চেয়ে মেমরির মধ্যে ডিরেক্টরি রাইরিচি রাখার বিষয়ে কর্নেলকে বলুন (আবার, যদি সবকিছু র্যামের সাথে খাপ খায় তবে এই সেটিংটি কিছুই করে না):
echo 10 > /proc/sys/vm/vfs_cache_pressure
স্থাপন vfs_cache_pressureনিম্ন মানটি বোধগম্য হয় কারণ বেশিরভাগ ক্ষেত্রে, কার্নেলটি ক্যাশে থেকে ফাইল সামগ্রী ব্যবহার করার আগে ডিরেক্টরি কাঠামোটি জানতে এবং ডিরেক্টরি ক্যাশে খুব শীঘ্রই ফ্লাশ করে ফেলা ফাইলের ক্যাশেটিকে অকার্যকর করে তোলে। আপনার কাছে প্রচুর ছোট ফাইল থাকলে (আমার সিস্টেমে প্রায় 150 কে 10 মেগাপিক্সেলের ফটো রয়েছে এবং "প্রচুর ছোট ফাইল" সিস্টেম হিসাবে গণনা করা হয়) এই সেটিংটি দিয়ে 1 এ নিচে যাওয়ার বিষয়টি বিবেচনা করুন। এটিকে কখনই শূন্যে সেট করবেন না বা সিস্টেমের মেমরিটি শেষ না হয়ে থাকলেও ডিরেক্টরি কাঠামো সর্বদা মেমরিতে রাখা হয় না। এটিকে বড় মান হিসাবে সেট করা কেবলমাত্র বোধগম্য যদি আপনার কাছে কেবলমাত্র কয়েকটি বড় ফাইল থাকে যা নিয়মিত পুনরায় পড়া হয় (আবার, পর্যাপ্ত র্যাম ছাড়াই এইচডি ভিডিও সম্পাদনা উদাহরণস্বরূপ হতে পারে)) অফিসিয়াল কার্নেল ডকুমেন্টেশন বলে যে "
ব্যতিক্রম: আপনার যদি সত্যিই প্রচুর পরিমাণে ফাইল এবং ডিরেক্টরি থাকে এবং আপনি খুব কমই vfs_cache_pressure100 এরও বেশি সেট করে থাকা সমস্ত ফাইলকে স্পর্শ / পড়ুন / তালিকা বুদ্ধিমান করতে পারেন। এটি কেবলমাত্র তখনই প্রযোজ্য যখন আপনার কাছে পর্যাপ্ত র্যাম না থাকে এবং সম্পূর্ণ ডিরেক্টরি কাঠামোটি র্যামে রাখতে না পারে এবং সাধারণ ফাইল ক্যাশে এবং প্রসেসের জন্য পর্যাপ্ত পরিমাণে র্যাম থাকা (যেমন প্রচুর আর্কাইভাল সামগ্রী সহ কোম্পানির ওয়াইড ফাইল সার্ভার)। আপনি যদি মনে করেন যে আপনার vfs_cache_pressure100 এর উপরে বাড়ানো দরকার আপনি পর্যাপ্ত র্যাম ছাড়াই চালাচ্ছেন। বর্ধন vfs_cache_pressureসাহায্য করতে পারে তবে একমাত্র আসল ফিক্স হ'ল আরও র্যাম পাওয়া। রয়ে vfs_cache_pressureউচ্চ সংখ্যা সেট আরো স্থিতিশীল কর্মক্ষমতা সামগ্রিক থাকার জন্য গড় কর্মক্ষমতা শহীদ (যেমন, আপনি কি সত্যিই খারাপ সবচেয়ে খারাপ ক্ষেত্রে আচরণ এড়াতে হয়ে শুনছি সামগ্রিক কর্মক্ষমতা সঙ্গে মোকাবেলা করতে হবে পারে)।
অবশেষে (ডিফল্ট RAM এর 50% পর্যন্ত ব্যবহার করতে বলে গেছেন ক্যাশ হিসাবে RAM এর 99% পর্যন্ত ব্যবহার এবং কার্নেল নির্দেশ নিচে প্রক্রিয়া যা লেখা হচ্ছে গতি কমে আগে কার্নেল বলতে dirty_background_ratioহয় 10)। সতর্কতা: আমি ব্যক্তিগতভাবে এটি করব না তবে আপনি পর্যাপ্ত র্যাম থাকার দাবি করেছেন এবং ডেটা হারাতে ইচ্ছুক।
echo 99 > /proc/sys/vm/dirty_ratio
echo 50 > /proc/sys/vm/dirty_background_ratio
এবং বলুন যে 1 ঘন্টা লেখার বিলম্ব ঠিক এমনকি ডিস্কে স্টাফ লেখা শুরু করা ঠিক (আবার, আমি এটি করব না):
echo 360000 > /proc/sys/vm/dirty_expire_centisecs
echo 360000 > /proc/sys/vm/dirty_writeback_centisecs
আপনি যদি এই /etc/rc.localসমস্তগুলি রেখে এবং শেষে অন্তর্ভুক্ত করেন তবে বুটের পরে যত তাড়াতাড়ি সম্ভব সমস্ত কিছু ক্যাশে হবে (কেবলমাত্র যদি আপনার ফাইল-সিস্টেমটি র্যামের সাথে ফিট করে তবেই এটি করুন):
(nice find / -type f -and -not -path '/sys/*' -and -not -path '/proc/*' -print0 2>/dev/null | nice ionice -c 3 wc -l --files0-from - > /dev/null)&
বা কিছুটা সহজ বিকল্প যা আরও ভাল কাজ করতে পারে (কেবলমাত্র ক্যাশে /homeএবং /usrকেবলমাত্র এটি করুন যদি আপনার /homeএবং /usrসত্যিকারের রামে ফিট থাকে):
(nice find /home /usr -type f -print0 | nice ionice -c 3 wc -l --files0-from - > /dev/null)&