Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Portada » Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 6 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Lun Sep 06, 2010 4:30 am
Mensajes: 398

Nota Publicado: Mié Feb 15, 2012 7:46 am 
Arriba  
Ando realizando un script para cambiar el modo "governor" de frecuencia del CPU que ofrece la utilidad cpufreq

La cosa es simple, obtengo los números de nucleos que tengo y una vez obtenidos le aplico la utilidad esa.

Código:
IFS="$(printf '\n\t')"
CPUSET=$(which cpufreq-set)
CPUINFO=$(which cpufreq-info)
CURRENT=$("${CPUINFO}" | grep 'The governor' | awk '{print $3}' | tr -d '"' | tail -1)
CORES=$(cat /proc/cpuinfo | grep 'processor' | wc -l)
CORESN=$(seq -s ' ' 0 1 "$((${CORES:-5}-1))") # en esta linea acomodo los nucleos de tal forma que me queden "0 1 2 3 ..."

if [[ ${CURRENT} != $1 ]]; then
   for i in "${CORESN}";
      do
         sudo ${CPUSET} -c "${i}" -g "$1"; done
         echo "Governor mode has changed from'"${CURRENT}"' to '"${1}"'"
else
   echo ""${1}" mode currently loaded"
fi


El asunto es que solo me aplica los cambios para el primer nucleo, y los otros quedan en el modo anterior.

La cosa funciona con un simple:

Código:
for i in 0 1 2 3 4 5... ; do cpufreq-set -c $i -g ondemand|performance|etc; done


Pero me veo en la necesidad de automatizar ese proceso y obtener los números de nucleos porque el script lo estaré ejecutando en distintos sistemas con distintos nucleos, unos con distindo kernel compilados con distindos nucleos y etc.

¿Alguna recomendación para obtener los nucleos de otra manera?

Gracias por leer.

_________________
scrotwm@FreeBSD
pekwm@Sabayon
::vim::zsh::urxvtd|blog::dotfiles::last.fm


Última edición por ramonovski el Jue Feb 16, 2012 7:36 am, editado 1 vez en total
 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Jue Abr 12, 2007 7:00 am
Mensajes: 9186
Ubicación: tras la pantalla (...)

Nota Publicado: Mié Feb 15, 2012 3:56 pm 
Arriba  
hoy estoy un poco espesa, pero no me acabo de enterar. dejame hacerte un par de preguntas.....

el script grande es el que "cambia" el governor, y el chico, el que sirve para que efectivamente cambie TODOS los cores, verdad??

ramonovski escribió:
Pero me veo en la necesidad de automatizar ese proceso y obtener los números de nucleos porque el script lo estaré ejecutando en distintos sistemas con distintos nucleos, unos con distindo kernel compilados con distindos nucleos y etc.


como lo estas ejecutando ahora??

digo, mi idea es, si con el primero lo cambias para uno, y ocn el segundo efectivamente hace que se cambien todos, por que no, simplemente, los juntas?? :?

(aka, que yo me entere... ademas de los scripts, puedes poner lo que estas haciendo?)

la opcion b es que le eches un ojo a esto. escalado dinamico de frecuencias con conky. :wink:
http://man-linux.comli.com/?p=241 (dichoso p4clockmod :evil: )

_________________
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil WWW  

Desconectado
Forista Legendario
Forista Legendario
Avatar de Usuario

Registrado: Dom Oct 10, 2004 7:00 am
Mensajes: 1797

Nota Publicado: Mié Feb 15, 2012 6:10 pm 
Arriba  
Y si ya tomas la información de /proc, en lugar de simplemente contarlos con wc -l, puedes utilizar awk y un for:

Código:
cat /proc/cpuinfo |grep processor|awk '{print $3}'


¿Por qué no aplicas el for antes de eso? Es decir, que la salida (0,1,2, etc) sea la iteración utilizada para ejecutar lo que sea que ejecutes sobre cada núcleo.

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Lun Sep 06, 2010 4:30 am
Mensajes: 398

