233 | | === Wall time insuficiente === |
234 | | Tomamos un job sencillo de ejemplo escrito en un fichero llamado attachment:prueba.pbs. Este job lanza el script attachment:espera.bash el cual se espera los segundos dados por el primer argumento y escribe por pantalla el mensaje "Hola mundo". |
235 | | {{{ |
236 | | #!/bin/bash |
237 | | ### Job name |
238 | | #PBS -N prueba |
239 | | ### Max run time |
240 | | #PBS -l walltime=00:00:10 |
241 | | ### Queue name |
242 | | #PBS -q grid |
243 | | ### Number of nodes and processors per node |
244 | | #PBS -l nodes=1:ppn=1 |
245 | | |
246 | | cd ${PBS_O_WORKDIR} |
247 | | |
248 | | ./espera.bash 60 |
249 | | }}} |
250 | | |
251 | | Lanzando el job obtendríamos: |
252 | | {{{ |
253 | | [user@ui ~]$ qsub prueba.pbs |
254 | | 307065.ce01.macc.unican.es |
255 | | [user@ui ~]$ qstat | grep prueba |
256 | | 307065.encina prueba user 0 R grid |
257 | | [user@ui ~]$ qstat -n1 | grep prueba |
258 | | 307065.encina user grid prueba 23057 1 -- -- 48:00 R -- wn002 |
259 | | [user@ui ~]$ ls |
260 | | prueba.pbs |
261 | | }}} |
262 | | Pasados los 60 segundos... |
263 | | {{{ |
264 | | [user@ui ~]$ ls |
265 | | prueba.e307065 prueba.o307065 prueba.pbs |
266 | | }}} |
267 | | La ejecución del job ha generado dos ficheros de salida en los cuales se almacena información de la ejecución del job y de la propia aplicación (ficheros {{{prueba.[e/o]307065}}}). Al mirar el contenido de estos ficheros: |
268 | | {{{ |
269 | | [user@ui ~]$ cat prueba.o307065 |
270 | | [user@ui ~]$ cat prueba.e307065 |
271 | | =>> PBS: job killed: walltime 43 exceeded limit 10 |
272 | | }}} |
273 | | El tiempo dado al job ha diso insuficiente. |
274 | | |
275 | | === Memoria insuficiente === |
276 | | Para evitar generar problemas en los nodos por exceso de uso de memoria se tiene el flag 'mem'. A modo de ejemplo se tiene un programa de Fortran que ocupa en memoria 160 MB. Mandamos un job con 150MB de límite de memoria. |
277 | | {{{ |
278 | | #!/bin/bash |
279 | | ### Job name |
280 | | #PBS -N prueba |
281 | | ### Max memory |
282 | | #PBS -l mem=150mb |
283 | | ### Queue name |
284 | | #PBS -q grid |
285 | | ### Number of nodes and processors per node |
286 | | #PBS -l nodes=1:ppn=1 |
287 | | |
288 | | cd ${PBS_O_WORKDIR} |
289 | | |
290 | | ./Fortran.out |
291 | | }}} |
292 | | |
293 | | El job se lanza a la cola, y pasados unos segundos nos sale este mensaje en el fichero de salida 'prueba.e477378': |
294 | | {{{ |
295 | | [user@ui ~]$ cat prueba.e477378 |
296 | | #!comment |
297 | | =>> PBS: job killed: mem 162836480 exceeded limit 157286400 |
298 | | }}} |
299 | | |
300 | | === Ocupar toda la memoria de un nodo con un único job === |
301 | | Se pueden tener aplicaciones que requieran mucha memoria. Para evitar que el job se mande en un nodo donde tiene parte de la memoria ocupada, y/o para no entorpecer los otros jobs, es posbile quedarse con toda la memoria de un nodo. Para hacer esto nos tenemos que asegurar que no entre ningún otro job al nodo. Para hacer esto, mandaremos el job requiriendo todas las unidades de cálculo del nodo. Así, si queremos toda la memoria de los nodos de la cola {{{'dinamica'}}} (con 8 cpus), requeriríamos: |
302 | | {{{ |
303 | | #PBS -l nodes=1:ppn=8 |
304 | | }}} |
305 | | |