ФорумПрограммированиеPHP для идиотов → Тестирование файловой системы и include/require

Тестирование файловой системы и include/require

  • XCoder

    Сообщения: 1 Репутация: N Группа: Кто попало

    Spritz 29 октября 2011 г. 20:46

    Конфигурация оборудования (Notebook Asus A7C):

    cpu: Intel Core Duo T2350 @ 1866.7 Mhz
    ram: DDR2 2048 Mb, DRAM Frequency 266 Mhz, Dual Channel
    hdd: Hitachi HTS541612J9SA00 (120 Gb, 5400 rpm, SATA), [ sector 512 byte ]

    os: Win7 Ultimate
    fs: NTFS (cluster 4Kb)



    Суть тестирования:

    Cоздаем кучу папок, в них кучу файлов с кодом <?php echo 'File-N'; /* ##…## */ ?>, где вместо N - порядковый номер файла, а вместо … - комментарий заполняющий файл до нужного размера;

    Важно: HDD и ОС при работе с файловой системой имеют свои абстрактные уровни кэширования.
    Так в частности HDD кэширует куски данных у себя в локальном кэше, доступном лишь контроллеру HDD (в моем случае это 7 Мб), что прозрачно для тестирования уменьшает латентность доступа к данным, а ОС использует механизмы кэширования, задействуя RAM, следовательно, первый прогон более длителен, чем остальные (которые в 3-5 раз быстрее).

    Таким образом, для объективности тестирования (для невозможности кэширования), каждый новый тестовый прогон, полностью удаляет все существующие файлы и директории и создает их заново, исключая возможность попадания секторов с данными в кэши. Что в тестах выражается стабильным временем отработки эквивалентным первоначальному запуску.


    Исходный размер файла 51 байт (файл, в котором отсутствует довесок в виде коммента ##…##);

    Далее буду описывать конфигурацию (кол-во директорий, кол-во файлов в них, размер файла);



    Общее для группы измерений: Dir: 10; Files: 100; CPU Freq: 1866,7 Mhz (Bus: 133 Mhz)
    Итого: 1000 файлов

    [table]
    [tr][td]filesize (Kb)[/td][td]avg.time (sec)[/td][/tr]
    [tr][td]0,05[/td][td]0,52[/td][/tr]
    [tr][td]1[/td][td]0,54[/td][/tr]
    [tr][td]4[/td][td]0,55[/td][/tr]
    [tr][td]8[/td][td]0,59[/td][/tr]
    [tr][td]32[/td][td]0,78[/td][/tr]
    [/table]

    Время include и require в данном случае идентично, оно и понятно почему.



    Общее для группы измерений: Dir: 10; Files: 100; CPU Freq: 2309,5 Mhz (Overclocked: Bus: 165 Mhz)
    Итого: 1000 файлов

    [table]
    [tr][td]filesize (Kb)[/td][td]avg.time (sec)[/td][/tr]
    [tr][td]0,05[/td][td]0,41[/td][/tr]
    [tr][td]1[/td][td]0,42[/td][/tr]
    [tr][td]4[/td][td]0,44[/td][/tr]
    [tr][td]8[/td][td]0,466[/td][/tr]
    [tr][td]32[/td][td]0,62[/td][/tr]
    [/table]



    Промежуточный вывод: в зависимости от увеличения объема данных увеличивается время их чтения при постоянной линейной скорости (в рамках цилиндра на HDD), т.к. запись файлов и создание директорий производятся практически линейно на физическом уровне хранения данных на HDD.

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

    Также при росте частоты увеличивается производительность системных операций, обслуживающих I/O, поэтому в определенной пропорции росту частоты уменьшается время выполнения теста (точнее уменьшение времени связано с ускорением части процессорозависимых системных вызовов).




    Тест с произвольным размером файлов: от 512 байт до 32 Кб

    CPU Freq: 1866,7 Mhz

    [table]
    [tr][td]avg.filesize (Kb)[/td][td]time (sec)[/td][/tr]
    [tr][td]15,97[/td][td]0,663[/td][/tr]
    [tr][td]16,06[/td][td]0,949[/td][/tr]
    [tr][td]16,29[/td][td]0,646[/td][/tr]
    [tr][td]16,25[/td][td]0,734[/td][/tr]
    [tr][td]16,29[/td][td]0,654[/td][/tr]
    [/table]



    CPU Freq: 2309,5 Mhz

    [table]
    [tr][td]avg.filesize (Kb)[/td][td]time (sec)[/td][/tr]
    [tr][td]15,83[/td][td]0,516[/td][/tr]
    [tr][td]16,25[/td][td]0,848[/td][/tr]
    [tr][td]16,16[/td][td]0,539[/td][/tr]
    [tr][td]15,99[/td][td]0,522[/td][/tr]
    [tr][td]16,20[/td][td]0,800[/td][/tr]
    [/table]



    А теперь сгенерируем файлы случайного размера, затем сольем их в один единственный исполнительный файл:

    CPU Freq: 1866,7 Mhz

    [table]
    [tr][td]avg.filesize (Kb)[/td][td]time (sec)[/td][td]include once file (sec)[/td][td]all/once[/td][/tr]
    [tr][td]16,57[/td][td]0,735[/td][td]0,225[/td][td]3,26[/td][/tr]
    [tr][td]15,89[/td][td]0,645[/td][td]0,192[/td][td]3,36[/td][/tr]
    [tr][td]16,66[/td][td]0,654[/td][td]0,226[/td][td]2,89[/td][/tr]
    [/table]



    CPU Freq: 2309,5 Mhz

    [table]
    [tr][td]avg.filesize (Kb)[/td][td]time (sec)[/td][td]include once file (sec)[/td][td]all/once[/td][/tr]
    [tr][td]16,41[/td][td]0,521[/td][td]0,182[/td][td]2,86[/td][/tr]
    [tr][td]15,94[/td][td]0,526[/td][td]0,156[/td][td]3,37[/td][/tr]
    [tr][td]16,09[/td][td]0,528[/td][td]0,155[/td][td]3,40[/td][/tr]
    [/table]





    Всем приятного просмотра.
    Я, пожалуй, пойду тестировать Sandy Bridge (Core-i5 2300 @ 3.7 Ghz) и зависимость латентности от более современных HDD с NCQ и т.д. (500, 750, 1500 Gb / 5400rpm / 7200rpm).
    Спустя 269 сек.
    А, да, забыл:
    PHP Version 5.3.3 - MSVC6 (Visual C++ 6.0)
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 30 октября 2011 г. 9:31, спустя 12 часов 45 минут 16 секунд

    четко, заебись
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 30 октября 2011 г. 11:54, спустя 2 часа 22 минуты 57 секунд

    пацаны вообще ребята
    Сапожник без сапог
  • PandoraBox2007

    Сообщения: 21 Репутация: N Группа: Адекваты

    Spritz 17 декабря 2011 г. 6:27, спустя 47 дней 18 часов 32 минуты

    Винда сама по себе поднимает латентность багами :P

Пожалуйста, авторизуйтесь, чтобы написать комментарий!