Objetivo de Practica:
Vamos a empezar estudiar como el proceso es un parte fundamental para entender el funcionamiento del kernel. En este practica, vamos a compilar el kernel….
Otra conjunta de problemas que queremos ver tiene que ver con threads, como hemos visto en clase. Vamos a comprobar algunos problemas y ver como funcionan.
- Escribe un código para comparar el tiempo de ejecución para crear N procesos de fork y N threads. Plot su resultado como función de N.
- Comprobar como funciona el código de “mutexes” con threads. Intenta ejecutar este codigo sin los mutex locks. ¿Cuantos veces tiene un “race condition”. Puedes indicar como un % cuantos veces tienes un races?
- Compilar el kernel para que se puede compilar un kernel. Para ello tiene que instalar las utilidades de make y el libraría de “libncurses-dev”.
Parte 1
Cuando queremos aprovechar las ventajas de los nuevos procesadores de varios núcleos tenemos que recurrir a hacer fork’s del proceso o invocar threads
¿Cual es mejor?, usando el codigo para los fork process y para los c threads (recordar añadir la opción -lpthread en gcc al compilar este ultimo)
aqui la tabla de tiempos en mi equipo
FORK | FORK | FORK | Threads | Threads | Threads | |
real | user | sys | real | user | sys | |
50 | 0.016 | 0.002 | 0.007 | 0.004 | 0.001 | 0.002 |
300 | 0.074 | 0.005 | 0.049 | 0.014 | 0.001 | 0.005 |
500 | 0.129 | 0.019 | 0.107 | 0.019 | 0.004 | 0.008 |
1000 | 0.238 | 0.023 | 0.226 | 0.037 | 0.000 | 0.017 |
5000 | 1.152 | 0.161 | 0.266 | 0.176 | 0.003 | 0.058 |
10000 | 2.306 | 0.255 | 2.685 | 0.354 | 0.018 | 0.114 |
30000 | 7.116 | 0.685 | 7.108 | 1.032 | 0.055 | 0.481 |
50000 | 11.665 | 1.048 | 11.665 | 1.764 | 0.114 | 0.693 |
y como interpretar datos de una tabla no es muy rapido ni intuitivo podemos crearemos unos gráficos con gnuplot, guardamos la tabla en un archivo de texto, (Fork and Threads Stats) abrimos el gnuplot y escribimos
set xlabel “Number of Process”
set ylabel “Seconds to Create”
plot “stats.txt” using 1:2 w lines title ‘Fork Real’,”stats.txt” using 1:3 w lines title “Fork User”,”stats.txt” using 1:4 w lines title ‘Fork Sys’,”stats.txt” using 1:5 w lines title ‘Threads Real’,”stats.txt” using 1:6 w lines title ‘Threads User’,”stats.txt” using 1:7 w lines title ‘Threads Sys’
y aparece en nuestra pantalla el siguiente gráfico
puede dar lugar a confusión así que lo sacaremos solo con el tiempo real
en definitiva si quieres ganar rendimiento el uso de los threads es mas adecuado.
Parte 2
Tras ejecutar los threads sin mutex varias veces el contador solo llega a valores entre 110-130 lo que significa que el 50-60% de los threads entran en “race condicion”
Parte 3
Documentación detallada para compilar el nucleo (Gentoo Handbook)