লিনাক্স রিড অদলবদলটিকে স্মৃতিতে ফিরিয়ে আনছে


28

লিনাক্স কার্নেল বেশিরভাগ পৃষ্ঠাগুলি মেমরি থেকে সরিয়ে দেয় যখন আমি একটি অ্যাপ্লিকেশন চালিত করি যা 16 গিগাবাইটের বেশিরভাগ দৈহিক মেমরি ব্যবহার করে। অ্যাপ্লিকেশন শেষ হওয়ার পরে, প্রতিটি ক্রিয়াকলাপ (টাইপিং কমান্ড, ওয়ার্কস্পেসগুলি স্যুইচ করা, একটি নতুন ওয়েব পৃষ্ঠা খোলার ইত্যাদি) সম্পূর্ণ হতে খুব বেশি সময় নেয় কারণ সম্পর্কিত পৃষ্ঠাগুলি প্রথমে অদলবদল থেকে আবার পড়া দরকার need

লিনাক্স কার্নেলকে কীভাবে প্রতিটি অ্যাপ্লিকেশনটিকে ম্যানুয়ালি স্পর্শ না করে (এবং অপেক্ষা করা) অবধি শারীরিক স্মৃতিতে অদলবদল থেকে পৃষ্ঠাগুলি অনুলিপি করতে বলার উপায় আছে? আমি প্রচুর অ্যাপ্লিকেশন চালায় তাই অপেক্ষাটি সর্বদা বেদনাদায়ক থাকে।

আমি প্রায়শই swapoff -a && swapon -aসিস্টেমটিকে পুনরায় প্রতিক্রিয়াশীল করতে ব্যবহার করি তবে এটি পৃষ্ঠাগুলি অদলবদল থেকে সাফ করে, তাই পরের বার স্ক্রিপ্টটি চালানোর সময় সেগুলি আবার লিখতে হবে।

অদলবদল থেকে সমস্ত পৃষ্ঠা পড়ার জন্য কার্নেলকে নির্দেশ দেওয়ার জন্য কি কোনও কার্নেল ইন্টারফেস রয়েছে? সম্ভবত sysfs ব্যবহার করে?

সম্পাদনা করুন: আমি সত্যিই সমস্ত অদলবদল সোয়াপকাড করার উপায় খুঁজছি। (ধন্যবাদ ডারোবার্ট!)

[পিএস সার্ভারফল্ট / প্রশ্নস / ১৫৯৯4646/২ এবং সার্ভারফল্ট / কোয়েসশনস / ১০০৪৮ / … সম্পর্কিত বিষয়গুলি তবে ল্যাপটপের কার্নেলকে অদলবদল থেকে পৃষ্ঠাগুলি অনুলিপি করে কীভাবে অদলবদল ছাড়াই মেমোরিতে পাঠানো যায় সে প্রশ্নের সমাধান করেন না।]


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

আমি মনে করি না যে এটি অদলবদল হয়ে যাবে ap যেমনটি আমার কাছে মনে হয় যে আপনার পরামর্শটি সোয়াপফ-সোয়াপন পদ্ধতির বিকল্প।
ড্রসসাম

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

উত্তর:


4

মূলত এখানে পাওয়া মেমডম্প প্রোগ্রামের ভিত্তিতে আমি নির্দিষ্ট অ্যাপ্লিকেশনগুলি নির্বাচন করে মেমরিতে ফিরে যেতে একটি স্ক্রিপ্ট তৈরি করেছি। :remember

#!/bin/bash
declare -A Q
for i in "$@"; do
    E=$(readlink /proc/$i/exe);
    if [ -z "$E" ]; then.
        #echo skipped $i;.
        continue;.
    fi
    if echo $E | grep -qF memdump; then.
        #echo skipped $i >&2;.
        continue;.
    fi
    if [ -n "${Q[${E}]}" ]; then.
        #echo already $i >&2;.
        continue;.
    fi
    echo "$i $E" >&2
    memdump $i 2> /dev/null
    Q[$E]=$i
done | pv -c -i 2 > /dev/null

ব্যবহার: কিছু

# ./remember $(< /mnt/cgroup/tasks )
1 /sbin/init
882 /bin/bash
1301 /usr/bin/hexchat
...
2.21GiB 0:00:02 [ 1.1GiB/s] [  <=>     ]
...
6838 /sbin/agetty
11.6GiB 0:00:10 [1.16GiB/s] [      <=> ]
...
23.7GiB 0:00:38 [ 637MiB/s] [   <=>    ]
# 

এটি অ-অদল-বদল করা মেমরির (সেকেন্ডে প্রতি গিগাবাইট) এড়িয়ে যায় এবং যখন অদলবদীর প্রয়োজন হয় তখন ধীর হয়ে যায়।


এই সরঞ্জামটি ঠিক তাই করে যা আমি খুঁজছিলাম does ধন্যবাদ!
ড্রসসাম

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

11

