El pasado 2 de julio de 2019, en plena instalación de un recinto con dispositivos IoT, tuve la necesidad de conectarlos a una base de datos en la que me almacenaría Presión, Humedad y Temperatura de todos ellos (es un añadido que incorporo por mi cuenta en todos los montajes), y recordé que tengo una aplicación funcionando en unos cuantos dispositivos, que mide varios parámetros: temperatura y porcentaje de carga del microprocesador; y temperatura de todos los discos duros del equipo además del porcentaje ocupado en cada uno de ellos.
El nombre del artículo coincide con el nombre del programa, Temperaturizador, “palabro” que mezcla “Temperatura” y “Temporizador”, ya que es eso precisamente lo que hace.
No tenía mucha idea del alcance de cómo estaba aquel experimento, ya que tiene un avisador especial que, si algún equipo alcanza los 70 º C, me envía automáticamente un correo electrónico, y hace bastante tiempo que eso no sucede. Así pues, se me ocurrió preguntar en Twitter la siguiente cuestión:
¿A alguien le interesaría un estudio de la relación entre las temperaturas de las CPU y su carga de trabajo y los HDD y su espacio libre? Tengo monitorizados desde 2015 unos cuantos equipos con lecturas entre 9500 y 17000 registros, lo mismo hay algún resultado interesante
Como podéis ver en la imagen superior, no menciono ningún hastag ni a nadie en concreto, con lo que solo lo verán mis seguidores (y aquellos que se han aprendido mi ID de twitter de memoria, jaja, que no me siguen pero me leen). Curiosamente, la IA de Twitter se lo ha mostrado a muchísimas personas más, encontrándome unos resultados, cuanto menos, curiosos:
Así que, aunque la cantidad de datos es impresionante, creo interesante hacer un articulo preliminar sobre por qué existe este enorme Big Data sobre estos componentes.
He tenido peticiones de compartir los datos públicamente. No descarto hacerlo pero, hoy por hoy, no me es posible: vivo de lo que soy capaz de sacar de mi cabeza, un freelance, y aunque quiero cambiar las circunstancias, se resisten. De hecho, mi intención es publicar todo mi conocimiento (hay multitud de programas, desarrollos, cachivaches, inventos, conferencias, artículos, relatos cortos, novelas… Más de 35 años de pelearme con el mundo digital). No es raro encontrar por ahí mi CV.
La historia
Supongo que muchos ya me conocéis, normalmente en los artículos largos (bueno, y en los cortos, también) cuento alguna batallita sobre mí; en éste, no va a ser menos.
Corría el año 2015, y en aquella época andaba un poco preocupado por los equipos de mis clientes. Resulta que los PC y Workstations se “morían” sin venir a cuento, y lo hacían sin motivo aparente: unos a los 3 años, otros a los 7, otros a los 15… y algunos no fallaban nunca. Llevo en el negocio informático desde 1989, primero como programador, luego como apagafuegos, y ahora… como Ciber multidisciplinar.
Ahora bien, en aquellos tiempos pensé que si era capaz de detectar previamente cuando un equipos se iba a morir, podría anticiparme al cliente y recomendarle un cambio de equipo sin llegar a desgracias mayores, porque en la mayoría de las ocasiones, al irse al otro barrio, ni tienen copias de seguridad de la información contenida, ni de usuarios y claves de navegadores, aplicaciones, etc. Esto es la realidad de la calle: No se hacen copias de seguridad.
Me centré en dos aspectos:
- No hace falta ser ingeniero eléctrico (aunque yo lo sea) para conocer que a una mayor carga de trabajo de la CPU, la temperatura de la misma se puede disparar. Habría que tener en cuenta otros factores, como el tipo de refrigeración que tuviera el equipo, el lugar donde se ubicara, etc.
- Los discos duros, que es donde guardamos toda la información, es la parte más sensible de los equipos. Los sistemas operativos escriben los datos “donde les parece”, de ahí que se fragmenten la información en ellos a medida que se utilizan. Existió un falso mito en el que decía que los discos formateados en NTFS no hacía falta desfragmentarlos… Pero claro, eso depende del uso al que se destinen. Si la información está más dispersa, el cabezal y el motor deberá trabajar más tiempo, aumentando la temperatura interna; y esa dispersión puede estar correlacionada con el % de espacio físico empleado: cuanto menos espacio haya, más dispersión existirá de los datos. Y no, los usuarios no se preocupan por la informática, ni por desfragmentar el disco…
Los equipos eran Windows, con versiones de 7, 8 y 10, con lo que podía emplear cualquier tipo de lenguaje de programación, siempre que me proporcionara toda la información necesaria. Pensé en Python, pero me daba problemas a la hora de acceder bien a la CPU (en Linux se hace con la nariz, en Windows no), y tras bucear por la red, encontré una DLL hecha en C# que, con cierto tuneo (aunque me encanta la Informática Forense, no sé si me gusta más la Ingeniería Inversa) , me servía a la perfección. Al final el tema quedó como sigue:
- La app se ejecutaba al inicio del sistema operativo, tomando los valores de la CPU y los HDD. Esta lectura sería casi despreciable, porque en el arranque es cuando más se utilizan ambos elementos.
- Cada hora tras ese inicio, se ejecuta de nuevo la aplicación y vuelve a mirar los valores.
- Todas las lecturas se suben automáticamente a un servidor de Jenhyal (mi empresa), que añade la fecha y la hora de la misma
Una vez puesto a rodar, me percaté de una considerable mejora:
- En el lado del servidor, grabaría adicionalmente la dirección IP del equipo en cuestión. Eso me servía para algunos equipos, a los que accedo mediante un control remoto directo. En 2015 el servicio de no-ip se convirtió a uno de pago y no tenía forma de localizar esos servers. Así que si les controlaba la temperatura y tenía su dirección IP por si además debía localizarlo.
Así que comencé a instalarlo a todos los equipos a los que tenía acceso. Como el único que iba a manipular el programa era yo, se instalaba de forma local en el equipo y se le configuraba mediante un archivo de texto. Este archivo sería lo primero que leyera en cada ejecución y con él, tendría perfectamente el nombre del equipo. Además, la primera vez que se ejecutaba, realizaba un escaneo profundo de todo el hardware, enviándolo al servidor para aquellos casos –raros, a decir verdad– que no hubiese configurado y montado el equipo (con el tiempo se adquieren técnicas, y soy realmente exigente en cómo ha de quedar el sistema).
Los datos
En total se monitorizan 286 equipos, de los cuales un 10% son portátiles, y el resto han sido montados y configurados por mí, por lo que se tienen los datos físicos de cada uno de ellos. Algunos de los equipos pertenecen a clientes a los que ya no les trabajo, pero resultan interesantes porque en ellos ocurren sucesos que no pueden considerarse despreciables. La base de datos está compuesta por unos 300.000 registros, que aumentan cada día unos 1000. De todos esos equipos, hay algunos que ya han desaparecido, pero queda su histórico, lo cual no deja de ser interesante.
El programa mira todos los núcleos instalados en el equipo. No sé si sabéis que un microprocesador tiene varios núcleos: los i3 de Intel suelen tener 2; los i5, 2 ó 4 núcleos; los i7: 2,4,6,8 núcleos… En AMD ocurre lo mismo, todos tienen varios núcleos. Así pues, proporciona una serie de valores de temperatura para cada núcleo. Algunas placas base llevan un sensor integrado que también proporciona ese parámetro, por lo que se colocaría delante de los valores de los núcleos…
Vale más una imagen que mil palabras (no sé si se verá bien, demasiados datos… prometo hacerlo más bonito). Son los datos del pasado 17 de julio de 2019:
16/07/2019.11:26:29: Fecha y hora de la medición. Está un poco a lo bruto porque se trata de registrar valores.
16/07/2019.11:26:29: Fecha y hora del registro en el servidor. Os parecerá mentira, pero hay conexiones que varían y no son instantáneas.
Valores con C: Se refieren a las temperaturas de la CPU. En este caso, es un Intel i3, de 2 núcleos. El primer valor es un sensor que llevan las placas Asus, que indica la temperatura de la placa junto al procesador.
Valores con S: Carga de la CPU en el momento de la medición de esa temperatura.
Valores con T: Temperatura de los discos duros conectados en ese equipo.
Valores con L: Porcentaje ocupado de cada uno de esos discos.
Tratemos un poco los datos presentados de ese equipo. En el eje de abcisas (eje horizontal o las X) tenemos las horas del día; en el de ordenadas (ejer vertical o Y), Temperaturas (parte superior) y % de ocupación de la CPU (parte inferior):
Observando la gráfica, podemos sacar la conclusión que la temperatura del procesador es directamente proporcional a su % de carga de trabajo.
Ahora le toca el turno a las temperaturas de los discos duros (eje de abcisas las horas del día, eje de ordenadas ocupación del disco (parte superior) y en la inferior la temperatura de los discos – ojo que la ocupación de uno aparece por abajo, lo explico más adelante-):
Con los datos en bruto no se aprecia, pero la temperatura de los discos es casi constante.
He tomado este equipo porque lo conozco bien: es uno de mis servidores. A las 2:00 tiene programada la realización de la copia de seguridad diaria de todo lo que genero, CRM incluido, de ahí que haya un repunte en el empleo de la CPU y, justo al terminar y decae este parámetro, se observa un ligero aumento de temperatura del disco y un aumento de su porcentaje de ocupación (sí, lo sé, están casi llenos… Pero porque estoy haciendo otra medición que no viene al caso).
Es interesante conocer los datos físicos de este equipo:
- Placa base ASUS H81M-C
- Procesador Intel Core i3-4160 @ 3.60GHz
- HDD1: ST2000DM001-1CH164
- HDD2: KINGSTON SV300S37A240G
- HDD3: ST2000DL003-9VT166
- Memoria Kingston 8 Gb a 1600 Mhz en 1 sólo slot
Estoy plenamente convencido que os surgirán miles de preguntas pero, como con 300.000 registros en la base de datos y los 17.027 que tiene este servidor a día de publicación del presente artículo ya dará que hablar, finalizo este preliminar mientras sigo haciendo realizando el estudio.
Por supuesto, se aceptan todo tipo de sugerencias, os dejo mi Twitter si no lo tenéis ya:
@Kirzahk (https://twitter.com/Kirzahk)
Recordad hacer una valoración del artículo, un poco más abajo.
Otros artículos publicados:
Crónica de mi CISODay19: https://www.nocreasnada.com/cronica-de-mi-cisoday19/
El Espíritu de C1b3rwall: https://www.nocreasnada.com/el-espiritu-de-c1b3rwall/