mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

255 lines
13 KiB

  1. Compilando ROCK Linux sobre un cluster
  2. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3. 1. Cosas bsicas
  4. ================
  5. Asumiremos que has leido el fichero BUILD y que sabes como realizar una
  6. compilacin 'normal' de ROCK Linux. Tambin asumiremos que sabes como usar un
  7. cluster en linux (si estas leyendo esto, tendrs uno). Ahora voi a explicar como
  8. compilar ROCK Linux sobre un cluster. Las tcnicas aqu descritas pueden tambin
  9. ser utilizadas para compilar ROCK Linux sobre una mquina SMP para obtener el
  10. mejor rendimiento de todas las CPUs.
  11. ROCK Linux puede ser compilado sobre un cluster simple de estaciones de trabajo
  12. conectadas por medio de una LAN normal (ethernet, etc). No es necessaria una
  13. baja latencia o un gran ancho de banda en la red para construir ROCK Linux en
  14. un cluster con buen rendimiento.
  15. ROCK Linux tiene su propio programador (scheduler) para distribuir trabajos
  16. sobre los nodos del cluster. Pero puedes usar cualquier programador de trabajos
  17. que tengas actualmente instalado en tu cluster para hacer realizar esta tarea.
  18. Cuando se compila ROCK Linux en modo paralelo (cluster), los scripts de
  19. compilacin deciden basandose en las dependencias entre paquetes, que paquetes
  20. debern de ser compilados en paralelo y lo hara en paralelo (en lugar de hacerlo
  21. en serie, que es el comportamiento por defecto).
  22. Para construir ROCK Linux tienes que ser siempre administrador. Esto no cambia
  23. cuando estas compilandolo sobre un cluster. La opcin 'Abort when a
  24. package-build fails' no esta disponible al realizar una compilacin en paralelo
  25. (cluster).
  26. 2. La ley de Amdahl
  27. ===================
  28. En un famoso escrito Amdahl observ que hay que considerar una aplicacin entera
  29. cuando se considera el nivel de paralelismo disponible. Si un nico 1% del
  30. paralelismo de un proceso falla, entonces no importa el paralelismo disponible
  31. para el resto, el problema nunca podr ser resuelto mucho ms rpido que unas 100
  32. veces de si se tratara de modo secuencial.
  33. Cada paquete en ROCK Linux depende de al menos unos pocos paquetes bsicos como
  34. la librera estndar de C, el compilador de C o la shell. As que no ser posible
  35. hacer uso de la potencia del cluster durante las primeras fases de la compilacin
  36. , durante las cuales se crearn esos paquetes bsicos. Ms tarde, durante la
  37. compilacin, habr siempre algunos paquetes que podrn ser compilados en
  38. paralelo (es comn que sean unos 100 paquetes, despus de que los bsicos hayan
  39. sido construidos).
  40. La herramienta './scripts/Create-ParaSim' puede ser usada para simular una
  41. compilacin en paralelo. Slo configura tu compilacin y entonces ejecuta
  42. './scripts/Create-ParaSim'. La salida es un grfico que muestra cuntos trabajos
  43. en paralelo hay disponibles para la compilacin y en que fase de la misma. Es
  44. algo como esto:
  45. ----+----------------------------------------------------------------------+
  46. 181 | ::::. |
  47. | .:::::::. |
  48. P | .:::::::::::::: |
  49. a | .::::::::::::::::. |
  50. r | :::::::::::::::::::::. |
  51. a | ..::::::::::::::::::::::::. |
  52. l | . .. ...:::::::::::::::::::::::::::: |
  53. l | ::::::::::::::::::::::::::::::::::::::::. |
  54. e | ::::::::::::::::::::::::::::::::::::::::::. |
  55. l | ::::::::::::::::::::::::::::::::::::::::::::. |
  56. | .:::::::::::::::::::::::::::::::::::::::::::::: |
  57. J | ::::::::::::::::::::::::::::::::::::::::::::::::. |
  58. o | ::::::::::::::::::::::::::::::::::::::::::::::::::. |
  59. b | ::::::::::::::::::::::::::::::::::::::::::::::::::::. |
  60. s | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::. |
  61. | :.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::. |
  62. 1 |...::..::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.|
  63. ----+----------------------------------------------------------------------+
  64. | 1 Number of Jobs build so far 424 |
  65. El grfico muestra en el eje vertical el nmero de trabajos ejecutndose en
  66. paralelo, y en su eje horizontal el nmero de paquetes construidos.
  67. Como se puede ver durante las primeras fases de la compilacin, no se logra un
  68. paralelismo muy ptimo, pero pronto alcanza un estado donde cerca de 100
  69. trabajos(compilaciones de paquetes) pueden ser realizados al mismo tiempo.
  70. Que disminuya el nmero de procesos ejecutados en paralelo en el lado derecho
  71. del grfico es normal. Por ejemplo, cuando se han compilado 400 de 424
  72. paquetes, slo quedan 24 paquetes por compilar, con lo que es imposible tener
  73. 100 trabajos ejecutndose en paralelo.
  74. Ten en cuenta que el eje de las X es el nmero de paquetes compilados, y no el
  75. tiempo. Por lo que el grfico muestra informacin acerca del nivel de
  76. paralelismo que es posible alcanzar con tu configuracin en general, pero no
  77. provee nmeros exactos de cuanto ms rpido sera por ejemplo en un cluster de
  78. 16 nodos.
  79. Puedes pasar la opcin '-jobs N' al script './scripts/Create-ParaSim' para
  80. obtener una simulacin de la compilacin en un cluster de N nodos. El script
  81. asume que los nodos del cluster son tan rpidos como el sistema que ha hecho
  82. la compilacin de referencia. Si los nodos de tu cluster son, por ejemplo, un
  83. 20% m�s r�pidos, la compilaci�n ser� completada un 20% m�s r�pido de lo que
  84. indica el status. Puedes incluso comparar compilaciones - por ejemplo "-jobs
  85. 1,2,8" comparar�a una compilaci�n en un nodo simple normal con una en un
  86. cluster de 2 nodos y una en uno de 8 nodos:
  87. -----+--------------------------------------------------------------------+
  88. 8 | : ::: |
  89. | :. ::::. |
  90. | ..:: ::::: |
  91. | ::::..:::::. |
  92. 1 |:::::::::::::::::: |
  93. -----+--------------------------------------------------------------------+
  94. 2 | :::::::::::::::::::::::::::::::: |
  95. | :::::::::::::::::::::::::::::::::: |
  96. |.::::::::::::::::::::::::::::::::::: |
  97. |:::::::::::::::::::::::::::::::::::: |
  98. 1 |:::::::::::::::::::::::::::::::::::: |
  99. -----+--------------------------------------------------------------------+
  100. 1 |::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
  101. |::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
  102. |::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
  103. |::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
  104. 1 |::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
  105. -----+--------------------------------------------------------------------+
  106. Jobs | 00:00 Time 14:41 |
  107. Si tienes instalado 'gnuplot' y activa $DISPLAY, puedes tambin pasar la
  108. opcin '-x11' a './scripts/Create-ParaSim', de esta forma usar el programa
  109. 'gnuplot' para mostrar los resultados. Una captura de pantalla del modo
  110. '-x11' de './scripts/Create-ParaSim' puede encontrarse en
  111. http://www.rocklinux.org/pics/screenshot_parasim.jpg.
  112. 3.Preparando el maestro
  113. =======================
  114. Estrae los fuentes de ROCK Linux en algn lugar y exporta ste directorio
  115. como lectura y escritura a todos los nodos usando NFS. En muchos casos
  116. habr listo un directorio en tu cluster que es compartido entre todos los
  117. nodos (por ejemplo /home). Asumir el directorio /home/rock-master en este
  118. documento.
  119. Configura tu compilacin de forma normal. Activa la opcin en la
  120. configuracin 'Make a parallel (cluster) build'. La opcin 'Maximun size
  121. of job queue' debera de tener un valor tan alto como el mximo nmero de
  122. trabajos que sern compilados en el cluster. Pon esta opcin a '0'
  123. (ilimitado) cuando compiles en un cluster grande.
  124. La opcin 'Command for adding jobs' ser explicada en la seccin 6
  125. (compilando con un programador de trabajos externo) y puede ser dejada en
  126. blanco si ests usando el programador de trabajos incluido.
  127. Tambin podra ser que quieras activar la opcin 'Always clean up src dirs
  128. (even on pjg fail)' para que los discos locales de los nodos de tu cluster no
  129. se llenen con los directorios de fuentes de los paquetes fallidos.
  130. Descarga los fuentes requeridos de forma normal (si no los tienes descargados
  131. an).
  132. 4.Preparando los nodos
  133. ======================
  134. Los pasos siguientes han de ser realizados en cada nodo. Si posees varios en
  135. tu cluster podras querer usar 'prsh' (http://www.cacr.caltech.edu/beowulf/)
  136. para realizarlos en todos los nodos.
  137. Necesitas crear un directorio local para la compilacin en cada nodo del
  138. cluster (compilar los paquetes a travs de un recurso NFS podra disminuir
  139. bastante el rendimiento). En algunos casos habr ya un directorio para esto
  140. (por ejemplo /scratch). Asumir que el directorio es /scratch/rock-node en
  141. este documento.
  142. Prepara el directorio /scratch/rock-node usando los comandos:
  143. # mkdir -p /scratch/rock-node
  144. # cd /home/rock-master
  145. # ./scripts/Create-Links -config -build /scratch/rock-node
  146. Ahora tu cluster est listo para compilar ROCK Linux.
  147. 5. Compilando con el programador de trabajos incluido
  148. =====================================================
  149. Ejecuta './scripts/Build-Target' en el directorio /home/rock-master del
  150. maestro. En lugar de compilar los paquetes, el maestro crear una cola de
  151. trabajos y aadir esos paquetes a la cola, que podr ser compilada despus.
  152. Ejecuta './scripts/Build-Job -daemon' en el directorio /scratch/rock-node de
  153. los nodos. Nuevamente, quizs quieras usar 'prsh' para hacerlo en todos los
  154. nodos. Si deseas compilar mltiples paquetes en paralelo en un nodo del
  155. cluster (por ejemplo por que tiene 2 CPUs), necesitas ejcutar
  156. './scripts/Build-Job -daemon' tantas veces como procesos quieras correr en
  157. el mismo nodo a la vez.
  158. "Build-Target", ejecutado en el maestro te mostrar que esta haciendo.
  159. Puedes ver el estado actual de tu compilacin en cada consola con la
  160. herramienta './scripts/Create-ParaStatus'. La salida del scripts es similar
  161. a esta:
  162. 18:41 2002-05-08: --- current status ---
  163. Build-Job (daemon mode) running on node01 with PID 18452
  164. Build-Job (daemon mode) running on node02 with PID 18665
  165. Build-Job (daemon mode) running on node03 with PID 19618
  166. Job 3-kdenetwork node02 (18665) since 18:32 2002-5-08
  167. Job 3-kdeutils node03 (19618) since 18:41 2002-5-08
  168. Job 3-kdevelop node01 (18452) since 18:30 2002-5-08
  169. Job 3-kdebindings waiting in the job queue (priority 2)
  170. Job 3-kdeadmin waiting in the job queue (priority 1)
  171. Job 3-kde-i18n-fr waiting in the job queue (priority 1)
  172. Job 3-kde-i18n-es waiting in the job queue (priority 1)
  173. Job 3-kde-i18n-de waiting in the job queue (priority 1)
  174. Job 3-kdeartwork waiting in the job queue (priority 0)
  175. Job 3-kdeaddons waiting in the job queue (priority 0)
  176. 18:41 2002-05-08: ----------------------
  177. "Build-Job -daemon", ejecutado en los nodos, se clona en segundo plano y slo
  178. imprime una linea de mensaje conteniendo el nombre del fichero del log que
  179. contiene la salida del script. Este log esta en el directorio build/, el cual
  180. es compartido entre todos los nodos por lo que puedes ver todos los logs desde
  181. el nodo maestro.
  182. 6. Compilando con un programador externo
  183. ========================================
  184. Digamos que el comando para aadir trabajos en tu programador de trabajos es
  185. 'addjob', y que slo tiene un parmetro, el comando a ejecutar. Deberas de
  186. activar la opcin de configuracin 'Command for adding jobs' al valor
  187. addjob 'cd /scratch/rock-node ; {}'
  188. Los carcteres {} sern automticamente reemplazados por la invocacin de
  189. Build-Job para el paquete en compilacin, y siempre tiene la forma:
  190. ./scripts/Build-Job -cfg <config-name> <stagelevel>-<package-name>
  191. As que si quieres aadir algo de inteligencia al programador de trabajos (por
  192. ejemplo compilar paquetes largos en un nodo ms rpido) puedes pasar {} a otro
  193. script, estando el nombre del comando en $*, el nombre de la configuracin en
  194. $3 y el nivel del stage y el nombre de paquete en $4.
  195. Si no pueden ser ejecutados todos los trabajos, el programador de trabajos
  196. debera de escoger los paquetes que hayan sido requeridos primero, esto es
  197. importante para asegurarse que siempre sea posible que mltiples paquetes
  198. puedan ser compilados en paralelos.
  199. Ten en cuenta que './scripts/Build-Job -daemon' no funciona si la opcin de
  200. configuracin 'Command for adding jobs' est activa. El script
  201. './scripts/Create-ParaStatus' funcinar de forma normal.