Category: еда

Category was added automatically. Read all entries about "еда".

(no subject)

Упростил тестовую ситуацию проще уже некуда.
Программа: создаем файл, пишем в него 500 мб, закрываем файл, выходим.
Время выполнения программы - 0 секунд.
Время ухода системы в себя - ну, сколько там требуется чтобы пол гигабайта на диск записать.
Отключается полезный I/O с этим диском вообще.

Программу свою для flush-а диска написал, каждую секунду, т.к. пипец стоит такой, что .exe просто не запускается. Так она тоже не сильно помогает, т.к. ну теперь всё наше мгновенное IO попадает в один flush.

17:51:30 C.D.E!H.X.
17:51:32 C.D.E!H.X.
17:51:33 C.D.E!H.X. и....
17:53:21 C.D.E!H.X. бах!
17:53:24 C.D.E!H.X.
17:53:27 C.D.E!H.X.
17:53:30 C.D.E!H.X.
17:53:33 C.D.E!H.X.
17:53:34 C.D.E!H.X.
17:53:36 C.D.E!H.X.

С одной стороны, я понимаю, что это вроде как бы долгожданное нормальное кеширование записи, которого мы все так долго ждали.
С другой стороны, flow control какой-то к нему приделать - не?

Типичный сценарий: по сети в сервер пишут данные (бэкап). Он не успевает их записать, по любой причине. Копит в кеше до некоторого момента, может хоть 20 гигабайт накопить (!). Потом вдруг ему приходит идея сделать flush() даже без чьей-либо помощи (это логично - кто-то да запускает этот FlushFileBuffers на тома иногда), и в этот момент у всех сетевых контрагентов наступают торжественные тайм-ауты, ибо дождаться пока он 20 гб запишет - это даже я не с первого раза привык дожидаться. Кофе там попить, в душ сходить...

Но в общем ситуация ясна. Хотели как лучше, получилось как всегда. Буду дальше думать.