Задача разрешения оптимального размера кластера

Условие: на винчестере размером раздела А секторов предполагается хранить В файлов. Считая все файлы оставляющими полкластера потерь, определить оптимальный размер кластера в Х секторов для задания команде форматирования FAT32.

Решение: Введём промежуточные величины, характерные для FAT32 и характеризующие системные потери:

Кластерные потери Т=В*Х/2 кластеров

Число секторов в FAT Е

Число секторов данных К=А-1-2*Е

Число кластеров данных У=К/16, поскольку в одном секторе FAT помещается информация об 512/32=16 кластерах данных

Тогда Е=К/(16*Х), и 16*Х*Е=А-1-2*Е, откуда Е=(А-1)/(16*Х+2)

Сумма Т и Е должна быть минимальна, то есть (Т(Х)+Е(Х))`=0

Пренебрегая 1 по сравнению с А и 2 по сравнению с В, получаем

Х -> (А/(8*В))1/2

Проверка: для раздела в 500М (220 секторов) и инсталлированной среднеофисной машины с 500 = 29 файлов (очень немного) Х=2((20-3-9)/2)=8, значит оптимален 4-Кб кластер, что мы и видим на практике (разделы любого размера более 500 М форматируются на 4К)

Экспериментальная часть

Для подтверждения статистической гипотезы о том, что файл в среднем "не доедает" половину кластера, был предпринят следующий эксперимент. На стандартный домашний компьютер были проинсталлированы нижеперечисленные программы. После чистки *.doc *.hlp *.chm *.txt *.me *.bbs *.nfo *.fts образ винчестера (раздел 200М, своп на соседнем логическом разделе) был снят при помощи команды dir /s /b /a:-d /o:gn с:\*.* >1.txt в текстовый файл 1.txt, который был благополучно импортирован MS Excel с фискированными ширинами данных.

Командами F1=ЕСЛИ(ЕЧИСЛО(C1);C1;"") (в С1 лежит либо размер файла, либо ненужное значение) и G1=ЕСЛИ(ЕЧИСЛО(C1);4096-ОСТАТ(F1;4096);"") (4096-предполагаемый оптимальный размер кластера) в столбцах F и G были просуммированы размеры файлов и кластерные потери. Расчитывалась зависимость величины кластерных потерь (выраженных в %) от емкости кластера, для чего вместо 4096 подставляли соответственно размеры от 32К до 512 байт. Полученная зависимость строго линейна (ошибка корреляции менее 0,1%), что подтверждает начальную гипотезу.

Проверить ее можно и более брутально, просто расчитывая среднюю величину кластерной потери на файл и сравнивая ее с размером кластера. Эксперимент подтверждает расходимость ряда от величины 50% при уменьшении размера кластера.


Приложение

Список инсталлированного ПО

 

Реальные данные

 

Кусок из файла 1.txt

 

WINCON   SFX        13 905  19.03.99   0:01
WINCONRU SFX        14 111  21.03.99   1:18
WINRAR   EXE       479 744  21.03.99   1:16
        10 файл(а,ов)           883 386 байт

 

Содержимое каталога C:\WINDOWS

 

5631_DIG INI        38 690  14.07.97  17:00
5631_HWC INI        38 120  14.07.97  17:00
5631_SWC INI       103 445  14.07.97  17:00
A3DSPLSH EXE       122 880  20.03.98   1:21
ASP4CPL  EXE       243 712  08.06.98  13:00
ASP4DOS  COM        37 151  31.03.98   2:29
ASP4SETP EXE       258 048  08.06.98  12:59
ASP4SETP TMP       258 048  08.06.98  12:59
ASP4TRAY EXE       202 240  08.06.98  13:00
ASPI2HLP SYS         1 105  12.11.96  12:12
CALC     EXE        59 392  12.11.96  12:12
CDPLAYER EXE        89 088  12.11.96  12:12

 

Кусок из файла 1.xls

RAREXTDLL73 72821.03.991:21737284096
UNRAREXE97 79221.03.991:1697792512
WINCONSFX13 90519.03.990:01139052479
WINCONRUSFX14 11121.03.991:18141112273
WINRAREXE479 74421.03.991:164797443584
10 файл(а,ов)883 386 байт
Содержимое каталога C:\WINDOWS
5631_DIGINI38 69014.07.9717:00386902270
5631_HWCINI38 12014.07.9717:00381202840
5631_SWCINI103 44514.07.9717:001034453051
A3DSPLSHEXE122 88020.03.981:211228804096
ASP4CPLEXE243 71208.06.9813:002437122048