Научная статья на тему 'Математическое моделирование производительности файловой системы NTFS при нагрузке типа "запись дисковых данных"'

Математическое моделирование производительности файловой системы NTFS при нагрузке типа "запись дисковых данных" Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
212
44
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Математическое моделирование производительности файловой системы NTFS при нагрузке типа "запись дисковых данных"»

УДК 519.6

Е. И. Нижник 1, А. Г. Тормасов 2

Московский физико-технический институт (государственный университет] пер. Институтский, 9, Долгопрудный, Московская обл., 141700, Россия

E-mail: 1 katy@mipt.ru, 2 tor@swsoft.com

математическое моделирование производительности файловой системы NTFS при нагрузке типа «запись дисковых данных»

введение

Файловая система - это неотъемлемая часть операционной среды, которая отвечает за работу с данными, хранящимися во внешней памяти [Карпов, Коньков, 2004]. Для конечного пользователя одной из наиболее важных характеристик файловой системы является производительность, поскольку от нее зависит скорость работы того или иного приложения, а также всей операционной среды. Согласно проведенным исследованиям [Нижник, Тормасов, 2006], оценку производительности файловых систем необходимо осуществлять с учетом нагрузок, создаваемых конкретными приложениями. Под термином «нагрузка» здесь следует понимать способ обращения к данным, который использует та или иная программа. К примеру, веб-серверы часто обращаются к произвольным файлам небольшого размера, в то время как серверы потокового видео последовательно считывают большие файлы. Быстродействие файловой системы в каждом случае будет определяться эффективностью ее внутренней реализации по отношению к нагрузке, создаваемой приложением. Помимо этого необходимо учитывать особенности работы дискового устройства, фрагментацию и прочие факторы, влияющие на скорость доступа к данным [Нижник, 2007б].

С точки зрения минимизации временных затрат и ресурсов наиболее востребована задача прогнозирования производительности файловой системы в определенных условиях. Целью исследования является разработка математической модели, позволяющей на основе некоторого универсального анализа делать предположение о производительности при любой нагрузке без непосредственного тестирования файловой системы. В данной статье речь пойдет о решении этой задачи на примере файловой системы NTFS при нагрузке записи дисковых данных.

Теоретический анализ

По причине многообразия приложений и создаваемых ими нагрузок модель оценки производительности целесообразно создавать в контексте низкоуровневых запросов к драйверу файловой системы. Удобно представлять нагрузку как некоторую последовательность запросов (открытия / закрытия файла, чтения / записи данных и др.). Величины, однозначно характеризующие эту последовательность, будем называть параметрами нагрузки х,, ..., xk, а время выполнения последовательности - характеристикой производительности T. Задача прогнозирования заключается в том, чтобы выделить параметры нагрузки, влияющие на производительность, и определить зависимость

T = T(х,...,Xk). (1)

Выбор параметров х,,...,хк основывается на теоретических представлениях о внутреннем устройстве файловой системы. К примеру, известно, что файловая система NTFS использует технологию кэширования для увеличения производительности [Руссинович, Соломон, 2005]. В Windows NT кэшируемые запросы на запись, поступающие в драйвер файловой системы

1818-7900. Вестник НГУ. Серия: Информационные технологии. 2007. Том 5, выпуск 2 © Е. И. Нижник, А. Г. Тормасов, 2007

(File System Driver, FSD) из пользовательских приложений, передаются диспетчеру системного кэша (Cache Manager, CM) (рис. 1, стадии 1-2). Затем диспетчер памяти (Memory Manager, MM) по требованию диспетчера кэша создает секцию в памяти, необходимую для записи данных на диск (рис. 1, стадии 3-4). После копирования диспетчером кэша данных из пользовательского буфера (User Buffer) в созданную секцию возможны два варианта:

1) секция помечается как модифицированная (dirty), происходит передача управления FSD, а затем пользовательскому приложению, и дальнейшая операция сброса данных на диск осуществляется системными потоками;

2) пользовательское приложение само выполняет операцию сброса данных на диск (flush).

