मुझे कुछ डिकंप्रेसन कार्यक्रमों को जल्दी से बेंचमार्क करने का विचार था। उदाहरण के लिए, मैं कमांड चलाऊंगा:
timeout 10 zcat foo.gz | wc -c
जो डेटा की मात्रा को मापता है वह डिकंप्रेसर 10 सेकंड में निकाल सकता है।
एकमात्र समस्या यह है, कि यह काम नहीं करता है: जैसे कि zcat को मार दिया जाता है, wc को भी मार दिया जाता है, इसलिए मुझे बाइट की गिनती नहीं मिलती है, बस एक Terminated
संदेश।
तो, सवाल यह है: क्या कोई तरीका है कि wc से गिनती प्राप्त की जाए , या तो सिग्नल को किसी तरह से ब्लॉक किया जाए, या wc के बजाय एक विकल्प का उपयोग किया जाए, जो कि एक परिणाम को तब संकेत देता है जब उसे एक टर्म सिग्नल मिलता है।
बेशक, वहाँ विकल्प हैं:
एक अस्थायी फ़ाइल पर लिखना:
timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x
इसके साथ समस्या यह है कि बहुत अधिक मेमोरी का उपयोग होता है, और कुछ प्रदर्शन जुर्माना भी हो सकता है।इसके बजाय ulimit का उपयोग करना:
ulimit -t 10; zcat foo.gz | wc -c
यह भी काम करता है, लेकिन केवल cpu समय को मापता है, इसलिए I / O के कारण मंदी (जैसे कि संपीड़न अधिक खराब है, और डिस्क से अधिक बाइट्स पढ़ने की आवश्यकता है) को मापा नहीं जाता है।छोटी परीक्षण फ़ाइलें बनाना:
ठीक है, यह निश्चित रूप से काम कर सकता है, और सबसे अच्छा समाधान हो सकता है। हालाँकि, यह बहुत अधिक अस्थायी फ़ाइलें बनाता है।