Библиотека сайта 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) страниц адресного пространства процесса — возросло на порядок время записи.
| Предыдущий раздел: | Оглавление | Следующий раздел: |
| Параллельные процессы | Загрузка нового экземпляра (процесса) |
