जवाबों:
यह निश्चित रूप से कोई तुच्छ कार्य नहीं है जो कि उपयोगकर्ताओं को नहीं किया जा सकता है। सौभाग्य से, मैकेनिज्मcgroup
और इसके ब्लकिओ नियंत्रक का उपयोग करके लिनक्स पर करना संभव है ।
Cgroup सेट करना किसी तरह वितरण विशिष्ट है क्योंकि यह पहले से ही माउंट किया जा सकता है या कहीं इस्तेमाल किया जा सकता है। यहाँ सामान्य विचार है, हालाँकि (यह मानते हुए कि आपके पास उचित कर्नेल कॉन्फ़िगरेशन है):
mount -t tmpfs cgroup_root /sys/fs/cgroup
mkdir -p /sys/fs/cgroup/blkio
mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
अब आपके पास blkio
नियंत्रक सेट है, आप इसका उपयोग कर सकते हैं:
mkdir -p /sys/fs/cgroup/blkio/limit1M/
echo "X:Y 1048576" > /sys/fs/cgroup/blkio/limit1M/blkio.throttle.write_bps_device
अब आपके पास एक cgroup है limit1M
जो प्रमुख / मामूली संख्या X: Y से 1MB / s तक डिवाइस पर लिखने की गति को सीमित करता है । जैसा कि आप देख सकते हैं, यह सीमा प्रति डिवाइस है। अब आपको बस इतना करना है कि उस समूह के अंदर कुछ प्रक्रिया डालनी चाहिए और यह सीमित होनी चाहिए:
echo $PID > /sys/fs/cgroup/blkio/limit1M/tasks
मुझे नहीं पता कि यह अन्य ऑपरेटिंग सिस्टम पर किया जा सकता है या नहीं।
dd ... oflag=direct
करेगा : उम्मीद के मुताबिक काम करेंगे। cgroup v2 इसे संभाल सकता है अगर फाइलसिस्टम इसका समर्थन करता है। विवरण: I / O
ionice
जैसा util-linux
चाहता है वैसा ही कुछ करता है।
यह पूर्ण IO सीमाएँ निर्धारित नहीं करता है, यह IO प्राथमिकता और 'अच्छाता' सेट nice
करता है - एक प्रक्रिया 'CPU प्राथमिकता' के लिए समान है ।
आदमी पृष्ठ से:
आयनिस - सेट या प्रक्रिया I / O शेड्यूलिंग क्लास और प्राथमिकता प्राप्त करें विवरण यह प्रोग्राम सेट करता है या I / O शेड्यूलिंग क्लास प्राप्त करता है और a के लिए प्राथमिकता देता है कार्यक्रम। यदि कोई तर्क या जस्ट -p नहीं दिया जाता है, तो आयनिस क्वेरी करेगा वर्तमान I / O शेड्यूलिंग क्लास और उस प्रक्रिया के लिए प्राथमिकता। जब आदेश दिया जाता है, तो आयनिस दिए गए के साथ इस कमांड को चलाएगा तर्क। यदि कोई वर्ग निर्दिष्ट नहीं है, तो कमांड निष्पादित किया जाएगा "सर्वश्रेष्ठ-प्रयास" शेड्यूलिंग क्लास के साथ। डिफ़ॉल्ट प्राथमिकता स्तर 4 है।
CFQ
I / O शेड्यूलर के साथ काम करता है । कई आधुनिक प्रणालियों में deadline
डिफ़ॉल्ट रूप से एक सक्षम है।
systemd प्रक्रियाओं के cgroup- हेरफेर के लिए एक आवरण प्रदान करता है। सिस्टमड-रन (1) मैन पेज से:
निम्न कमांड अपडेटेड (8) टूल को आमंत्रित करता है, लेकिन इसके लिए ब्लॉक आईओ का वजन 10 तक कम करता है। ब्लॉकआईडाइट = संपत्ति के बारे में अधिक जानकारी के लिए systemd.resource-control (5) देखें।
systemd-run -p BlockIOWeight=10 updatedb
अग्रभूमि में प्रोग्राम चलाने के लिए --scope
विकल्प का उपयोग करने पर विचार करें systemd-run
।
फीच का जवाब एक बहुत अच्छा संकेत है, इसके लिए धन्यवाद, हालांकि यह वास्तव में समस्या को हल करने का कारण नहीं है क्योंकि प्रश्न को एक विशिष्ट बैंडविड्थ तक सीमित करना था।
मैं कुछ इस तरह का सुझाव दूंगा:
systemd-run -p "IOWriteBandwidthMax=/dev/sdX 1M" updatedb
या पदावनत संस्करण:
systemd-run -p "BlockIOWriteBandwidth=/dev/sdX 1M" updatedb
फिर भी यह प्रश्न के योग्य नहीं है क्योंकि इसका उपयोग पहले से चल रही प्रक्रिया के लिए नहीं किया जा सकता है, लेकिन शायद यह कुछ अन्य मामलों में सहायक है।
लिंक:
echo "X:Y 1073741824" > /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device
और आप X और Y प्राप्त करते हैं जैसे किls -l /dev/sda