আপনি যখন ls
তর্ক ছাড়াই চালান , এটি কেবল একটি ডিরেক্টরি খুলবে, সমস্ত বিষয়বস্তু পড়বে, সেগুলি বাছাই করে প্রিন্ট আউট করবে।
আপনি যখন চালনা করেন ls *
, প্রথমে শেলটি প্রসারিত হয় *
, যা কার্যকরভাবে একইভাবে কার্যকর যা একই রকম ls
হয়েছিল, বর্তমান ডিরেক্টরি এবং কলগুলির সমস্ত ফাইল দিয়ে একটি আর্গুমেন্ট ভেক্টর তৈরি করে ls
। ls
তারপরে সেই আর্গুমেন্ট ভেক্টর এবং প্রতিটি access(2)
তর্কটির জন্য প্রক্রিয়া করতে হবে এবং তার অস্তিত্ব পরীক্ষা করার জন্য ফাইলটি কল করে। তারপরে এটি প্রথম (সাধারণ) হিসাবে একই আউটপুট প্রিন্ট করবে ls
। বড় আর্গুমেন্ট ভেক্টর এবং শেলের উভয় শেল প্রসেসিংয়ে ls
সম্ভবত ছোট ব্লকের প্রচুর মেমরি বরাদ্দ থাকবে, এতে কিছুটা সময় নিতে পারে। যাইহোক, যেহেতু ছোট ছিলাম sys
এবং user
সময় কিন্তু অনেকটা real
সময়, অধিকাংশ সময় ডিস্ক জন্য অপেক্ষা বদলে CPU- র ব্যবহার মেমরি অ্যালোকেশন করছেন অতিবাহিত করা হত।
প্রতিটি কল করতে access(2)
অনুমতি সম্পর্কিত তথ্য পেতে ফাইলের ইনোডটি পড়তে হবে। এর অর্থ কেবল একটি ডিরেক্টরি পড়ার চেয়ে অনেক বেশি ডিস্ক পড়ে এবং সন্ধান করে। আপনার জিপিএফএসে এই অপারেশনগুলি কতটা ব্যয়বহুল তা আমি জানি না, তবে যে তুলনাটি আপনি দেখিয়েছেন ls -l
যা ওয়াইল্ডকার্ডের ক্ষেত্রে একই রকম রান সময় রয়েছে, তাই ইনোডের তথ্য পুনরুদ্ধার করার জন্য প্রয়োজনীয় সময়টি প্রাধান্য পেয়েছে বলে মনে হয়। জিপিএফএসের প্রতিটি পঠন ক্রিয়াকলাপে আপনার স্থানীয় ফাইল সিস্টেমের তুলনায় কিছুটা বেশি বিলম্ব থাকলে, আমরা আশা করব যে এই ক্ষেত্রে এটি আরও প্রকট হবে।
ওয়াইল্ডকার্ড কেস এবং ls -l
50% এর মধ্যে পার্থক্যটি ডিস্কে ইনোডের ক্রম দ্বারা ব্যাখ্যা করা যেতে পারে। ডিরেক্টরিতে ফাইলের নাম এবং ls -l
স্ট্যাট (2) বাছাইয়ের আগে ডিরেক্টরি অনুসারে ফাইলগুলি সম্পাদনা করলে আইওডগুলি ক্রমান্বয়ে বিছানো হয় , ls -l
সম্ভবত বেশিরভাগ ইনোডগুলি একটি ঝাড়ুতে পড়তে পারে। ওয়াইল্ডকার্ডের সাহায্যে শেল ফাইলের নামগুলি পাসের আগে বাছাই করবে ls
, সুতরাং ls
সম্ভবত আরও একটি ডিস্কে ইনোডগুলি পড়বে, আরও বেশি ডিস্কের মাথা গতি যুক্ত করবে।
এটি লক্ষ্য করা উচিত যে আপনার time
আউটপুটটিতে শেল দ্বারা ওয়াইল্ডকার্ড প্রসারিত করার সময়টি অন্তর্ভুক্ত করবে না।
আপনি যদি সত্যিই যা দেখতে চান তা দেখতে, ব্যবহার করুন strace(1)
:
strace -o /tmp/ls-star.trace ls *
strace -o /tmp/ls-l-star.trace ls -l *
এবং প্রতিটি ক্ষেত্রে কোন সিস্টেম কলগুলি করা হচ্ছে তা দেখুন।
Actually আমি access(2)
আসলে জানি না বা অন্য কিছু যেমন ব্যবহার করা হয় তা জানি না stat(2)
। তবে উভয়টিরই সম্ভবত একটি ইনোড সন্ধানের প্রয়োজন (আমি নিশ্চিত নই যে access(file, 0)
কোনও ইনোড লুকোপসাইকে বাইপাস করা উচিত কিনা ))
ls
এটা ঠিক ফাইল সিস্টেম "কি জন্য inode সন্তান অনুরোধ করতে পারেনpwd
যেখানে সঙ্গে হিসাবে"ls *
এটি জিজ্ঞাসা করতে হবে "ইনোডের বাচ্চারা (এবং ফাইলটি কী)a
" এর পরে বি, সি, ডি ইত্যাদি রয়েছে etc.