সিপিইউ চালাচ্ছে না তখন গ্রেপ কী করবে?


19

এর সাথে মিলগুলি grepঅনুসন্ধান করার সময়, আমি প্রায়শই লক্ষ্য করি যে পরবর্তী অনুসন্ধানগুলি প্রথমের তুলনায় উল্লেখযোগ্যভাবে কম সময় নেয় - যেমন 25s বনাম 2s। স্পষ্টতই, এটি শেষ রান থেকে ডেটা স্ট্রাকচারগুলি পুনরায় ব্যবহার করে নয় - সেগুলি অবশ্যই অবনমিত হওয়া উচিত। timeকমান্ড চালাচ্ছি grep, আমি একটি আকর্ষণীয় ঘটনা লক্ষ্য করেছি:

real    24m36.561s
user    1m20.080s
sys     0m7.230s

বাকি সময় কোথায় যায়? এটি প্রতিবার দ্রুত চালিত করার জন্য আমি কি কিছু করতে পারি? (যেমন ফাইলগুলি grepঅনুসন্ধানের আগে অন্য প্রক্রিয়াটি পড়ার পরে ))

উত্তর:


34

এটি প্রায়শই পৃষ্ঠার ক্যাশের সাথে সম্পর্কিত ।

প্রথমবার, ডেটাটি ডিস্ক থেকে পড়তে হবে (শারীরিকভাবে)।

দ্বিতীয়বার (খুব বড় ফাইল না হওয়ার জন্য) এটি পৃষ্ঠা ক্যাশে বসে থাকার সম্ভাবনা রয়েছে।

সুতরাং আপনি প্রথমে বিড়ালের মতো কমান্ড জারি করতে পারেন (1) পৃষ্ঠার ক্যাশে (খুব বেশি বড় নয়) ফাইলটি আনার জন্য (যেমন র‌্যামে), তারপরে দ্বিতীয় গ্রেপ (1) (বা ফাইলটি পড়ার যে কোনও প্রোগ্রাম) সাধারণত দ্রুত চলতে পারে ।

(তবে এখনও কিছু সময় ডিস্ক থেকে ডেটা পড়তে হবে)

এছাড়াও (কখনও কখনও আপনার আবেদন প্রোগ্রামে দরকারী, কিন্তু কার্যত খুব কমই) দেখুন readahead (2) & posix_fadvise (2) এবং সম্ভবত madvise (2) & সিঙ্ক (2) & fsync (2) ইত্যাদি ....

লিনাক্সএটেমাইআরএএমও পড়ুন ।

বিটিডাব্লু, এই কারণেই কোনও প্রোগ্রামকে বেঞ্চমার্ক করার সময় এটি বেশ কয়েকবার চালানোর পরামর্শ দেওয়া হয়। এছাড়াও, এ কারণেই আরও র‌্যাম কেনা কার্যকর হতে পারে (আপনি যদি তাদের ডেটার জন্য এটি ব্যবহার করে প্রোগ্রামগুলি পরিচালনা না করেন)।

আপনি যদি আরও বুঝতে চান তবে কিছু বই যেমন যেমন অপারেটিং সিস্টেম: তিনটি সহজ টুকরো পড়ুন


12
সুতরাং, TL;DRউত্তরটি হ'ল "[অপেক্ষার অপেক্ষায়] আমি / ও"।
mgarciaisaia

10
@ পলড্রাপার আসলেই নয় :) cat+ grepএখনও grepএকা থেকে বেশি সময় নিতে চলেছে ।
চিপনার

3
@ চেপনার আপনি আগ্রহের catজন্য প্রস্তুতি নেওয়ার ক্ষেত্রে আপনি যদি অন্য কোনও কিছু করার সময় সস্তা প্রি- ফ্যাচ হিসাবে মাল্টিথ্রিড এবং ব্যবহার করতে না পারেন তবে grep
hBy2Py

