Выполняется ли предварительная выборка сетевых файловых систем? (Или: Сделайте оптимизацию файловой системы Интернета, чтобы уменьшить количество обращений)

Возьмите следующий фрагмент кода:

 f = open("/mnt/remoteserver/bar/foo.bin", O_RDONNLY);
 while (true)
 {
       byteseread = read(f, buffer, 1000);
       if (bytesread > 0)
           ProcessBytes(buffer, bytesread);
       else
           break;
  }

В приведенном выше примере допустим удаленный файл foo. bin имеет размер 1 МБ и никогда ранее не использовался клиентом. Итак, это примерно 1000 вызовов «чтения» для получения всего файла.

Далее, предположим, что сервер с каталогом, смонтированным на клиенте, находится через Интернет, а не локально. Быстрая пропускная способность для клиента, но с большой задержкой.

Каждый ли вызов «чтения» вызывает обратный путь к серверу и обратно для запроса дополнительных данных? Или протокол клиент / сервер распознает, что последующие чтения удаленного файла часто являются последовательными, и поэтому последующие блоки выталкиваются вниз до того, как приложение фактически сделало для него вызов read (). Следовательно, последующие вызовы чтения возвращаются быстрее, потому что данные были предварительно извлечены и кэшированы.

Выполняют ли современные протоколы сетевой файловой системы (NFS, SMB / Samba, любые другие?) Подобные оптимизации. Существуют ли протоколы сетевой файловой системы, настроенные для Интернета, которые имеют подобную оптимизацию?

Я изучаю личный проект, который может включать реализацию сетевой файловой системы через Интернет. Меня поразило, что производительность может быть выше, если можно уменьшить количество циклов обработки для файлового ввода-вывода.

5
задан selbie 20 March 2011 в 02:25
поделиться