এটি আপ করতে সহায়তা করতে পারে /proc/sys/vm/page-cluster(ডিফল্ট: 3)।

কার্নেল ডকুমেন্টেশন ( sysctl/vm.txt) থেকে:

পৃষ্ঠা-ক্লাস্টার

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

এটি একটি লোগারিথমিক মান - এটি শূন্যে সেট করার অর্থ "1 পৃষ্ঠা", এটির 1 সেট করার অর্থ "2 পৃষ্ঠাগুলি", এটির 2 সেট করার অর্থ "4 পৃষ্ঠাগুলি" ইত্যাদি Z শূন্যটি সম্পূর্ণরূপে অদলবদল অক্ষম করে।

ডিফল্ট মান তিনটি (একসাথে আট পৃষ্ঠা)। আপনার কাজের চাপ অদলবদল-নিবিড় থাকলে এটি একটি অন্য মূল্যের সাথে সুর করার কিছু ছোট সুবিধা থাকতে পারে।

নিম্ন মানের মানে প্রাথমিক ত্রুটির জন্য নিম্ন বিলম্বিত হওয়া, তবে একই সময়ে অতিরিক্ত ত্রুটিগুলি এবং I / O বিলম্বগুলি নিম্নলিখিত দোষগুলির জন্য বিলম্বিত করে যদি তারা সেই ধারাবাহিক পৃষ্ঠাগুলির অংশ হয়ে থাকে তবে পঠন শিরোনামটি এনেছে।

ডকুমেন্টেশনটিতে কোনও সীমা উল্লেখ করা হয়নি, তাই সম্ভবত আপনি খুব শীঘ্রই সমস্ত অদলবদলকে আবার পড়তে সক্ষম করার জন্য এই অযৌক্তিকভাবে উচ্চ স্থাপন করতে পারেন। এবং অবশ্যই এটি পরে একটি বুদ্ধিমান মান ফিরে।


এটি কার্যকর কাজের মতো মনে হচ্ছে। দুটি ম্যানুয়াল হস্তক্ষেপগুলি একটি একক ব্যবহারকারীর হস্তক্ষেপে একটি স্লিপ কমান্ডের সাথে একত্রিত হতে পারে। তবে এটি অ্যাক্সেস করা পৃষ্ঠা থেকে কেবল অবিচ্ছিন্নভাবে পড়ার কারণে সমস্ত অদলবদল খুব দ্রুত অদলবদল করতে পারে না। যদিও এটি এখন পর্যন্ত সেরা সমাধান। ধন্যবাদ!
ড্রসসাম

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

এই বিষয়টির জন্য, যদি আপনি প্রচুর ক্রমাগত ছোট ছোট অদলবদলের কারণে মন্দা অনুভব করছেন, এমনকি স্থায়ীভাবে page-clusterমান আপের সমন্বয় করা পারফরম্যান্সের উন্নতি করতে পারে।
ইলমারি করোনেন

5

আপনি একটি সৃজনশীল গোষ্ঠীতে সর্বাধিক যত্নশীল প্রোগ্রামগুলিকে যুক্ত করার চেষ্টা করতে পারেন এবং অদলবদল করতে পারেন যাতে পরবর্তী সময় অ্যাপ্লিকেশনটি আপনার যুক্ত প্রোগ্রামগুলি চালায় তবে অদলবদলের প্রার্থী হওয়ার সম্ভাবনা কম।

তাদের কিছু পৃষ্ঠাগুলি সম্ভবত এখনও অদলবদল হয়ে যাবে তবে এটি আপনার কার্য সম্পাদন সমস্যা হতে পারে। এর একটি বড় অংশ সম্ভবত "স্টপ এবং স্টার্ট" আচরণ যখন কোনও প্রোগ্রামের অনেকগুলি পৃষ্ঠাগুলি অদলবদলে থাকে এবং প্রোগ্রামটি নিয়মিতভাবে তার পৃষ্ঠাগুলি র‍্যামে পরিবর্তন করতে থাকে তবে কেবল 4 কে বৃদ্ধি হয় 4

বিকল্পভাবে, আপনি সেই অ্যাপ্লিকেশনটি যুক্ত করতে পারেন যা চলছে একটি সিগ্রুপ এবং টিউন অদলবদলের সাথে যাতে অ্যাপ্লিকেশনটি স্যুপের ফাইলটি সর্বাধিক ব্যবহার করতে থাকে। এটি অ্যাপ্লিকেশনটি কমিয়ে দেবে তবে এটি সিস্টেমের বাকী অংশগুলিকে ছাড়বে।


4

