Библиотека сайта rus-linux.net
Цилюрик О.И. Linux-инструменты для Windows-программистов | ||
Назад | Библиотеки API POSIX | Вперед |
Время клонирования
Интересно проследить скорость (измеряем в периодах частоты процессора) создания нового экземпляра процесса (позже сравнить её со скоростью создания потока):
p2-1.c : #include <stdlib.h> #include <stdio.h> #include <inttypes.h> #include <unistd.h> #include <sys/wait.h> #include "libdiag.h" static uint64_t tim; //#define data_size 1 // размер области данных в пространстве процесса: 1, 10, ... MB #define data_size 10 #define KB 1024 #define data_byte KB*KB*data_size static struct mbyte { #pragma pack( 1 ) uint8_t array[ data_byte ]; #pragma pack( 4 ) } data; int main( int argc, char *argv[] ) { tim = rdtsc(); pid_t pid = fork(); if( pid == -1 ) perror( "fork" ), exit( EXIT_FAILURE ); if( pid == 0 ) { tim = rdtsc() - tim; printf( "process create time : %llu\n", tim ); if( argc > 1 ) { long i; tim = rdtsc(); for( i = 0; i < data_byte; i += KB * 4 ) data.array[ i ] = 0; tim = rdtsc() - tim; printf( "process write time : %llu\n", tim ); } exit( EXIT_SUCCESS ); } if( pid > 0 ) { int status; wait( &status ); }; exit( EXIT_SUCCESS ); };
Выполнение программы (разброс значений будет очень значителен, из-за загрузки системы и из-за кеширования областей памяти, повторяем выполнение по несколько раз):
$ ./p2-1 process create time : 348140 $ ./p2-1 process create time : 326090 $ ./p2-1 process create time : 216020 $ ./p2-1 process create time : 327290
Позже мы увидим, что время создания клона процесса практически не отличается от времени создания нового потока в процессе.
А теперь выполнение той же программы, но с модификацией страниц памяти, когда значительная область данных процесса прописывается значением (только 1-й байт каждой 4KB страницы):
- размер области данных 1 MB:
$ ./p2-1 w process create time : 490670 process write time : 1877010 $ ./p2-1 w process create time : 320200 process write time : 3956830 $ ./p2-1 w process create time : 1558240 process write time : 2294780 $ ./p2-1 w process create time : 291210 process write time : 2468000
- время записи 250 байт потребовало времени на порядок больше, чем запуск процесса — это иллюстрация работа механизма COW (copy on write).
- размер области данных 10 MB (требуется перекомпиляция задачи):
$ ./p2-1 w process create time : 426220 process write time : 26742080 $ ./p2-1 w process create time : 166930 process write time : 18489920 $ ./p2-1 w process create time : 479890 process write time : 31890280
- возросло на порядок число переразмещаемых (посредством MMU) страниц адресного пространства процесса — возросло на порядок время записи.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Параллельные процессы | Загрузка нового экземпляра (процесса) |