2009-09-10 2 views
4

Я хочу, чтобы во время работы с файлами на медленной файловой системе (например, в сети, на CD/DVD-диске или на жестком диске) у моего приложения не зависел пользовательский интерфейс.Как проверить, правильно ли обрабатываются медленные/flaky файловые системы?

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

Я попытался использовать сетевые диски для тестирования, но кэширование OS делает тесты неповторяющиеся и ... слишком быстро :)

Есть ли что-то вроде преднамеренно замедлять MacFUSE файловую систему? Какой-нибудь другой метод, который позволил бы мне найти все икоты UI и условия гонки, вызванные неожиданными задержками?

ответ

2

Самый простой ответ - MacFUSE, как указано в другом месте; это довольно легко имитировать. Можно также попробовать монтирование доли по NFS, а затем использовать немного дросселирования его с помощью встроенного ipfw, как:

IPFW труба 1 конфиг 1KByte/s IPFW добавить 1 трубу 1 SRC-порт 2049

или если вы используете WebDAV

IPFW добавить 1 труба 1 Src-порт 80

Это будет капать кормить запросы через на любом уровне трубы вы определили. Вы должны быть в состоянии избавиться от него впоследствии снова с:

IPFW удалить 1

1

Возможно, покупка медленного флеш-накопителя? Я нашел некоторых в Best Buy, которые были ледниковыми. Подключите их через несколько концентраторов USB и, возможно, клавиатуру, чтобы они были на очень хорошем подключении.

-W

+0

У них может быть проблема с пропускной способностью, но даже худший флеш-накопитель будет иметь время доступа на порядок быстрее, чем дегенеративные случаи, которые меня интересуют. – Kornel

1

Запись файловой системы MacFUSE с их рамками какао мертв легко. На самом деле, я думаю, что есть даже примерная система, которая просто отражает локальную файловую систему. Почему бы не быстро адаптировать этот код так, чтобы он вызывал сон() на мгновение во время каждой операции?

+0

Думаю, я это сделаю. Я надеялся, что кто-то это сделал уже :) – Kornel

0

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

0

Как насчет дисковода гибких дисков? Должны быть внешние, которые вы можете просто подключить через usb или так ...

Смежные вопросы