Назад | Перейти на главную страницу

ограничить скорость записи файлов в NFS

CentOS 5.6

NFS смонтирована на сервере для резервного копирования дискового пространства. Когда задание резервного копирования началось, оно могло достигать 80 МБ / с, и мы действительно не ожидали, что это потребует такой большой пропускной способности. Поэтому мне нужно найти способ ограничить скорость записи в NFS.

Я попытался rsync с участием --bwlimit = 5000. Тем не менее, он ограничивал скорость чтения, но накопленные данные по-прежнему записывались со скоростью 80 МБ / с, а операции записи в течение нескольких секунд не выполнялись.

Есть ли способ ограничить скорость записи NFS?

NFS не предоставляет метода ограничения полосы пропускания, используемой клиентом.

Поведение, которое вы видите, когда данные накапливаются и затем записываются на полной скорости, - это то, что грязные страницы растут на клиенте, а затем сбрасываются на сервер NFS. Это ожидаемый способ работы ввода-вывода.

На клиенте Linux NFS вы можете использовать tc для согласования и контроля трафика. Это было бы так же просто, как создать класс с IP-адресом сервера NFS в качестве пункта назначения и ограничить этот класс.

Это описано в Linux Advanced Routing & Traffic Control HOWTO, особенно в главе 9 Дисциплины очередей для управления пропускной способностью и внутри man tc.

Вот пример точных команд для использования: http://iomem.com/archives/17-Rate-limiting-with-sch_htb.html

Извините за открытие такой старой темы, но я написал небольшой скрипт для ограничения передачи скорости с помощью pv команда, она также работает через NFS. Единственное, чего я еще не преодолел, это падение скорости, это происходит только когда я использую NFS поверх sshfs, все в порядке.

Конфигурация NFS моего сервера (экспорт):

rw,sync,no_subtree_check 

И конфигурация клиента (варианты монтирования):

rsize=8192,wsize=8192,timeo=14,intr,_netdev,noauto,hard,sync

Вот мой сценарий:

 #!/bin/bash

 # Simple Script to mv files OR folders at $3 BPS  

tor_path="$1"  
mv_dir="$2"  
speed="$3"  
tor_dir="$(basename "$tor_path")"  
file=""  
tlines=""  
cnt=""   
file=""  

[[ "$mv_dir" != *"/" ]] && mv_dir=""$mv_dir"/"  

if [[ -f "$tor_path" ]] && [[ -d "$mv_dir" ]]  
  then  
  pv -L "$speed" "$tor_path" > "$mv_dir""$tor_dir"  
elif [[ -d "$tor_path" ]] && [[ -d "$mv_dir" ]]  
  then  
    tor_files="$(mktemp --tmpdir tor_files.XXXXXX)"  
    [[ "$tor_path" != *"/" ]] && tor_path=""$tor_path"/"  

    find "$tor_path" -type d > "$tor_files"  
    sed 's#'"$tor_path"'#'"$tor_dir"'/#g; s###g' -i "$tor_files"  

    tlines="$(wc -l < "$tor_files")"   
    cnt=0  
    while [ "$cnt" -lt "$tlines" ]  
      do  
        let cnt++  
        file="$(head -n $cnt $tor_files | tail -1)"  
        mkdir "$mv_dir""$file"  
    done  

    find "$tor_path" -type f > "$tor_files"  
    sed 's#'"$tor_path"'#'"$tor_dir"'/#g' -i "$tor_files"  

    tlines="$(wc -l < "$tor_files")"  
    cnt=0  
    while [ "$cnt" -lt "$tlines" ]  
      do  
        let cnt++  
        file="$(head -n $cnt $tor_files | tail -1)"  
        pv -L "$speed" "$tor_path""$(basename "$file")" > "$mv_dir""$file"  
    done  

    rm "$tor_files"  
else  
    exit 1    
fi