jueves, 29 de junio de 2017

¿Cuál es la frecuencia máxima de turbo de mi procesador?

Los procesadores a día de hoy tienen una frecuencia base y una máxima según el número de núcleos activos.
En sistemas operativos con núcleo Linux (GNU/Linux y Android dos ejemplos principales) se puede consultar la frecuencia máxima mediante dos comandos:
  • cpufreq-info
  • cpupower frequency-info
El primero se obtiene instalando el paquete cpufrequtils en sistemas Debian. El segundo se obtiene instalando el paquete linux-tools-generic. Este paquete viene instalado por defecto en Ubuntu con escritorio Budgie.

Cpupower reemplaza a Cpufreq. Cpufreq-info a día de hoy se puede considerar anticuado. De hecho, con este comando no se puede comprobar la frecuencia turbo de un AMD Opteron 6276:

CPUFREQ

  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 63
  CPUs which need to have their frequency coordinated by software: 63
  maximum transition latency: 5.0 us.
  hardware limits: 1.40 GHz - 2.30 GHz
  available frequency steps: 2.30 GHz, 1.40 GHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, performance, schedutil
  current policy: frequency should be within 1.40 GHz and 2.30 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 1.40 GHz (asserted by call to hardware).
  cpufreq stats: 2.30 GHz:5,18%, 1.40 GHz:94,82%  (1)

CPUPOWER

  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 5.0 us
  hardware limits: 1.40 GHz - 2.30 GHz
  available frequency steps:  2.30 GHz, 1.40 GHz
  available cpufreq governors: conservative ondemand userspace powersave performance schedutil
  current policy: frequency should be within 1.40 GHz and 2.30 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency: 1.40 GHz (asserted by call to hardware)
  boost state support:
    Supported: yes
    Active: yes
    Boost States: 2
    Total States: 7
    Pstate-Pb0: 3200MHz (boost state)
    Pstate-Pb1: 2600MHz (boost state)
    Pstate-P0:  2300MHz
    Pstate-P1:  2300MHz
    Pstate-P2:  2300MHz
    Pstate-P3:  2300MHz
    Pstate-P4:  1400MHz


Los estados de TurboCore son el Pb0 y el Pb1. El Pb0 está disponible cuando 8 o menos núcleos están activos. El Pb1 está disponible incluso con todos los núcleos activos. Cpupower no nos lo indica.

Con un procesador Intel Core i7 2630QM, cpufreq sí que nos informa del rango de frecuencias correcto. Y cpupower añade la información según el número de núcleos activos:

CPUFREQ

  driver: intel_pstate
  CPUs which run at the same hardware frequency: 7
  CPUs which need to have their frequency coordinated by software: 7
  maximum transition latency: 0.97 ms.
  hardware limits: 800 MHz - 2.90 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 800 MHz and 2.90 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 822 MHz.

CPUPOWER

  driver: intel_pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 800 MHz - 2.90 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 800 MHz and 2.90 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency: 893 MHz (asserted by call to hardware)
  boost state support:
    Supported: yes
    Active: yes
    2600 MHz max turbo 4 active cores
    2600 MHz max turbo 3 active cores
    2800 MHz max turbo 2 active cores
    2900 MHz max turbo 1 active cores

Sin embargo con el Intel, cpufreq nos informa de la latencia de un cambio de frecuencia mientras que cpupower no. Aunque yo creo que es más útil saber las frecuencias máximas disponibles dependiendo del número de núcleos activos.
Como se puede observar, el driver es distinto. Del AMD Opteron se encarga el acpi-cpufreq mientras que del Intel Core i7 se encarga el driver intel_pstate. Lo cual explica las diferencias de los distintos perfiles disponibles (governors) o de porqué la latencia se puede consultar con el AMD pero con el Intel no.

Generar claves para login automático mediante SSH

Una de esas cosas habituales y que te puedes ahorrar es meter la contraseña al establecer una sesión SSH en un nodo remoto. Para ello necesitamos generar una clave asimétrica y guardar la parte pública en el nodo remoto. En el ordenador local indicamos en un archivo de configuración que el cliente SSH use la clave privada y podremos conectarnos al nodo remoto sin necesidad de poner contraseña.
Esto tiene un riesgo y es que si un atacante se hace con nuestra clave privada entonces también puede acceder al nodo remoto mientras éste último siga guardando la clave pública, que permite autorizar las conexiones entrantes firmadas por la clave privada. El atacante tiene que hacerse pasar por nuestro ordenador de acceso (nombre del host, usuario) y tendrá autorización por parte del nodo remoto.
La clave privada se puede proteger con contraseña, pero entonces perdemos la comodidad buscada.

Los pasos a seguir son dos:
  1. Generar claves.
  2. Introducir clave pública en la lista de claves autorizadas del nodo remoto.
  3. Configurar nuestro ordenador para que use dicha clave automáticamente.

Generar claves

Para generar claves usamos el comando ssh-keygen. Nos pedirá introducir la ruta al archivo que guarde la clave privada. Generará un archivo de mismo nombre pero con extensión .pub que contendrá la parte pública de la clave SSH.

[user@host:~] ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/remote_id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/remote_id_rsa.
Your public key has been saved in /home/user/.ssh/remote_id_rsa.pub.
The key fingerprint is:
SHA256:bbb5fce0153ea1c78c8baa09d04fda38a31767ad0a24ded763fbf4a95918e94e user@host
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|   simbolitos    |
|                 |
|                 |
|                 |
|                 |
+----[SHA512]-----+ 

El resumen (hash) SHA256 tampoco se corresponde con ninguna clave que tenga en uso ;-)

Autorizar clave privada en el nodo remoto

Para autorizar la clave privada en el nodo remoto, enviaremos nuestra clave pública:
[user@host:~] cat .ssh/remote_id_rsa.pub | ssh admin@remote.local 'cat >> .ssh/authorized_keys'
admin@remote.local's password:

Añadir la configuración para que SSH use la nueva clave

En el archivo .ssh/config añadimos lo siguiente:
#Remote.local
Host remote.local
    HostName remote.local
    User admin
    IdentityFile ~/.ssh/remote_id_rsa

Previamente en el archivo /etc/hosts introduje la línea con la dirección IP del nodo remoto y los nombres remote y remote.local asignados a dicha IP:
XXX.XXX.XXX.XXX remote.local remote
Con un servidor de DNS se podría tener algo más elaborado. Si no le tienes asignado un nombre a la dirección IP del nodo remoto, puedes usar la misma dirección IP en el campo HostName y también en el de Host.

Todo listo


[user@host:~] ssh admin@remote.local
Welcome to Ubuntu 17.04 (GNU/Linux 4.10.0-24-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

 * How HBO's Silicon Valley built "Not Hotdog" with mobile TensorFlow,
   Keras & React Native on Ubuntu
   - https://ubu.one/HBOubu

Pueden actualizarse 0 paquetes.
0 actualizaciones son de seguridad.


Last login: Thu Jun 29 17:01:28 2017 from 83.51.216.64
admin@remote:~$

Otras opciones de SSH se pueden consultar en la página de manual correspondiente.