Nota Publicado: Jue Feb 16, 2012 5:56 am 
Arriba  
neurus escribió:
Y si ya tomas la información de /proc, en lugar de simplemente contarlos con wc -l, puedes utilizar awk y un for:


Fue algo que intenté, pero de esa manera sigue aplicando el cambio al primer nucleo solamene, asumí que había que darle el formato tipo "0 1 2 3 n". como en el ejemplo del simple for que puse en el primer post, por eso el asunto del wc y el seq para darle "formato".

Citar:
el script grande es el que "cambia" el governor, y el chico, el que sirve para que efectivamente cambie TODOS los cores, verdad??


Así es.

Citar:
como lo estas ejecutando ahora??


script.sh parametro posicional1, donde el parámetro uno puede ser uno de los distintos modos que tiene cpufreq: powersave, ondemand, conservative, performance.

Sobre lo de tu post (aprovechas siempre para meter spam eh! -broma-), lo que haces es definir frequencias en cantidades. Eso es algo que tal vez luego considere solo para el modo "on demand", pues por default este modo empieza a utilizarlo realmente hasta que uno de los nucleos alcanza cierto nivel de frecuencia.

Gracias por sus respuestas, dejaré un ratito más esto y si no, a stackoverflow.
Desde un inicio plantee ponerlo por allá pero habría que poner a trabajar a más de uno por aquí =P

_________________
scrotwm@FreeBSD
pekwm@Sabayon
::vim::zsh::urxvtd|blog::dotfiles::last.fm

 Perfil  

Desconectado
Forista Legendario
Forista Legendario
Avatar de Usuario

Registrado: Dom Oct 10, 2004 7:00 am
Mensajes: 1797

Nota Publicado: Jue Feb 16, 2012 6:21 am 
Arriba  
En ese caso, reemplaza los saltos por espacios:

cat /proc/cpuinfo |grep processor|awk '{print $3}'|tr '\n' ' '

Lo que dejaría (obviamente sin chequear):

for i in $(cat /proc/cpuinfo |grep processor|awk '{print $3}'|tr '\n' ' ') ; do cpufreq-set -c $i -g ondemand|performance|etc; done

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Lun Sep 06, 2010 4:30 am
Mensajes: 398

Nota Publicado: Jue Feb 16, 2012 7:35 am 
Arriba  
Vale, gracias.

Me he dado cuenta que el problema reside en el for, a la hora de evaluar la variable CORESN, de tal forma que:

Código:
$(cat /proc/cpuinfo |grep processor|awk '{print $3}' )


evaluado directamente en el ciclo for hace el trabajo para todo los nucleos, pero no lo hace con:

Código:
cat /proc/cpuinfo |grep processor|awk '{print $3}'|tr '\n' ' '


Ni con:

Código:
CORES=$(cat /proc/cpuinfo | grep 'processor' | wc -l)
$(seq -s ' ' 0 1 "$((${CORES:-5}-1))")



En fin, gracias neurus.

_________________
scrotwm@FreeBSD
pekwm@Sabayon
::vim::zsh::urxvtd|blog::dotfiles::last.fm

 Perfil  
Mostrar mensajes previos:  Ordenar por  
 [ 6 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


 Temas relacionados   Autor   Respuestas   Vistas   Último mensaje 
(SOLUCIONADO)Ayuda - Formato texto script bash zenity barra de progreso

en Programación

blackman

5

2212

Vie Abr 13, 2012 2:43 am

Snark1994 Ver último mensaje

Ayuda con script en Bash

en Programación

muse

4

1108

Sab Abr 18, 2015 7:34 pm

cargoan Ver último mensaje

AYuda con script en bash

en Programación

isma3l

5

1259

Sab May 19, 2012 11:19 am

niky45 Ver último mensaje

Ayuda Script en Bash

en Programación

kikelin

8

2121

Mar Ago 19, 2014 8:06 pm

blackman Ver último mensaje

Duda bash script (SOLUCIONADO)

en Programación

Bodegas

9

1907

Mar Abr 05, 2011 9:50 pm

hipersayan_x Ver último mensaje



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC + 1 hora [ DST ]
Traducción al español por Huan Manwë
phpBB SEO