লিনাক্স ক্যাশেগুলি যদি খুব বড় হয় তবে কেন QEMU মেমরি বরাদ্দ করতে পারে না?


9

আমি যদি আমার মেশিনটি [উবুন্টু 16.04 64 বিট, কার্নেল ৪.৪] ব্যবহার করি তবে কিউইএমইউতে কার্নেল ক্যাচগুলি নামানোর দরকার আছে, অন্যথায়, এটি র‌্যাম বরাদ্দ করতে পারে না।

কেন এমন হয়?

এটি একটি নমুনা রান:

~$ free -m
              total        used        free      shared  buff/cache   available
Mem:          15050        5427        3690          56        5931        4803
Swap:             0           0           0

~$ sudo qemu-system-x86_64 -m 10240 # and other options
qemu-system-x86_64: cannot set up guest memory 'pc.ram': Cannot allocate memory

~$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3

~$ free -m
              total        used        free      shared  buff/cache   available
Mem:          15050        1799        9446          56        3803        9414
Swap:             0           0           0

~$ sudo qemu-system-x86_64 -m 10240 # and other options
qemu-system-x86_64: cannot set up guest memory 'pc.ram': Cannot allocate memory

~$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3

~$ free -m
              total        used        free      shared  buff/cache   available
Mem:          15050        1502       10819          56        2727       10784
Swap:             0           0           0

~$ sudo qemu-system-x86_64 -m 10240 # and other options
# Now QEMU starts

4
কারণ আপনি কোনও অদলবদল পান নি।
মাইকেল হ্যাম্পটন

উত্তর:


19

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

আপনার সত্যিকারের যুক্তিসঙ্গত পরিমাণে অদলবদল হওয়া উচিত। আপনি আশা করতে পারবেন না মেমোরি ম্যানেজার তার পিছনে পিছনে একটি হাত বাঁধা দিয়ে একটি ভাল কাজ করবে।


1
একটি তাত্ত্বিক প্রশ্ন হিসাবে (যেহেতু আমি মেমরি ম্যানেজমেন্ট আসলে কীভাবে কাজ করে সে সম্পর্কে আরও জানতে চাই) কেন ম্যানেজার দেরী করতে পারে না (ব্লক) নোংরা পৃষ্ঠাগুলি আবার লেখার সময় কিউইএমইউর মেমরি বরাদ্দের চেষ্টা করে না?
ন্যানোফারাড

2
@ হেক্সাফ্রাকশন কেবল একটি অনুমান: এটি সম্ভবত প্রযুক্তিগতভাবে সম্ভব (তবে উল্লেখযোগ্য জটিলতা যোগ করতে পারে, নিশ্চিত নয়) তবে কার্নেল ডিভাস সম্ভবত যুক্তি দিতেন যে সেই বৈশিষ্ট্যটির কোনও প্রয়োজন নেই, কারণ এটি সমাধান করার একমাত্র সমস্যাটি অদলবদল না হওয়ার কারণে ঘটেছিল, যা অন্যান্য সমস্যাগুলিরও কারণ হয়, যদি আপনি কেবলমাত্র অদলবদ সক্ষম করে থাকেন এবং কার্নেলটি এর মেমরি পরিচালনাটি ইতিমধ্যে ভালভাবে করার জন্য কোড করে দিয়েছে।
mtraceur

1
পছন্দ কিছু অ্যাপ্লিকেশনগুলির জন্য, এটি কোনও অর্থ দেয় না, সুতরাং এটি সাধারণ নীতি নয়। কিউইএমইউ এটি না করার সিদ্ধান্ত নিয়েছে।
ডেভিড শোয়ার্জ

2
বা একাধিক মিনিট - - আপনার জন্য @hexafraction সত্যিই, আপনি 30 সেকেন্ড অপেক্ষা করতে চান malloc()কলে হয়তো পর্যাপ্ত মেমরি খুঁজে পাচ্ছেন না?
মাইকেল হ্যাম্পটন

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