সমস্যা
আমি লিনাক্সের এসএসডি ডিস্কের মধ্যে স্যুপ পার্টিশনে ব্যাকগ্রাউন্ড ট্রিম অপারেশন সক্ষম করতে চাই । বিভিন্ন নিবন্ধ, যেমন মতে এই এক , কার্নেল এই কনফিগারেশন সনাক্ত করে এবং স্বয়ংক্রিয়ভাবে বাতিল অপারেশন সঞ্চালিত, কিন্তু আমার পরীক্ষা এটি কাজ করছে না যদিও "বাতিল" মাউন্ট বিকল্প এই আচরণ বাধ্য করতে ব্যবহৃত হয় বলে মনে হয়।
দৃশ্যপট
- ডিবিয়ান হুইজি চলমান লিনাক্স ৩.২.০
- এসএসডি ডিস্ক: 1 এক্স 120 জিবি ওসিজেড ভার্টেক্স 3 এমআই
- 2 জিবি অদলবদল "প্লেইন" পার্টিশন, ডাব্লু / ও অন্যান্য স্তর (এলভিএম, রেড, ইত্যাদি)
পটভূমি
ব্যাকগ্রাউন্ড টিআরআইএম অদলবদল বিভাজনে কাজ করছে কিনা তা যাচাই করতে আমি এই পদক্ষেপগুলি অনুসরণ করি:
ট্রিম সমর্থন : এসএসডি ডিস্ক টিআরআইএম কমান্ড সমর্থন করে কিনা তা পরীক্ষা করে এবং কার্নেলটি ডিভাইসটিকে আবর্তনহীন হিসাবে পতাকাঙ্কিত করে:
# hdparm -I /dev/sda | grep TRIM * Data Set Management TRIM supported (limit 1 block) * Deterministic read data after TRIM # cat /sys/block/sda/queue/rotational 0
অদলবদল ভরাট আপ : পার্টিশনটি মাউন্ট করুন, সমস্ত ভিএম ক্যাশে পরিষ্কার করুন এবং লিনাক্সকে আক্রমণাত্মকভাবে vm.swappiness সেট করে 100 এ পরিবর্তন করতে কনফিগার করুন। তারপরে, একটি স্ক্রিপ্ট চালান যা সমস্ত উপলব্ধ মেমরির বরাদ্দ করে এবং কার্নেলটিকে অদলবদল করতে বাধ্য করে:
# swapon [--discard] /dev/sda2 # echo 3 > /proc/sys/vm/drop_caches # echo 100 > /proc/sys/vm/swappiness # ./fill-up-memory.up
স্ক্রিপ্টটি 32 গিগাবাইট শারীরিক মেমরি + 2 গিগাবাইট অদলবদল সহ সার্ভারে চালিত হয় এবং মেমরিতে একটি .8 33.8 গিগাবাইট অবজেক্ট তৈরি করে, যা সমস্ত স্মৃতি পূরণ করে এবং অদলবদল শুরু করতে যথেষ্ট। এটি এমন স্ক্রিপ্টের একটি উদাহরণ যা এই আচরণটি অর্জন করে:
#!/usr/bin/python mem = 33.8 testing = 'A' * int(1024 * 1024 * 1024 * mem) raw_input()
অদলবদলের সামগ্রী চেক করুন : "স্বপন-এস" দেখায় যে 100% অদলবদল মেমরি ব্যবহৃত হয়েছে। "এইচডিপিআরএম - রিড-সেক্টর" ব্যবহার করে আমি অদলবদল সেক্টরগুলির কাঁচা-সামগ্রী পরীক্ষা করি এবং সমস্ত বাইটগুলি "4141" তে সেট করা আছে, "এ" চরিত্রের জন্য সংশ্লিষ্ট হেক্সাডেসিমাল স্বরলিপি, সবকিছু প্রত্যাশার মতো কাজ করে। সেক্টর-বাই-সেক্টর অদলবদলের পার্টিশনের বিষয়বস্তু পড়ার জন্য এটি একটি উদাহরণ স্ক্রিপ্ট:
#!/bin/bash for sector in `seq 194560 4100095` ; do hdparm --read-sector $sector /dev/sda done
দ্রষ্টব্য: আপনি বিভক্ত, সিএফডিস্ক ইত্যাদি ব্যবহার করে সোয়াপ পার্টিশনের শুরু / শেষের ক্ষেত্রটি পেতে পারেন
আমি যখন স্ক্রিপ্টটি বন্ধ করি তখন এটি অদলবদ বরাদ্দকরণ সহ সমস্ত মেমরি প্রকাশ করে, "স্বপন-এস" সিস্টেমে কোনও অদলবদ ব্যবহার করে না। এই মুহুর্তে, এটি প্রত্যাশা করা হয়েছে যে লিনাক্স অদলবদল করে অদলবদলের অংশটি ব্যাকগ্রাউন্ডে ফেলে দিতে শুরু করে, তবে এটি কার্যকর হয় না , সেক্টরের সামগ্রীগুলি এখনও "4141", এমনকি কয়েক ঘন্টা পরে।
আমি বেশ কয়েকটি পরীক্ষা করে দেখেছি এবং মনে হচ্ছে যে লিনাক্স কেবলমাত্র swapon()
সিস্টেম কল ব্যবহার করে পার্টিশন সক্ষম করার সময় একটি সম্পূর্ণ বিসর্জন সঞ্চালন করে তবে পটভূমিতে কখনই না, যদিও "বাতিল" মাউন্ট অপশনগুলি / etc / fstab এ সক্ষম করা থাকে।
আরও গবেষণা: blkdev_issue_discard () হল অন্তর্নিহিত এসএসডি ডিভাইসে ট্রিম কমান্ড প্রেরণের দায়িত্বে থাকা কার্নেল ফাংশন, এই ফাংশনের দুটি অনন্য রেফারেন্স রয়েছে mm/swapfile.c
:
discard_swap()
এটিকে স্বপন () প্রক্রিয়া চলাকালীন বলা হয়, যদি "বাতিল করা" মাউন্ট অপশন সক্ষম করা থাকে তবে এটি সমস্ত বিষয়বস্তু বাদ দেয়, এটি প্রত্যাশার মতো কাজ করে।discard_swap_cluster()
এটি একটি ক্লাস্টার অদলবদলের বিষয়বস্তু ফেলে দেওয়া উচিত, তবে মনে হয় এটি কখনও ট্রিম কমান্ড সম্পাদন করে না।
প্রশ্ন: অদলবদল + এসএসডি ডিভাইসে লিনাক্সের প্রত্যাশিত আচরণটি কী? এটি সমস্ত ফ্রি সেক্টর / পৃষ্ঠাগুলি বাতিল করতে বা কেবলমাত্র বুট-আপ প্রক্রিয়া চলাকালীন পার্টিশন সক্ষম করার সময় একটি প্রাথমিক পূর্ণ বিসর্জন দেওয়া উচিত? ধন্যবাদ।