আমার কাছে মনে হচ্ছে আপনি ম্যাজিকালি "সিস্টেমটিকে আবার প্রতিক্রিয়াশীল করতে পারবেন না"। আপনি এখন জরিমানা বা পাতাগুলি অদলবদল থেকে অদলবদল থেকে মেমোরিতে ফিরে পঠন করতে পারেন বা আপনি এটি পরে ব্যয় করেছেন, তবে একরকম বা অন্যভাবে আপনি এটি ব্যয় করেছেন। প্রকৃতপক্ষে, যদি আপনি ভালো কিছু করতে swapoff -a && swapon -aতারপর আপনি হয়তো মনে করতে পারেন আরো ব্যথা বরং কম, কারণ আপনি মেমরিতে কপি ফিরে অন্যথায় যেত আবার এবং শেষ পর্যন্ত প্রয়োজন হয়েছে না পঠিত ছাড়া বাদ দেয়া হবে কিছু পৃষ্ঠা ফোর্স (চিন্তা করুন: যদি আপনি কোন প্রয়োগ যখন প্রস্থান এর গাদা অংশগুলি খুব অদলবদল হয়ে গেছে; সেই পৃষ্ঠাগুলি কখনও স্মৃতিতে ফিরে না পেয়ে পুরোপুরি ফেলে দেওয়া যেতে পারে)।

তবে এটি পৃষ্ঠাগুলি অদলবদল থেকে সাফ করে, সুতরাং পরের বার স্ক্রিপ্টটি চালানোর সময় সেগুলি আবার লেখা দরকার।

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

আমি মনে করি আপনার swapoff -a && swapon -aকৌশলটি যে কোনও কিছু নিয়ে আসতে পারে যতটা ভাল।


আমরা দুজনেই একই সময়ে একই কথা বলছি;)
স্বর্ণলোকস

@ গোল্ডিলোকস হ্যাঁ, আমি আমার উত্তর প্রস্তুত হওয়ার আগে আপনার উত্তর উপস্থিত হতে দেখেছি তবে আমি ইতিমধ্যে শেষ হয়ে গিয়েছি so সুতরাং আমি এটির সাথে
আটকেছি

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

আমি বিশ্বাস করি যে আপনি ডেভিড স্পিলিট দ্বারা উল্লিখিত উত্তরটি সঠিক: আপনার একই সময়ে অদলবদল এবং র‌্যামের একটি পৃষ্ঠা থাকতে পারে ... তবে কেবল র‌্যাম সংস্করণটি সংশোধন না হওয়া পর্যন্ত। তারপরে আপনাকে অদলবদলের পুরানো কপিটি বাতিল করতে হবে। যখন আমি বলেছিলাম "যে কোনও পৃষ্ঠাগুলি অদলবদল থেকে অনুলিপি হয়ে ফিরে আসে [...] যাইহোক পরিবর্তিত হতে চলেছে" আমার অর্থ হ'ল আমি প্রত্যাশা করি যে বেশিরভাগ সময় এমনটি ঘটে, তাই আমি পৃষ্ঠাগুলি আশা করি না উভয় জায়গায় চিন্তিত মূল্যবান ভগ্নাংশ হতে।
সেলেদা

আপনার ব্যবহারের পরিস্থিতি ভিন্ন হতে পারে: আপনার কাছে বড় বড় হ্যাপ সহ প্রচুর অ্যাপ্লিকেশন থাকতে পারে যা ঘন ঘন পড়া হয় এবং লিখিত হয় না। আমার অনুভূতি হ'ল বেশিরভাগ লোকের এমন দৃশ্য নেই। তবে আপনি যদি করেন তবে আমি অনুমান করি আপনি ঠিক বলেছেন: আপনার swapoff -a && swapon -aপক্ষে ভাল হবে না। আমি মনে করি সেক্ষেত্রে আপনার এমন কিছু দরকার যা /proc/<each-process>/memর‌্যামে বিদ্যমান রয়েছে তা নিশ্চিত করার জন্য মেমরির প্রতিটি পৃষ্ঠা স্ক্যান করে এবং পড়তে পারে। জানি না যে এটি বিদ্যমান কিনা।
সেলেদা

0

একটা খুব সুন্দর এখানে আলোচনা http://rudd-o.com/en/linux-and-free-software/tales-from-responsivenessland-why-linux-feels-slow-and-how-to-fix-that যা সিস্টেমের অনুভূত প্রতিক্রিয়া বাড়ানোর জন্য কোডটি অদলবদল করা (এবং এটিই ঘটে যা) রোধ করা উচিত এই ধারণাটি নিয়ে ক্রমশ কমতে শুরু করে app এটি সত্যই আপনার প্রশ্নের উত্তর নয়, তবে এটি সমস্যাটি উপস্থিত হতে বাধা দিতে পারে (আপনার অ্যাপ্লিকেশনগুলি কেবল অদলিত ডেটা এবং পৃষ্ঠার ক্যাশেটি অদলবদল হয় না)


যতক্ষণ এই তাত্ত্বিক প্রশ্নের উত্তর হতে পারে, এটা বাঞ্ছনীয় হবে উত্তর অপরিহার্য অংশের এখানে অন্তর্ভুক্ত করা, এবং রেফারেন্স এর জন্য লিঙ্ক প্রদান।
slm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.