В обоих случаях управление сначала передается диспетчеру памяти (рис. 1, стадия 5). Диспетчер памяти генерирует повторный, но уже некэшируемый запрос к FSD, обрабатываемый драйвером диска (Disk Driver), который записывает данные из памяти на дисковое устройство (рис. 1, стадии 6-7). В заключение управление передается обратно по цепочке драйверу файловой системы, диспетчеру памяти, диспетчеру кэша, снова драйверу файловой системы и, наконец, пользовательскому приложению или системному потоку (рис. 1, стадии 8-12).

user

kernel

Рис. 1. Обработка кэшируемого запроса записи драйвером NTFS

Кэширование позволяет системе хранить необходимую информацию «под рукой». Например, данные, записываемые на диск одним потоком, могут параллельно читаться другими потоками. А поскольку эти данные перед записью попадают в файловый кэш, и их чтение из кэша происходит во много раз быстрее, чем с диска [Таненбаум, 2004], общая производительность системы при таком сценарии повышается. Впрочем, некоторые приложения могут генерировать некэшируемые запросы записи. В этом случае диспетчер кэша и диспетчер памяти не участвуют в обработке запроса, и управление из драйвера файловой системы передается напрямую в драйвер диска.

Аналогичная схема функционирования файловой системы NTFS при чтении дисковых данных позволила ранее [Нижник, 2007] выразить зависимость (1) в виде линейного соотношения

t = bx + ЬХ + bX, (2)

