LINUX.ORG.RU
ФорумTalks

Линус Торвальдс выступил с критикой дизайна файловых систем


0

0

В виду последних событий, когда многие люди обнаружили пропадание и обнуление файлов в файловой системе ext4 после краха ОС, создатели ext4 высказались за идею включения в ядро новых системных вызовов, которые бы позволили безопасно работать с файлами.

Линус Торвальдс в списке рассылки ядра жестоко раскритиковал эти предложения и заявил, что большинство программистов никогда не будут этими новыми системными вызовами пользоваться, что они будут не стабильными и плохо оттестированными.

Цитата: "Поэтому вместо того, чтобы придумывать новые препятствия, которые никто не будет использовать, разработчики файловых систем должны нацеливаться на плохой "лишь бы работал" код, до тех пор пока не случилась самое большое несчастье. Потому что, хотите вы этого или нет, 99% программ именно так и написаны.

Неоспоримый ФАКТ того, что люди не проверяют ошибки, которые возвращает системный вызов close() (закрытие файла и сброс "грязных" данных из кэша на диск) должен означать, что, например, при отложенной записи на диск нужно обязательно проверять ситуацию переполнения диска. Если ваша файловая система возвращает результат ENOSPC при закрытии файла, вы просто теряете покрытие ошибкой состояния нехватки места для 90% приложений. Вот так всё просто.

Жаловаться на то, что это ошибка в приложении, это всё равно что жаловаться на скорость света: вы должны решать это проблему имея прямое отношение к реалиям мира, а не так, как вам кажется, эти реалии должны быть. Тоже самое относится к "люди должны писать во временный файл, вызывать метод fsync для него и переименовывать его вместо оригинала". Вы думаете, что так должно быть, но в реалии программисты пишут open(filename, O_TRUNC | O_CREAT, 0666). Жёсто <и не правильно>, я знаю. Но в конечном итоге, даже разработчики хорошо написанного приложения могут решать что fsync() не стоит тех потерей в производительности. В git, например, где мы пытаемся быть очень очень очень (sic!) аккуратными, fsync() по умолчанию выключен.

Почему? Потому что его включение вызывает неприемлемое поведение ext3. Сейчас, надо сказать, дизайн git'a означает, что потерянная новая база данных не является мёртвой, но потенциально это очень очень беспокоит и смущает - вам, возможно, придётся откатить назад и переделать некоторые операции вручную, и вы должны достаточно знать изначально, чтобы сделать это.

Так о чём я говорю? Иногда те разработчики файловых систем, которые говорят "вы должны использовать fsync(), чтобы получить предсказуемые результаты" - это те же люди, которые испортили всё это до такого безобразия, что fsync'ом абсолютно нереалистично пользоваться.

Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда."

http://www.opennet.ru/opennews/art.shtml?num=20944

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

birdie теперь там зажигает :)

Lumi ★★★★★ ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

Линус прав.

isden ★★★★★ ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

Промт теперь настолько крутой, или переводил школьник с двойками по русскому и английскому?

redgremlin ★★★★★ ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

> Промт теперь настолько крутой, или переводил школьник с двойками по русскому и английскому?

Не знаешь, чем birdie переводит?

Lumi ★★★★★ ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

Шеф, а что же нам теперь делать то?

GAMer ★★★★★ ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

Очень правильно говорит.

Буду давать эту ссылку всем начинающим (и не очень начинающим) программистам. Ибо это вечная проблема, когда говорят что-то вроде "мне пофигу что моя программа не работает в реальных условиях, ибо в теории, если все будут делать так и так, всё будет ок - и меня не волнует что в таком случае использование моей программы становится бессмысленным".

aix27249 ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

> Так о чём я говорю?

Да, Уолтер, о чем ты?

a3 ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

я бы убивал за fsync().

мне на новый винт каждые пол года денег жалко.

scaldov ★★ ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

Линус опять что-то критикует.. :) Хотя в этот раз осмысленно

stave ★★★★★ ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

Можите объяснить, почему несмотря на активое использование торрентов и многократного отключения в последнее время света у меня ничего не слетало?

linux4ever ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

Ну что теперь в ядре объявить поддержку ext4 как [new] [unstable]
и отключить по дефолту? =)

Lucky1 ★★★ ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

Линус прав ... я бы и из существующих системных вызовов половину выкинул.

P.S.: Никогда не пользовался ext3/4

robot12 ★★★★★ ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

> Неоспоримый ФАКТ того, что люди не проверяют ошибки, которые возвращает системный вызов close() (закрытие файла и сброс "грязных" данных из кэша на диск) должен означать, что, например, при отложенной записи на диск нужно обязательно проверять ситуацию переполнения диска. Если ваша файловая система возвращает результат ENOSPC при закрытии файла, вы просто теряете покрытие ошибкой состояния нехватки места для 90% приложений. Вот так всё просто.

А я ведь даже не задумывался об этом! Поставил себе на заметку...

Deleted ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

Думаю, что во всём виноваты производители железа. Пусть ставят в винты немного памяти (хотя она там и так есть) и батарейку, чтобы write-back кеширование винта переживало отключение питания. Тогда fsync() не будте так страшен.

mky ★★★★★ ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

Возник оффтопичный вопрос. А CloseHandle в венде имеет то же поведение, что и close/fclose? А то MSDN и гугль ничего внятного сказать не могут.

Deleted ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

Какое поведение? В мсдн сказано:

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Так что в той самой GetLastError может быть и нехватка места на диске и всё, что с этим связано и не только это.

RomanU ()

Re: Линус Торвальдс выступил с критикой дизайна файловых систем

> Так что в той самой GetLastError может быть и нехватка места на диске и всё, что с этим связано и не только это.

В man close и man fclose явно сказано, что они могут вызвать те же ошибки, что и fwrite/fsync, а в MSDN о подобном ни слова нет. А так то да, теоретически в GetLastError может быть что угодно.

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.