এখন যথাসময়ে, আমি নিজেই এটি সমাধান করতে পেরেছি, সুতরাং আমি অন্ততপক্ষে উত্তরসূরিদের জন্য নিজে এটি অনুসরণ করতে পারি।
দুর্ভাগ্যক্রমে, আমি কার্নেল আপগ্রেডে মূল সমস্যাটি হারিয়েছি, তবে পরিবর্তে একটি নতুন সমস্যা অর্জন করেছি, কর্মক্ষমতা থেকেও খারাপ, এবং ঠিক ততটা খুঁজে পাওয়া শক্ত। আমি যে কৌশলগুলি পেয়েছি সেগুলি নিম্নলিখিত ছিল:
প্রথমত, blktrace
/ blkparse
একটি সরঞ্জাম যা আমি বেশ সহায়ক বলে মনে করি। এটি অনেক সহায়ক বিশদ যেমন স্বতন্ত্র আই / ও অনুরোধগুলির অগ্রগতির সন্ধানের অনুমতি দেয়, যেমন অনুরোধটি জমা দেওয়ার প্রক্রিয়া। আউটপুটটি চালিত করা সহায়ক tmpfs
, যাতে ট্রেসের স্টোরেজ হ্যান্ডলিং নিজেই ট্রেসিং শুরু না করে।
এটি কেবলমাত্র এখনও পর্যন্ত সহায়তা করেছে, তাই আমি আরও ডিবাগিং কার্যকারিতা সহ একটি কার্নেল সংকলন করেছি। বিশেষত, আমি ftrace
বেশ সহায়ক পেয়েছি , যেহেতু এটি আমাকে কার্নেল স্পেসের মধ্যে খারাপভাবে সম্পাদন করার প্রক্রিয়াটি সন্ধান করার অনুমতি দিয়েছে, এটি কী করেছে এবং এটি কোথায় আটকেছে তা দেখার জন্য। একটি ডিবাগ কার্নেল সংকলন এছাড়াও কার্যক্ষম WCHAN
আউটপুট সরবরাহ করে ps
, যা কার্নেলের ভিতরে কোনও প্রক্রিয়া কী করছে তা দেখার সহজ উপায় হিসাবে কাজ করতে পারে, কমপক্ষে সহজ ক্ষেত্রেও for
আমিও প্রত্যাশা করেছিলাম যে লেটেন্সিটপটি কার্যকর হবে, তবে আমি এটি বেশ কৃপণভাবে খুঁজে পেয়েছি এবং এটিও যে দুর্ঘটনাক্রমে, খুব বেশি "উচ্চ-স্তরের" ছিল এমন বিলম্বিত কারণগুলি প্রদর্শন করেছে।
এছাড়াও, আমি খুব কাছাকাছি বিরতিতে iostat
কেবল এই জাতীয় বিষয়বস্তু দেখার চেয়ে আরও সহায়ক বলে মনে করেছি /sys/block/$DEVICE/stat
:
while :; do cat /sys/block/sda/stat; sleep .1; done
ফাইলের Documentation/iostats.txt
বিন্যাসের জন্য কার্নেল উত্স ট্রিটিতে দেখুন stat
। কাছাকাছি সময়ে এটিকে দেখার ফলে I / O বিস্ফোরণগুলির সঠিক সময় এবং আকার এবং এ জাতীয় জিনিসগুলি দেখতে পেতাম।
শেষ পর্যন্ত, আমি জানতে পেরেছিলাম যে কার্নেল আপগ্রেড করার পরে আমার যে সমস্যাটি হয়েছিল স্থিতিশীল পৃষ্ঠাগুলির কারণে হয়েছিল , এটি লিনাক্স 3.0.০-এ প্রবর্তিত একটি বৈশিষ্ট্য, যার ফলে বার্কলে ডিবি এমএমপড পৃষ্ঠাগুলিকে নোংরা করার সময় বর্ধিত সময়কালের জন্য থামবে to অঞ্চল ফাইল। যদিও এই বৈশিষ্ট্যটি প্যাচ করা সম্ভব বলে মনে হচ্ছে এবং লিনাক্স ৩.৯-এ এটির সমস্যাগুলিও সংশোধন করা যেতে পারে, বার্কলে ডিবি প্যাচ করে আমার এখনকার সবচেয়ে খারাপ সমস্যাটি সমাধান করেছি যাতে আমাকে এর অঞ্চলের ফাইলগুলি অন্য একটি ডিরেক্টরিতে রাখার সুযোগ দেয় I (আমার ক্ষেত্রে /dev/shm
), আমাকে পুরোপুরি সমস্যা এড়াতে দেয়।