где параметрами нагрузки являются: х[ - количество запросов к драйверу диска, хг2 - общий объем данных, прочитанных с диска, хг3 - общий объем данных, прочитанных из кэш-памяти, а характеристика производительности T есть общее время выполнения всей последовательности запросов чтения.

Для вычисления коэффициентов bi, i = 1,3 использовались стандартные статистические подходы, в частности метод множественной регрессии [Нижник, Тормасов, 2007]. Также было показано [Нижник, 2007б], что коэффициенты модели соответствуют параметрам аппа-

ратной конфигурации сервера. Например, математическое ожидание bl есть среднее время поиска по диску (average seek time), коэффициент обратно пропорционален скорости вращения диска (revolutions per minute), а b3 - величина, обратная так называемой эффективной скорости чтения данных из памяти, которая согласно результатам экспериментов не зависит от аппаратуры. Точные значения коэффициентов, полученных при моделировании с использованием дискового устройства SAMSUNG SV4002H, приведены в системе (3):

b = 9 ■ 10-3 c,

= 3 ■ 10-4 c/KB,. (3)

b = i ■ 10-6 c/KB.

Цель дальнейшего исследования заключается в определении параметров нагрузки , влияющих на производительность файловой системы NTFS при записи данных на диск, а также нахождении вида зависимости

T = T (х*), (4)

где T - время выполнения последовательности запросов записи.

результаты экспериментов

Для исследования нагрузки записи изначально использовался распространенный тестовый пакет Iozone. Данная программа позволяет выполнять последовательную (sequential) и произвольную (random) запись на диск, регулируя размер запросов, посылаемых файловой системе. При анализе журналов запросов выяснилось, что главный поток Iozone в основном пишет данные в файловый кэш, а несколько системных потоков параллельно осуществляют сброс кэшируемых данных на диск, т. е. происходит так называемая отложенная запись. Причем в случае последовательного доступа запись на диск происходит порциями по 64 КБ, независимо от задаваемого размера запросов (табл. 1).

Таблица 1

запись кэшируемых дисковых данных при размере запросов N кБ

Поток(и) Последовательная запись Произвольная запись

Главный В кэш по N КБ В кэш по N КБ

Системные На диск по 64 КБ На диск по 64 КБ

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

Предыдущее утверждение верно, только если приложение, создающее нагрузку на файловую систему, использует механизм отложенной записи. Если же при открытии файлов используется флаг FILE_FLAG_NO_BUFFERING, то системные потоки не участвуют в обработке данных, и можно создать «однопоточную» прогнозирующую модель по аналогии с моделью нагрузки чтения. Для реализации этой идеи было создано приложение, которое позволяет выполнять последовательную и произвольную запись некэшируемых данных на диск, регулируя размер запросов к файловой системе. В результате тестирования выяснилось, что при последовательной записи время выполнения последовательности запросов к диску, как и

при чтении, линейно зависит от параметров нагрузки (количество запросов) и х^ (общий

объем данных, записываемых на диск):

т: = ьх + <. (5)

Причем оценка коэффициента /2 совпадает с полученным ранее значением для нагрузки чтения данных:

/: = /2 = 3 • 10-4 с / КБ<, (6)

тогда как значение /: существенно уменьшилось по сравнению с /1 (табл. 2).

Таблица 2

результаты измерений (последовательная запись)

№ TW, с xf, КБ

1 6,27325 14 637 14 637

2 8,54726 11 948 23 896

3 28,39617 800 102400

4 42,55124 600 153600

5 47,24954 25 600 102400

6 70,26964 25 600 204 800

7 70,94376 2 000 256000

8 76,10865 8 192 262 144

9 80,59157 16 384 262 144

10 86,41673 4 800 307200

11 112,46861 800 409600

12 140,79773 2 000 512000

13 143,25552 512 524 288

14 287,15328 1 024 1 048580

Таблица 3

коэффициенты регрессии (последовательная запись)

i Коэффициент Дг Размерность Стандартное отклонение Уровень значимости, %

1 6 • 10-4 с 4 • 105 < 0,01

2 3 • 10-4 с/КБ 1 • 10-6 < 0,01

Как объяснить полученную оценку / f ? Ранее было показано [Нижник, 20076], что для нагрузки чтения коэффициент / зависит от степени фрагментации данных, а его математическое ожидание совпадает со средним временем поиска по диску (average seek time). Другими словами, / есть среднее время задержки, обусловленной работой механических компонентов диска во время обработки одного запроса чтения.

Поскольку запись данных не предполагает их поиска на диске, логично предположить, что в этом случае задержка при выполнении одного запроса минимальна. Например, это может быть время, необходимое для перемещения головки на ближайшую незанятую дорожку. Согласно техническим характеристикам диска SAMSUNG SV4002H, который использовался в экспериментах, время перемещения головки на соседнюю дорожку (track to track seek time) составляет 0,8 мс, что близко к полученной оценке /f = 0,6 мс. Таким образом, можно считать коэффициент физической характеристикой дискового устройства.

Рассмотрим теперь некэшируемые запросы произвольной записи данных. При обработке полученных измерений выяснилось, что линейная множественная регрессия в этом случае не дает требуемой точности. При сравнении эмпирического значения T и его оценки T оказалось, что T > lj, и это особенно ощутимо для больших размеров запросов. Выясним причину такого расхождения. Для этого исследуем зависимость среднего времени выполнения одного запроса к диску t от размера запроса 5.

-200 0 200 400 600 800 10001200

Рис. 2. Зависимость t(s) при последовательной записи некэшируемых данных

350

300

250

200

150

100

50

0-

t, ms

..............................s, КВ

200 0 200 400 600 800 10001200

Рис. 3. Зависимость t(s) при произвольной записи некэшируемых данных

t, ms

S, КВ

-10 0 10 20 30 40 50 60 70

Рис. 4. Зависимость Г (5) при произвольной записи некэшируемых данных (запросы малых размеров)

В предыдущих исследованиях [Нижник, 2007а] было показано, что для нагрузки чтения зависимость Г (5) линейна, и ее коэффициенты входят в итоговую формулу для Т:

Г = Ь + Ь25. (7)

Данная зависимость также линейна и для нагрузки записи при последовательном доступе (рис. 2), что подтверждается результатами регрессии (табл. 3). В случае же произвольного доступа коэффициенты линейного приближения ЬГ и ЬГ, полученные для нагрузки последовательной записи, справедливы лишь при больших размерах запросов (рис. 3), тогда как при малых размерах среднее время выполнения одного запроса примерно равно константе 7,6 мс (рис. 4). Таким образом, прогнозирующая модель для нагрузки записи некэшируемых данных описывается формулой (5) с коэффициентами, представленными в табл. 4.

Таблица 4

коэффициенты модели для нагрузки записи некэшируемых данных

Коэффициент Размерность Последовательная Произвольная запись

запись xWJxW < 32 КБ xW/xW > 32 КБ

bW с 6 • 10-4 7,6 • 10-3 6 • 10-4

bW с/КБ 3 • 10-4 0 3 • 10-4

Проверим, справедливы ли полученные коэффициенты для нагрузки, созданной тестовым пакетом ^опе, т. е. для отложенной записи кэшируемых данных. Общее время выполнения последовательности запросов Т в этом случае равно

г^Г _ г^Г + г^Г (8)

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Измерения показали, что время выполнения запросов к кэшу Т^, как и в случае нагрузки чтения, линейно зависит от объема записываемых данных х'Г:

ТГ _ РГхГ, (9)

причем коэффициент наклона прямой ЬГ _ Р3 _ 1 ' Ю_6 с / КБ. Таким образом, принимая во

внимание формулу (5), получим:

ТГ _ рГ[хГ + РЖ + №х№3 . (10)

На рис. 5 и 6 представлено эмпирическое время ТГ и его линейная оценка Т для нагру-

зок последовательной и произвольной записи кэшируемых данных. По оси абсцисс отложено количество запросов п в последовательности. Для каждого графика указан размер одного запроса в эксперименте (4, 8, 32, 64, 128 или 256 КБ). Видно, что оценка хорошо совпадает с практическим значением лишь при последовательном доступе и маленьких запросах (см. рис. 5). В остальных случаях ТГ < ТГ, и это особенно ощутимо для произвольной записи небольшими порциями данных (см. рис. 6).

Рис. 5. Время TW (темная линия) и его линейная оценка TW (светлая линия) для нагрузки последовательной записи в n запросов размером 4, 8, 32, 64, 128 и 256 КБ

Напомним, что экспериментальное значение T в каждой точке получено путем суммирования времен выполнения запросов от всех потоков, участвующих в записи, т. е. потока приложения и нескольких системных потоков. В свою очередь оценка 1 является результатом «однопоточной» модели. Поэтому расхождение между величинами T и T объясняется параллельностью выполнения потоков. На рис. 7 изображена схема записи кэшируемых данных на диск. Поток приложения (Main Thread) пишет данные в файловый кэш (Cache), параллельно с этим несколько системных потоков (System Threads) забирают данные из кэша и ставят запросы в некоторую очередь (Disk Queue). Данная очередь обрабатывается еще одним системным потоком (System Thread), который последовательно извлекает запросы из очереди и передает их дисковому устройству (Hard Disk Drive, HDD) [Солдатов, 2004].

100000 200000

100000 200000

Рис. 6. Время Т (темная линия) и его линейная оценка Т (светлая линия) для нагрузки произвольной записи в п запросов размером 4, 8, 32, 64, 128 и 256 КБ

Рис. 7. Запись кэшируемых данных на диск

Таким образом, каждый запрос, находясь в очереди, ждет окончания обработки предыдущих запросов, поэтому время его выполнения зависит от нагрузки на очередь или от «заполненности» этой очереди. Пусть Г - общее время выполнения запроса к диску, Гд - время нахождения запроса в очереди до того момента, как он будет обрабатываться системным потоком,

Гр - время обработки запроса дисковым устройством. Тогда

Г _ Г, + Гр. (11)

Обозначим через Ы, количество запросов, находящихся в очереди в момент поступления /-го запроса. Время нахождения в очереди этого запроса равно

<,,_ ! Гр,. (12)

, _ 1

где Гр, - время обработки,-го по порядку запроса в очереди. Согласно формуле (7),

Гр> _ Го + 5,

(13)

где Г0 _ , 1/у0 _ , 5, - размер ,-го запроса. Тогда

Л 1 N £.

Г,, _ !г0 + V! ! _ гЛ + Т, (14)

, _ 1 , _ 1

где - общий размер запросов в очереди в момент поступления /-го запроса. Ясно, что время

обработки /-го запроса

Г, _ гф + Гр1 _ Г0 (Л¥ + 1) + (3¥ + 5). (15)

Отсюда общее время выполнения последовательности из Л запросов записи на диск равно

тг _! _ 0 (Их+лтЛ)+^ (р„+5_ о,

N

где £ _ ! 5 - общий объем записываемых данных.

(16)

Измерение Л,. и Б. для каждого запроса представляется технически сложным. Поэтому

попробуем упростить полученную формулу (16). Предположим, что средний размер запросов

в очереди равен среднему размеру запросов во всей последовательности. Тогда

Л N

IX

1 + ^—

ТГ _ ГЛ

Л

+

£

_ ГЛ

1 +

Л

+

£

4 Р

Л,

1 +

л„

(17)

1 +

2 К.

Л

или

ТГ _ (1 + + £) _ (1 + Ля)(РГхГ + РГхГ),

(18)

где Л, - среднее количество запросов в очереди во время записи данных на диск, т. е. нагрузка или «заполненность» очереди.

Измерение Лтакже является весьма сложной технической задачей. Однако можно оценить эту величину, зная экспериментальное время ТТ и его оценку Т:

ггГ

-1 _ Тг -1.

ТГ

ТГ

Р'Тх’Г + РТх:

хГ 2 '*2

(19)

0.7-1

0.6-

0.5-

0.4-

0.3-

0.2-

0.1-

0.0-

Ла

Я, КВ

61

5-

4-

3-

2-

1-

0-

Лд

И-

т

\

я, КВ

0 50 100 150 200 250 300

50 100 150 200 250 300

0

0

0

Рис. 8. Зависимость нагрузки на очередь от размера запросов 5 при последовательной записи данных

Рис. 9. Зависимость нагрузки на очередь от размера запросов 5 при произвольной записи данных

Как уже упоминалось, при последовательном доступе сброс кэшируемых данных на диск выполняется по 64 КБ. Иначе говоря, при малых s интенсивность записи данных в кэш гораздо выше интенсивности сброса этих данных на диск, и нагрузка на очередь невелика. Например, при записи данных порциями по 4 КБ на один запрос к диску приходится 16 запросов к кэшу, т. е. данные накапливаются в памяти и время от времени сбрасываются на диск относительно большими порциями. С увеличением же s скорость генерирования дисковых запросов повышается, нагрузка на очередь постепенно растет и, в конце концов, достигает некоторого предельного значения. Отметим, что согласно полученным результатам экспериментов все запросы, размер которых превышает 64 КБ, при записи на диск разбиваются на несколько запросов по 64 КБ каждый. Значит, предельное значение N должно достигаться при s $ 64 КБ, что в целом подтверждается графически (рис. 8).

Аналогично, при произвольном доступе данные накапливаются в кэше и периодически сбрасываются на диск. Однако в этом случае размер запросов к диску совпадает с первоначальным размером запросов s (вплоть до 64 КБ). Поэтому при записи данных малыми порциями диск вынужден обрабатывать большое количество маленьких запросов (т. е. часто перемещать головки и передавать информацию), а это означает, что нагрузка на очередь высока. При увеличении s размер запросов к диску увеличивается, а нагрузка на очередь уменьшается, также стремясь к некоторому предельному значению (рис. 9). Видно, что предельные значения Nq для последовательного и произвольного доступа примерно совпадают. Отсюда можно сделать вывод, что при больших размерах запросов s производительность NTFS не зависит от способа доступа к данным (sequential или random).

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Итак, причиной расхождения между значением T и его оценкой TW является способ измерения этих величин. Представим, что t1 - начальное время выполнения первого запроса последовательности, а t 1 - конечное время его выполнения. Аналогично, t2 и t'2 - начальное и конечное время выполнения второго запроса. Если потоки выполняются параллельно, может оказаться, что t2 < t\ < t'2 (рис. 10). А поскольку при этом

12 - t1 < t 1 — t1 + t’2 + t2, (20)

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

H--------H

t, t:

t'

Рис. 10. Параллельное выполнение двух запросов

Значение TW, представленное на рис. 5 и 6, измеряется как сумма времен всех запросов в последовательности. Иными словами, оно может быть больше фактического времени выполнения этой последовательности. Кроме того, обработка всех дисковых запросов, в конечном счете, выполняется единственным системным потоком (см. рис. 7), поэтому «однопоточная» модель, представляемая линейной оценкой 1 , более точно описывает производительность файловой системы при записи данных на диск. К примеру, тест Iozone произвольной записи одного файла размером 1 ГБ запросами по 4 КБ с использованием кэширования выполнялся 28 мин. Сумма времен выполнения всех запросов TW для этого теста составляла порядка одного часа, тогда как линейная оценка 1 - 11 минут (см. рис. 6). Видно, что время T существенно

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

заключение

Таким образом, в результате исследования нагрузки типа «запись дисковых данных» была расширена полученная ранее прогнозирующая модель для файловой системы NTFS,

учитывающая только запросы чтения. Окончательную формулу для T (времени выполнения read / write запросов) можно представить в виде:

T = Г + Г = ! рх + ! bWxW. (21)

i = 1 i = 1

Было показано, что значения Р\ зависят от способа доступа к данным (см. табл. 4), и аналогично коэффициентам Р' являются характеристиками физических устройств. Причем PW = Р3, а bW = Р2 при запросах $ 32 КБ.

Также была детально изучена запись кэшируемых данных, главной особенностью которой является параллельное выполнение сброса данных на диск системными потоками. Не смотря на такую схему работы операционной среды, линейная «однопоточная» модель (21) является наилучшей оценкой производительности файловой системы, поскольку дисковая очередь в результате обслуживается одним потоком (см. рис. 7). Единственное ограничение при данном подходе заключается в необходимости преобразования параметров нагрузки перед использованием модели. К примеру, если известно, что приложение выполняет последовательную запись малыми порциями кэшируемых данных (< 64 КБ), необходимо учитывать, что количество запросов к диску при этом будет меньше количества запросов к кэшу, поскольку сброс данных на диск выполняется порциями по 64 КБ. По этой же причине параметр увеличится по сравнению с первоначальным количеством запросов при записи большими порциями данных (> 64 КБ), независимо от того, какой доступ использует приложение (последовательный или произвольный), а также кэшируются данные или нет.

Рассматривая вопрос о применимости полученной модели к произвольным типам нагрузок, необходимо сделать несколько замечаний. Прежде всего, поскольку нагрузка была определена как последовательность различных запросов, а «однопоточность» модели подтвердилась экспериментально, нет необходимости разделять нагрузки по типу операций. Это означает, что если в системе происходят одновременно чтение и запись, производительность NTFS будет подчиняться формуле (21), где нагрузка описывается параметрами x' (чтение) и xW (запись). Однако для выбора коэффициентов Р\ необходимо знать, какой доступ осуществлялся при записи: последовательный (sequential) или произвольный (random). Поэтому для приложений, генерирующих нагрузки смешанной записи, существует ограничение на использование модели. Кроме того, значение коэффициента р1 сильно зависит от фрагментации дисковых данных [Нижник, 2007б], которую практически невозможно параметризировать. Это означает, что оценивать время выполнения запросов чтения можно лишь с некоторой степенью точности, используя в качестве Р1 среднее время поиска по диску.

Обработка запросов чтения и записи составляет основу деятельности файловой системы. Однако помимо этого существуют так называемые операции с метаданными, которые также некоторым образом влияют на производительность. Поэтому дальнейшие исследования будут посвящены изучению таких запросов, как создание / удаление, открытие / закрытие, переименование файлов и др. Результирующая формула для T, учитывающая эти операции, позволит более точно оценивать производительность файловой системы NTFS при различных нагрузках. В целом описанная методика построения модели может не только применяться к другим файловым системам, но и использоваться для прогнозирования производительности любых вычислительных систем, например, в области параллельных вычислений.

список литературы

Карпов В. Е., Коньков К. А. Основы операционных систем. М.: Интернет-университет информационных технологий - ИНТУИТ.ру, 2004.

Нижник Е. И. Математическая модель нагрузки файловой системы NTFS при активном поиске дисковых данных // Моделирование процессов обработки информации. М.: Моск. физ.-техн. ин-т., 2007. С. 276-285.

Нижник Е. И. Роль нагрузки процессора и фрагментации диска в моделировании производительности файловой системы NTFS // Системы управления и информационные технологии, 2007. № 2.1 (28). С. 181-186.

Нижник Е. И., Тормасов А. Г. Обзор проблем тестирования производительности файловых систем // Проблемы вычислительной математики, математического моделирования и информатики. М.: МЗ Пресс, 2006. С. 89-113.

Нижник Е. И., Тормасов А. Г. Оценка производительности файловой системы NTFS как задача множественной регрессии // Объединенный научный журнал, 2007. № 11 (199). С. 57-62.

Руссинович М., Соломон Д. Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP и Windows 2000. М.: Изд.-торг. дом «Русская Редакция»; СПб.: Питер, 2005.

Солдатов В. П. Программирование драйверов Windows. М.: ООО «Бином-Пресс», 2004.

Таненбаум Э. Современные операционные системы. СПб.: Питер, 2004.

Материал поступил в редколлегию 17.08.2007

i Надоели баннеры? Вы всегда можете отключить рекламу.