2
@ মারককোয়ান: সুন্দর বিড়াল!    :-) ⁠
জি-ম্যান

3
@ জি-ম্যান: আপনি দুটি প্রতিস্থাপন করতে পারেন catসঙ্গে গুলি tacএকই প্রভাব এবং উচ্চতর র্যাম ব্যবহারের জন্য: ডি অথবা বিড়াল সব Tac সঙ্গে
মার্ক কে কাওয়ান

-1

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

এখানে গ্রেপ নয় - কেবলমাত্র ফাইলের ডেটাগুলির একটি চেকসাম গণনা করার একটি পরীক্ষা রয়েছে's প্রথম অনুরোধটি ধীর এবং পরবর্তীগুলি দ্রুত fast

> du -Dh file_348m
348M    file_348m

> /usr/bin/time md5sum file_348m
738709b181b52ddfcef3413997f91462  file_348m
0.60user 0.15system 0:03.02elapsed 25%CPU (0avgtext+0avgdata 1524maxresident)k
708144inputs+0outputs (0major+80minor)pagefaults 0swaps

> /usr/bin/time md5sum file_348m
738709b181b52ddfcef3413997f91462  file_348m
0.67user 0.06system 0:00.73elapsed 99%CPU (0avgtext+0avgdata 1524maxresident)k
0inputs+0outputs (0major+80minor)pagefaults 0swaps

> /usr/bin/time md5sum file_348m
738709b181b52ddfcef3413997f91462  file_348m
0.65user 0.07system 0:00.73elapsed 99%CPU (0avgtext+0avgdata 1524maxresident)k
0inputs+0outputs (0major+80minor)pagefaults 0swaps

> /usr/bin/time md5sum file_348m
738709b181b52ddfcef3413997f91462  file_348m
0.66user 0.06system 0:00.73elapsed 99%CPU (0avgtext+0avgdata 1524maxresident)k
0inputs+0outputs (0major+80minor)pagefaults 0swaps

আমি ডাউনভোট (গুলি) এর জন্য মন্তব্যগুলির প্রশংসা করব, কারণ আমি তাদের ব্যাখ্যা কীভাবে জানি না। আমি বিশ্বাস করি আমার উত্তরের বর্ণনাটি সঠিক। সম্ভবত কমান্ড উদাহরণ পরিষ্কার নয়? বা আপনি পছন্দ করেন না যে আমি গ্রেপ কমান্ডটি বেঞ্চমার্ক করিনি? (আমি ইচ্ছাকৃতভাবে আমার কমান্ডটি বোঝানোর চেষ্টা করার জন্য এমডি 5সাম, একটি সহজ কমান্ড ব্যবহার করেছি))
উইনস্টন স্মিথ

1
আমি মনে করি কারণটি হ'ল, আপনার পোস্টটি আমি যা বলছিলাম তার সাথে সম্পর্কিত কোনও নতুন তথ্য যুক্ত করেনি add আমি ইতিমধ্যে জানতাম যে সেখানে কোনও বিলম্ব হয়েছে এবং প্রথম উত্তরটি ইতিমধ্যে এটি কেন ঘটছে তার একটি ব্যাখ্যা দিয়েছিল। তবে হ্যাঁ, আমি খুব ব্যাখ্যা ছাড়াই ডাউনভোটস পাই। এমনকি ভাল উত্তর সহ প্রশ্নে।
অ্যালেক্স

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

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

আমি দেখতে পাচ্ছি, আমি একটি পার্থক্য যুক্ত করছি যা আপনি যা খুঁজছিলেন তার পক্ষে গুরুত্বপূর্ণ নয়। ঠিক আছে. যাইহোক, আমি আপনার মন্তব্যে উজ্জীবিত হয়েছি, সুতরাং এটি ডাউনভোটিং কারণটির প্রশ্নটি সমাধান করে না। :-)
উইনস্টন স্মিথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.