miércoles, diciembre 31, 2008

Fin de año 2008

Terminó el año marcado por la crisis económica cuyo origen ha sido la bestial expansión de crédito, la primera crisis de la cual hemos podido disponer de información casi en tiempo real gracias a Internet. En Internet, me ha llamado la atención la cantidad de intentos cada vez más claras por parte de los gobiernos de países democráticos de poner coto a la información que circula por Internet y sobre todo en España como la SGAE ha hecho valer su apoyo al actual gobierno y ha sido recompensada con ello.

Hemos seguido descubriendo rincones de España que merecen muchísimo la pena (Gredos, Picos de Europa), por encima de las estupideces de las diecisiete taifas autonómicas que tenemos que soportar.

Espero que este año 2009 sea mejor que el que ha pasado y que haya salud para todos. Me gustaría extenderme más, pero casi es hora de ponerme a cenar. Disfrutar de la noche en compañía de toda vuestra gente.

viernes, diciembre 26, 2008

Ficheros de registro de Snort Unified 2, segunda parte

Continúo con las notas sobre el uso de ficheros de registro Unified 2 con Snort. Para poder analizar los ficheros, lo más simple es configurar Snort para que genere los dos tipos de registro: Uno, las alertas, un fichero en texto plano que puede leerse fácilmente y que nos va a servir de referencia para analizar el formato binario Unified 2, que es el segundo tipo de registro que se va a generar.

La configuración de Snort que voy a usar es la siguiente:

  1. El programa se ejecutará con el uid y gid del usuario snort de la máquina. Es necesario saber los valores numéricos de ambos y se obtienen fácilmente con:
    ibookdrizzt:~ terron$ id snort
    uid=504(snort) gid=504(snort) groups=504(snort)
  2. El directorio donde quiero que se almacenen los logs es /Users/snort/log
  3. Quiero generar ficheros de alertas y registros unified2
  4. Quiero que se capture como mínimo la MTU de una ethernet (1500 bytes)
  5. El fichero de reglas de Snort lo voy a descomprimir en /Users/snort
Con las condiciones anteriores, lo primero es bajarse la última versión de las reglas de Snort desde SourceFire1 y descomprimirlas dentro del directorio /Users/snort:
ibookdrizzt:~ snort$ tar zxvf snortrules-snapshot-2.8.tar.gz
El comando anterior generará un árbol de directorio cuya raíz es /Users/snort donde descomprimirá todos los ficheros de reglas y configuración de Snort.

Ahora hay que editar el fichero snort.conf,cuyo path completo si se ha seguido la configuración anterior será /Users/snort/etc/snort.conf. Este fichero hay que modificarlo de acuerdo con las reglas que se deseen usar, los diferentes módulos de detección que tiene Snort, las variables que definen cuales son las redes a analizar y los módulos encargados de escribir las alertas. Como mi idea de momento es usarlo en una instalación de ossim, he decidido dejar todas las reglas activadas. Con la configuración que quiero implementar las líneas que hay que añadir al fichero snort.conf son las siguientes:

config logdir: /Users/snort/log/
output alert_fast: alert.log
output unified2: filename snort.log,limit 64
config set_gid: 504
config set_uid: 504
config snaplen: 1500
La explicación de las líneas anteriores es la siguiente:
  1. Establecer el directorio donde se almacenan los registros de Snort en /Users/snort/log. Es importante que esta línea aparezca antes de la configuración de cualquier módulo de salida de registros, porque sino, Snort tomará la configuración que tenga por defecto o el valor que se le pase en la línea de comandos a través del parámetro -l.
  2. Se activa el módulo de salida que genera alertas en formato de texto y estas se almacenarán en el fichero alert.log. La ruta completa de este fichero será /Users/snort/log/alert.log
  3. Se activa el módulo de salida Unified2. El nombre del fichero que generará está especificado por el parámetro filename y será snort.log.timestamp, donde timestamp es una marca de tiempos que generará Snort cuando crea el fichero. Se limita el tamaño máximo del fichero a 64MB. Snort automáticamente creará un fichero nuevo cuando se alcance el tamaño máximo.
  4. Se establece el uid y el gid con el que se ejecutará Snort, en este caso 504 que son el uid y el gid que corresponde al usuario snort.
  5. Configuro la longitud de la captura a la MTU2 de la interfaz. Como se trata de una ethernet o una wifi, la establezco a 1500 bytes.
Una vez establecida la configuración, basta con ejecutar Snort:
ibookdrizzt:/Users/snort root# snort -i en1 -c /Users/snort/etc/snort.conf

En este caso la interfaz que está conectado a Internet es la en13, que recibirá el tráfico y lo analizará, y generará las diferentes alarmas y capturará los paquetes que las causan. Si vemos el directorio de registro:

alert.log
snort.log.1230070130
snort.log.1230071033

Vemos el fichero alert.log que almacena las alarmas en modo texto y los otros dos ficheros son binarios en formato Unified 2. Estos últimos son los que quiero analizar.


1Hay que registrarse para poder bajarse las reglas de Snort con Sourcefire. De manera gratuita, se puede bajar uno las reglas que están actualizadas con un mes de retraso respecto a la versión de pago, que se actualizan diariamente.
2Maximum transfer unit: la cantidad máxima de datos que puede transportar la capa de enlace
3En este caso se está ejecutando en MacOS X y la interfaz que se está usando es el airport (en1). En este caso está configurado con una IP para que todo el tráfico entrante del router ADSL se dirija al mismo. En otro artículo comentaré como debería hacerse esta configuración con los puertos de SPAN de un switch o con un router ADSL.

Technorati Tags:

jueves, diciembre 25, 2008

miércoles, diciembre 24, 2008

Un par de citas de Ludwig Von Mises

"Every boom must one day come to an end" (1928)

"The crisis from which we are now suffering is also the outcome of a credit expansion" (1931)

Curiosas, en especial la última: "La crisis que estamos sufriendo es una consecuencia de la expansión de crédito". Los analistas económicos y estudiosos de la materia tendrán que pensar si realmente el crédito puede estar creciendo hasta el infinito con los diferentes mecanismos financieros sin estar respaldado por el correspondiente crédito.

Techno rati Tags: ,

domingo, diciembre 21, 2008

Ficheros de registro de Snort Unified 2, primera parte

Hace algún tiempo estuve implicado con ossim añadiendo soporte para poder leer los ficheros de registro unified que genera Snort en los agentes para mandar la información al server de correlación. Ahora me gustaría modificar lo que hice para que sea capaz también de leer ficheros unified2, el nuevo formato que han implementado los autores de Snort para almacenar tanto alarmas como los flujos de datos de los paquetes que lo causan. Lo primero que he tenido que hacer es documentarme el formato, puesto que sólo hay información en el código fuente.

El nuevo formato no tiene cabeceras que identifiquen el fichero (como si ocurre en el formato unified), y que cada fichero no es más que un conjunto de eventos y los paquetes de datos asociados a lo mismos. Todos los DWORD (unit32_t) y WORD (uint16_t) son enteros de 4 y 2 bytes respectivamente big endian ("network byte order"). La estructura de un evento almacenado en el fichero es la siguiente:

  1. Una cabecera de dos palabras de 32 bits. El primer DWORD indica el tipo de registro y el segundo la longitud total del evento almacenado.
  2. Una estructura que dependerá del valor de campo tipo, y en su caso, de los datos del paquete. Tal como se recoge en la siguiente tabla:

#defineValorEstructura
UNIFIED2_PACKET2Unified2Packet
UNIFIED2_IDS_EVENT7Unified2Event
UNIFIED2_IDS_EVENT_IPV672Unified2Event6
UNIFIED2_IDS_EVENT_MPLS99Unified2Event_MPLS
UNIFIED2_IDS_EVENT_IPV6_MPLS100Unified2Event6_MPLS

En caso de estar grabando un paquete de datos (representado por la structura Unified2Packet),tras esta va los datos del paquete.

Estructuras C

Las estructuras C que representan los eventos están a continuación. Todos los campos tienen los bytes en network byte order (big endian). Las estructuras que representan eventos especial tienen varios campos comunes que se repiten en las estructuras que están en la siguiente tabla:

CampoTipoDescripción
sensor_idDWORDIdentifica el sensor que ha generado el evento.
event_idDWORDIdentificador del evento.
event_secondDWORDPara almacenar una marca temporal de la generación del evento.
event_microsecondDWORD
signature_idDWORDIdentifica a la regla de Snort que ha generado ele vento.
generador_idDWORDIdentifica el módulo de Snort que generado el eventos.
signature_revisionDWORDRevisión de la regla
classification_idDWORDIdentifica la clase a la que pertenece la alerta generada. Esto se configura en Snort a través de la sentencia config classification
priority_idDWORDIdentifica la prioridad de la regla que ha generado la alerta.

El resto de los campos de cada estructura son específicos de cada uno de los eventos.

Unified2RecordHeader
Esta estructura de datos está presente al principio de todos los eventos que se almacenan en el fichero. Su longitud es de 8 bytes.
typedef struct _Unified2RecordHeader
{
    uint32_t type;
    uint32_t length;
} Unified2RecordHeader;
Unified2Event
typedef struct _Unified2Event
{
    uint32_t sensor_id;
    uint32_t event_id;
    uint32_t event_second;
    uint32_t event_microsecond;
    uint32_t signature_id;
    uint32_t generator_id;
    uint32_t signature_revision;
    uint32_t classification_id;
    uint32_t priority_id;
    uint32_t ip_source;
    uint32_t ip_destination;
    uint16_t sport_itype;
    uint16_t dport_icode;
    uint8_t protocol;
    uint8_t packet_action;
} Unified2Event
Unified2Packet
Esta estructura de datos tiene una particularida:Los últimos 4 bytes, representados po el campo packet_data se sobreescriben con los primeros del paquete de datos.
typedef struct _Unified2Packet
{
    uint32_t sensor_id;
    uint32_t event_id;
    uint32_t event_second;
    uint32_t packet_second;
    uint32_t packet_microsecond;
    uint32_t linktype;
    uint32_t packet_length;
    uint8_t packet_data[4];
} Unified2Packet
Unified2Event6
typedef struct _Unified2Event6
{
    uint32_t sensor_id;
    uint32_t event_id;
    uint32_t event_second;
    uint32_t event_microsecond;
    uint32_t signature_id;
    uint32_t generator_id;
    uint32_t signature_revision;
    uint32_t classification_id;
    uint32_t priority_id;
    struct in6_addr ip_source;
    struct in6_addr ip_destination;
    uint16_t sport_itype;
    uint16_t dport_icode;
    uint8_t protocol;
    uint8_t packet_action;
} Unified2Event6
Unified2Event6
typedef struct _Unified2Event6
{
    uint32_t sensor_id;
    uint32_t event_id;
    uint32_t event_second;
    uint32_t event_microsecond;
    uint32_t signature_id;
    uint32_t generator_id;
    uint32_t signature_revision;
    uint32_t classification_id;
    uint32_t priority_id;
    struct in6_addr ip_source;
    struct in6_addr ip_destination;
    uint16_t sport_itype;
    uint16_t dport_icode;
    uint8_t protocol;
    uint8_t packet_action;
} Unified2Event6
Unified2Event_MPLS
typedef struct _Unified2Event_MPLS {     uint32_t sensor_id;
    uint32_t event_id;
    uint32_t event_second;
    uint32_t event_microsecond;
    uint32_t signature_id;
    uint32_t generator_id;
    uint32_t signature_revision;
    uint32_t classification_id;
    uint32_t priority_id;
    uint32_t ip_source;
    uint32_t ip_destination;
    uint16_t sport_itype;
    uint16_t dport_icode;
    uint8_t protocol;
    uint8_t packet_action;
    uint32_t mpls_label;
} Unified2Event_MPLS;
Unified2Event6_MPLS
typedef struct _Unified2Event6_MPLS
{
    uint32_t sensor_id;
    uint32_t event_id;
    uint32_t event_second;
    uint32_t event_microsecond;
    uint32_t signature_id;
    uint32_t generator_id;
    uint32_t signature_revision;
    uint32_t classification_id;
    uint32_t priority_id;
    struct in6_addr ip_source;
    struct in6_addr ip_destination;
    uint16_t sport_itype;
    uint16_t dport_icode;
    uint8_t protocol;
    uint8_t packet_action;
    uint32_t mpls_label;
} Unified2Event6_MPLS

Referencias

  1. Snort
  2. Understanding Snort's Unified2 output

Technorati Tags:

jueves, diciembre 18, 2008

Notas sobre NAT en MacOS X (I)

Esta tarde he tenido que usar el NAT en MacOS X, y me he entretenido redactando algunas notas de como funciona. La pila TCP/IP y las utilidades de red que utiliza MacOS X derivan directamente de FreeBSD. El sistema de firewall es ipfw, y viene incluido y activado por defecto en MacOS X. El comando para controlar el firewall es ipfw. A diferencia de Linux, el proceso de NAT de los paquetes no se realiza en el kernel del sistema, sino en un proceso aparte denominado natd. A este proceso llegan los paquetes que se seleccionen a través de las reglas de ipfw y del mecanismo divert.

Activando la conexión a Internet compartida

La manera más sencilla de activar el NAT en MacOS X es usar la conexión compartida. Se ejecuta las preferencias del sistema, elegimos la opción de Compartir y se despliega el siguiente cuadro de diálogo:

compartir internet

En este cuadro de diálogo seleccionamos la interfaz que consideramos pública (en este caso será el Airport) y las interfaces de red que se van a compartir, cosa que se hace en el cuadro de diálogo de abajo. Una vez que se ha activado, pulsamos iniciar y se comienza a compartir las interfaces de red.

Veamos los cambios de configuración que ha realizado la GUI. En primer lugar, las reglas de firewall. Para ello desde una ventana de Terminal, ejecutamos la orden ipfw show.

00010  26221  16201955 divert 8668 ip from any to any via en1 02000 264607  23464758 allow ip from any to any via lo* 02010      0         0 deny ip from 127.0.0.0/8 to any in 02020      0         0 deny ip from any to 127.0.0.0/8 in 02030      0         0 deny ip from 224.0.0.0/3 to any in 02040      0         0 deny tcp from any to 224.0.0.0/3 in 02050 209103  38244907 allow tcp from any to any out 02060 333894 376385236 allow tcp from any to any established 02065      0         0 allow tcp from any to any frag 12190      3       192 deny tcp from any to any 65535   7662    912661 allow ip from any to any
Aparte, se habrá ejecutado un proceso, natd que será el encargado de traducir las direcciones. Podemos verlo ejecutando el comando:
ibookdrizzt:~ terron$ ps aux|grep natd root       372   0.0  0.0    27332    580  ??  Ss   12:14AM   0:00.43 /usr/sbin/natd -alias_address 192.168.1.33 -interface en1 ibookdrizzt:~ terron$ 

Lo que hace la primera regla del firewall, es dirigir todos los paquetes que lleguen a la interfaz en1 - el Airport - hacia el proceso natd, que será el encargado de traducir las direcciones, cambiando la origen con la que tenga la interfaz en1. Como puede verse el NAT se realiza en el momento de salida de los paquetes, tras decidir por cual interfaz va a salir.

Configurando el NAT de manera manual

La situación en la que quería usar el NAT es la que está representada en el siguiente esquema:

Tenemos un PowerMac G5 conectado a una red wireless cuyo punto de acceso es un router WIFI que me conecta a Internet. La red que se forma es una 192.168.1.0/24 y el Mac tiene asignado la dirección IP 192.168.1.100 (interfaz en1) . A la interfaz ethernet del Mac se crea una red ethernet con dirección IP asignada 192.168.2.1 (interfaz en0). Lo que quiero es que el Mac me haga NAT de las IP de la red 192.168.2.x y me las traduzca a una dirección IP en la red 192.168.1.x, a ser posible la misma que tiene asignada la interfaz wireless. Una implementación de un masquerading clásico.

El NAT se realiza en MacOS X justo antes de que el paquete abandone la interfaz de red. En el esquema anterior, los paquetes salen hacía Internet a través de la interfaz en1. Por tanto, se deberá configurar natd para que intercete los paquetes antes de salir y modifique la dirección origen del paquete y llegado el caso, el puerto origen. Hay que indicarle al kernel que pase los paquetes que coinciden. En nuestro caso, cualquier paquete que tenga dirección origen 192.168.2.0/24 hacia cualquier dirección. Usaremos ipfw para que el kernel nos pase los paquetes a través del mecanismo divert:

ipfw -f flush
ipfw add divert natd all from 192.168.2.0/24 to any via en1
Ojo, en caso de que ya existan reglas en el firewall, comentar que ipfw -f flush borraría todas las existentes. En este caso habría que ver donde insertarlas. Se puede consultar las reglas que ya están instaladas ejecutando la orden ipfw show.

Ahora habrá que ejecutar natd, el programa que se va a encargar de traducir las direcciones. La dirección IP a la cual se va a traducir recibe el nombre de alias. Este programa cuando se ejecuta, automáticamente pasa a background, con lo cual si se quiere depurar el tráfico de paquetes, se debe ejecutar con la opción -v. Puesto que queremos que se le traduzca todo lo que nos mande la regla de divert configurada anteriormente, teóricamente debería valer con:

/usr/sbin/natd -v -interface en1
Sin embargo, veremos que esto no funciona. ¿Por qué?. Porque aunque nos traduzca correctamente la dirección origen de cualquier paquete que salga con la dirección en el rango 192,.168.2.0/24, los que recibe el firewall no sabe que debe enviarlos de nuevo al proceso natd. Esto ocurre por la particular implementación que usa MacOS X y que deriva de FreeBSD, frente a la implementación de Linux toda realizada en el núcleo, y que tiene la correspondiente tabla de estados que permita saber que paquetes están nateados o qué paquetes tienen como origen la propia máquina que hace NAT.

La solución para mi situación es muy sencilla,puesto que tengo dos redes privadas que controlo y puedo usar direcciones en ellas sin problemas: Lo que hago es añadir una IP alias a la interfaz en1 que va a ser la que usen los paquetes nateados. Una regla de nuevo en el ipfw que haga que todo lo que llegue hasta esa IP sea dirigido hacia el natd y ya está. La configuración sería de la siguiente manera:

ifconfig en1 192.168.1.101 alias ipfw -f flush
ipfw add divert natd all from 192.168.2.0/24 to any via en1
ipfw add divert natd all from any to 192.168.1.101 via en1
natd -a 192.168.1.101

Problemas

La implementación de NAT que utiliza MacOS X no es lo que se puede decir muy eficiente. La necesidad de mover los paquetes desde el kernel a programas de modo usuario y posteriormente volverlos a pasar al kernel para su transmisión hace que sea más lento que implementaciones completas en kernel como la de Linux y su NetFilter.

El soporte de inspección de protocolos es muy limitado, sólo tiene soporte para FTP e IRC, estando el resto de protocolos que mandan información de direcciones dentro de los mismos no soportados - los famosos módulos de masquerading de Linux -.

Referencias

I have translate to english the post: Some notes about using de MacOS X NAT (Network address traslation), first part

Technorati Tags: , ,

miércoles, diciembre 17, 2008

La crisis económica, modelos y efecto multiplicador de la informática

John Stokes, habitual de Ars Technica, se despacha en Axioms, downturns, and a global (computer?) crash con la relación entre la actual crisis económica, los modelos que han usado los bancos para medir el riesgo de los agentes a los cuales concedían créditos y el factor de multiplicación que supone un mundo tan interconectado como el de hoy.

Hay dos visiones distintas: La primera es aquella de los que defienden que los modelos son correctos, pero que los datos con los que se han alimentado son erróneos (por ejemplo In Modeling Risk, the Human Factor Was Left Out, en el New York Times. La segunda visión, After the Crash: How Software Models Doomed the Markets, afirma que los modelos están pensados para unas condiciones de contorno concretas, y que cuando estas se alteran, ya no son válidos. En este caso ciertas suposiciones que se hacen para establecer los modelos económicos no serían válidos:

The software models in question estimate the level of financial risk of a portfolio for a set period at a certain confidence level. As Benoit Mandelbrot, the fractal pioneer who is a longtime critic of mainstream financial theory, wrote in Scientific American in 1999, established modeling techniques presume falsely that radically large market shifts are unlikely and that all price changes are statistically independent; today’s fluctuations have nothing to do with tomorrow’s—and one bank’s portfolio is unrelated to the next’s.
Esta nota hace referencia a uno de los mayores estudiosos de sistemas caóticos como es Benoit Mandelbrot. Reconozco que me gusta esta idea y entronca con mi visión más liberal de la economía donde agentes privados interaccionan entre sí y no se puede planificar las decisiones que toman.

Ahora, ¿qué pasa cuando se modela un sistema pensando que se cumplen esas restriciones siempre y se alimenta con datos para obtener un resultado determinado?. Pues que el resultado es indefinido puesto que nos hemos saltado las condiciones de contorno para las cuales el modelo fue creado. Sumémoles a esto la capacidad de proceso y velocidad de las redes de comunicaciones actuales y tendremos un sistema que utiliza un modelo para tomar decisiones económicas que está básicamente en un estado desconocido y que dado su interconexión está multiplicando la "basura" generada por un modelo que está actuando fuera de las condiciones de contorno para el que fue concebido. Lo que en informática se llama GIGO, Garbage In, Garbage out, que viene a resumir que un ordenador hace exactamente lo que tú le propones, y que si le metes basura como entrada, los datos que resulten de su proceso serán basura (primera visión) o si el modelo no funciona (segunda visión) seguiremos obteniendo información falsa.

Una de las cosas más interesantes de esta crisis es que está siendo casi televisada, en el sentido que la información fluye por el mundo casi en el mismo momento que se produce, llegando algunos, como Klaus Zimmermann presidente del instituto de estudios económicos DIW, a pedir que se dejen de hacer prediciones y no se publiquen (la referencia al final de esta noticia). Algún día alguien estudiará el efecto multiplicativo que ha tenido la información (o la falta de la misma) en esta crisis económica.

Technorati Tags: ,,

martes, diciembre 16, 2008

Google publica un libro sobre seguridad de navegadores We

(vía Securityfocus. Michal Zalewski, que ahora trabaja para Google, acaba de publicar un libro sobre la seguridad de los navegadores web más usados. Está dividido en tres partes:

La primera parte describe los navegadores webs, los estándares y protocolos sobre los que se contruyen y cómo están soportados en cada uno de los diferentes productos existentes.

La segunda parte muestra un resumen de los diferentes mecanismos que implementan los navegadores para proporcionar un entorno segurod de navegación, así como los defectos que se han detectado en los diseños.

La Tercera parte hace referencia a mecanismos de seguridad experimentales y mecanismos que se man tienen por compatibilidad.

Technorati Tags: ,,

lunes, diciembre 15, 2008

Google Native Client: Detalles de la implementación

Google se ha embarcado en un proyecto que permita ejecutar código nativo en un navegador web de manera segura. Esta idea no es nueva, Microsoft fue una de las primeras compañías que intentaron este camino a través de la tecnologia ActiveX. Sin embargo el mecanismo de seguridad basado en firmas y zonas de ejecución, no ha sido suficiente para evitar que haya sido uno de los vectores de ataques más usados contra sistemas que ejecutan Windows.

Los objetivos de Google es permitir un entorno de ejecución de módulos binarios x86 - aunque podrían portarlo a otras arquitecturas de microprocesador - que permitan aprovechar la potencia disponible en los microprocesadores actuales, que sea portable entre diferentes sistemas operativos y que sea seguro. Para poder interactuar con el resto del navegador existe un puente que comunica javascript con los módulos binarios.

Google crea un entorno aislado ("sandbox") donde se va a ejecutar los diferentes módulos, cada uno de los cuales está en un espacio de direcciones separados y que se comunican entre ellos a través de un mecanismo de procedimientos de llamada remoto (RPC). Se aísla el código que se ejecuta en el sandbox del sistema operativo, ofreciendo sólo una serie de servicios autorizados a llamar desde los ejecutables generados.

De la documentación que llevo leída, en especial de Native Client: A Sandbox for Portable, Untrusted x86 Native Code, la idea que me hago de la arquitectura que quiere implementar Google es la siguiente:

Arquitectura

Destacar en este caso el mecanismo de comunicación, denominado IMC e implementado en éste módulo de intercomunicación.

Para tener un entorno seguro se realiza un análisis estático del código que se ha generado: se busca detectar aquellas instrucciones peligrosas para el sistema y se fuerza a que el módulo ejecutable tenga una determinada estructura para evitar código automodificable e instrucciones superpuestas. Además utiliza los mecanismos de segmentación presente en la arquitectura x86 para evitar referencias a memoria fuera de los límites del proceso, y aislar el módulo binario de las librerias que el propio sistema mapea en memoria. La implementación de estos mecanismos de protección es lo que Google llama inner sandbox.

Native Client impone las siguientes restricciones a un módulo binario para que pueda ejecutarse en el entorno:

  1. El módulo binario una vez cargado en memoria es sólo de lectura.
  2. El módulo binario se linka empezando en la dirección de memoria cero y a partir de los 64kbytes empieza el código máquina generado por las herramientas.
  3. Las llamadas de control indirectas utilizan una secuencia especial de instrucciones.
  4. El binario ocupa páginas de memoria completa, rellenándose hasta el límite de las páginas, apareciendo al menos una instrucciones hlt.
  5. No puede contener instrucciones que sobrepasen 32 bytes de memoria.
  6. Todas las direcciones de las instrucciones válidas son alcanzables a través de un desemsablado que empieza en la dirección de carga.
  7. Todas los saltos directos tienen como destino instrucciones válidas e identificadas durante el análisis estático de código.
El análisis estático del código generado se implementa en la libreria native client verifier (ncv). Es el encargado de asegurarse que no existen instrucciones de carga o escritura de datos fuera de la memoria asignada, que el binario puede desemsablarse de manera exacta, no debe de existir direcciones inseguras y debe de existir integridad en el flujo del binario. La seguridad de esta parte del código es crítica, (y algún bug han descubierto ya)

El módulo tiene una particular disposición en memoria que permite atrapar aquellas referencias a punteros nulos (protege la primera página de la memoria asignada contra lectura y escritura). Los siguientes 60 Kb se utilizan para el código de los servicios de ejecución y el resto del espacio de direcciones se dedica al módulo.Todos los módulos binarios tienen como base la dirección cero y el código comienza a insertarse a partir de los 64 kbytes:

Mapa de memoria

Es interesante ver en acción uno de los mecanismos que tienen los procesadores x86 desde que existe el modo protegido: El uso de la segmentación para limitar el rango de memoria que puede accederse.Acostumbrados a modelos de memoria planos y de 4 GB, Google implementa con ayuda de la segmentación el modelo de memoria (ver nacl_ldt.c para el caso de Linux). Este mecanismo, no se puede usar en procesadores ejecutando código de 64 bits. La estructura que tendría una vez cargado el módulo en memoria sería la siguiente:

Las llamadas al sistema que se realizan desde el módulo binario se compara contra una lista blanca de llamadas permitidas. Esta validación formaría otra capa de protección que Google llam outer sandbox, donde se implementaría los servicios de ejecución. Están en service runtime.

Aparte el entorno de ejecución define un API que da acceso a los servicios que puede necesitar el módulo binario: gestión de memoria, gestión de hilos o primitivas de sincronización.

Referencias

  1. Google Native Client: Aplicaciones x86 en el navegador
  2. Native Client
  3. Native Client: A Sandbox for Portable, Untrusted x86 Native Code
  4. Safer than ActiveX: a look at Google's Native Client plugin
  5. Native Client:README
  6. Native Client: A Technology for Running Native Code on the Web

Technorati Tags: ,,

domingo, diciembre 14, 2008

El Tiemblo y alrededores

A pesar del mal tiempo, hemos aprovechado este sábado para irnos a comer a El Tiemblo, un pequeño pueblo de la provincia de Ávila, lindando casi con Madrid. Saliendo de Madrid por la M-501, hasta San Martín de Valdeiglesias. Una vez allí, salimos del pueblo para tomar la N-403 con dirección a Ávila. A los pocos kilómetros del pueblo, tomamos un cruce a la izquierda, donde un kilómetro más adelante están los los Toros de Guisando. Son esculturas de origen vetón, datadas entre el siglo II y I antes de Cristo y que representan a ganado bobino. Aquí se firmó el Tratado de los Toros de Guisando donde Enrique IV de Castilla proclamaba a su hermana Isabel I de Castilla como Princesa de Asturias y heredera del trono.

A pesar del tiempo de perros que hacía, pudimos sacar algunas fotos del grupo escultórico:

Toros de Guisando

Volvemos a la N-401 y entramos en el pueblo del Tiemblo. Justo en la rotonda de entrada - donde están unas estatuas que representan a los toros de guisando -, seguimos a la señalización que nos lleva hasta hacía el Castañar del Tiemblo. Al comienzo la carretera está asfaltada, aunque es estrecha, llegamos hasta una zona habilitada como parking. De aquí parte una pista de tierra, por la cual se puede circular con un coche sin problemas, que sube hasta un merendero. De éste merendero parte una senda de montaña que lleva hasta el pozo de nieve, una construcción donde se almacenaba nieve en invierno para posteriormente venderla en verano.

El bosque, con las sendas que parten hacía el pozo de nieve

La ventisca hacía aconsejable darse la vuelta, y bajar de nuevo. Llegado al cruce de la zona de aparcamiento del Castañar nos empezó a caer aguanieve, y decidimos continuar ya hacía el Tiemblo, para comer. Nos fuimos a comer a Casa Mariano, famoso por la abundancia de sus platos. Nos dimos un buen homenaje a base de chuletón y cochinillo.

Después de una agradable sobremesa, decidimos volver a Madrid, pero esta vez lo hicimos a través de El Escorial. Saliendo de El Tiemblo, fuimos hacía San Martín de Valdeiglesias por la N-403. Una vez allí, tomamos la M-501 con dirección a Madrid hasta llegar al cruce con dirección hacía Robledo de Chavela. Ya comienzan a verse las espectaculares antenas de la Madrid Deep Space Communication complexa, parte la red de antenas de espacio profundo de la NASA, desde donde se controlan misiones como las de la Voyager.

Llegamos a Robledo de Chavela, toda la zona estaba nevada. Comenzamos a subir el Puerto de la Cruz Verde. Por la zona de Robledo de Chavela no estaba demasiado nevado, pero al coronar y empezar a bajar hacia El Escorial, la vertiente estaba totalmente nevada. La carretera estaba despejada por las máquinas quitanieves, pero aún así había que ser prudentes. Llegamos al Escorial y ya tomamos la carretera hacía la A-6, y rumbo a Madrid.

Technorati Tags: ,

martes, diciembre 09, 2008

Organizaciones de artistas canadienses piden una tasa sobre Internet y obligatoriedad de contenidos

(víaz Slashdot) Las asociaciones de autores ACTRA y SOCAN, que agrupan a autores del mundo del cine y de la música acaban de pedir una nueva serie de regulaciones para Internet para promover la cultura canadiense y la nueva creación. El mismo tipo de excusas que usa aquí la SGAE para justificar el canon digital. Pero aún hay más: intentan imponer que el 51% del contenido de las webs comerciales canadienses sea de origen canadiense. Recuerda mucho a la imposición que existe en España que las TV privadas de financiar con un tanto por cierto de sus beneficios a cine español - el cual no suele estar caracterizado por su éxito comercial -.

Technorati Tags: ,

sábado, diciembre 06, 2008

Más motivos para cerrar las cadenas públicas de televisión

No es ningún secreto que opino que las cadenas públicas de televisión están mejor cerradas que gastando dinero del presupuesto público. Hoy hay una noticia en el Confidencial, Ofensiva de Rubalcaba contra Luis Fernández, que refuerza aún más esa opinión. Según la noticia, al ministro del interior, Alfredo Pérez Rubalcaba, no le ha hecho mucha gracia ciertas informaciones que ha emitido RTVE, y ha pedido el cese de su presidente. Destaco los siguiente:
En conversaciones con miembros de la Ejecutiva socialista Rubalcaba acostumbra a recordar una anécdota del traspaso de poder con Francisco Álvarez Cascos, cuando éste le anunció que el gobierno del PP se proponía privatizar TVE y Rubalcaba le respondió "ya veréis cuando pasen unos cuantos meses como le cogéis gusto a la caja tonta y se os olvidan esas ideas de la privatización"
Para que todo el mundo tenga claro porqué quieren los políticos las diferentes cadenas sufragadas con el bolsillo del contribuyente: simplemente sirven para hacer propaganda de los políticos de los cuales depende su presupuesto. Y para eso, mejor cerradas, que para eso hay ya bastantes cadenas de TV y radios que no depende de los presupuestos generales del estado, y sobre todo, tenemos Internet.

Technorati Tags:

Autozone: Gestión de memoria autonámica en MacOS X

Una de las novedades de Objective-C 2.0 es la posibilidad de gestionar la memoria través de un recoletor de basura (garbage collector) que se encarga de analizar la memoria buscando objetos que ya no están referenciados para liberar la memoria que están usando. Se llama Autozone y el código fuente está disponible con una licencia de tipo Apache.

En Objective C se (autorelease pools aparte) crean objetos de esta manera:

MyClass *c = [[Myclass alloc] init];
MyClass *ref;
...
ref=[OtroObjecto myclass];
[ref retain];
...
[c release];
[ref release];

El mecanismo de gestión de memoria en las anteriores versiones de Objetive C estaba basado en una cuenta del número de referencias que tiene hacia el objeto. Cuando se crea el objeto tiene una sola referencia. Si se le manda el mensaje retain la cuenta de referencias aumenta en uno, mientras que si se le manda el mensaje release la cuenta de referencias disminuye en uno. Cuando ésta llega a cero el sistema libera la memoria asignada al objeto. Hasta ahora, toda esta gestión hay que realizarla manualmente teniendo cuidado para evitar que se pierda la cuenta, porque sino tendríamos una pérdida de memoria.

Para facilitar la labor a los programadores Apple ha decidido implementar un recoletor de basura que facilite el trabajo a los programadores y no tengan que llevar la cuenta de referencias de los distintos objetos que se van creando y los que nos devuelve el sistema. Esta librería está escrita en C++ y según la documentación está pensado para usarlo en un entorno de ejecución donde parte de la memoria puede estar manejada por mecanismos distintos de los que ofrece Autozone.

La implementación ejecuta un hilo que va analizando la memoria, viendo la cuenta de referencias que tienen los objetos y construyendo un grafo que representa las relaciones entre los objetos que el programa ha creado. Si hay objetos aislados, significa que no existen referencias a los mismos por parte de otros objetos, y por tanto puede liberarse la memoria que utilizan.

Hay un hilo que está continuamente analizando las regiones de memoria. De esta manera se evita bloquear la ejecución de otros hilos mientras se analiza la memoria buscando objetos que no estén referenciados por otros.

Lo malo, es que no hay documentación que explique porqué está implementado la gestión de memoria de esta manera.

Referencias

Technorati Tags: ,

viernes, diciembre 05, 2008

Novedades de Google

Consultando el blog oficial de Gmail he visto un par de noticias que me han interesado:

Sincronizar Google Calendar a través de Caldav

Gracias al soporte de CalDAV ahora se puede sincronizar los calendarios locales con Google Calendar. Han creado también varios programas para poder sincronizar con Outlook - a través de un plugin -, las Blackberry y otros dispositivos móviles. Puede ser útil si se tiene varios ordenadores y se quiere sincronizar entre ellos, aunque como siempre, dejaremos más información nuestra en manos de Google :). Toda la información en Syncing your Google Calendar. El soporte de CalDAV está disponible en la MacOS X 10.5 Leopard y en SunBird

Soporte de Gmail en Google Desktop

Han desarrollado un Gmail on your Google Desktop, un applet para la barra de tareas, para poder leer el correo que tiene en Gmail sin necesidad de tener abierto un navegador. El complemento se llama gmailgadger y está disponible.

Technorati Tags: ,

jueves, diciembre 04, 2008

Representación gráfica de expresiones regulares

(vía reddit.programming). Supongamos que tenemos una expresión regular complicada y queremos visualizar gráficamente como se comportará. Una posible solución es recurrir a strfriend. Por ejemplo, si se quiere representar una expresión regular que matchee con un entero, [-+]?(?:0|[1-9][0-9]*) genera el siguiente gráfico:

Regex

De los comentarios de la entrada en Reddit encontré la referencia a expresión regular necesaria para validar una dirección de correo electrónico RFC 822. Sólo tiene 83 líneas y 6509 caracteres. Y aún así el motor regex de Perl es capaz de comérsela, aunque supera con creces lo que es lógico y mantenible hacer a través de expresiones regulares.

Technorati Tags:

domingo, noviembre 30, 2008

Impuestos sobre el vicio

Es curioso hasta que punto el estado inventa excusas (lo malísimo del tabaco, lo malísimo del alcohol) para recaudar más dinero. La porno tasa italiana, ha sido el último añadido a ese tipo de impuestos que podemos denominar sobre el vicio, un gravamen que se aplicará a cualquier material pornográfico que se venda en Italia. La excusa - como no -, la crisis. Con tanta inyección de dinero para ayudar a los pobrecitos bancos que viven de multiplicar el dinero, a que sigan funcionando y dando créditos no respaldados por ningún ahorro, o en el colmo de la hipocresía - como sucede en España - con campañas antitabaco y se subvenciona su producción.

Como recurrir a impuestos directos en una situación de recesión económica como se está viviendo no está muy mal visto, porque ya está el bolsillo lo bastante ajustado como para sacar más dinero directamente, hay que usar métodos un poco más sibilinos, en especial en aquellos productos que se les puede aplicar cierta moralina: el alcohol, el tabaco o el sexo.

¿Cuánto tardarán en España en subir los impuestos especiales para las cervezas?

Technorati Tags:

jueves, noviembre 27, 2008

Sobre el control de Internet: Josep Maria Carbonell quiere regular el acceso a Internet

Josep María Carbonell es el presidente del Consejo Audiovisual de Cataluña, órgano encargado de toda la gestión audiovisual dicha comunidad autónoma. Ha publicado recientemente el libro titulado El primer poder, donde plantea claramente que el poder político debe de controlar los medios de comunicación evitando su comercialización o sometimiento al mercado. De la propia contraportada del libro:
informació i la comunicació com a bé social són substituïdes per un bé estrictament comercial i mercantil; els mitjans de comunicació han perdut part de la seva missió social, el seu paper de vigilant dels poders democràtics, per convertir-se en un poder esclau de les seves lògiques mercantils i un nou actor polític.
Traducido mas o menos libremente:
La información y la comunicación como un bien social son sustituidos por un bien estrictamente comercial y mercantil; los medios de comunicación han perdido parte de su misión social, el ser los vigilantes de los poderes democráticos, para convertirse en un poder esclavo de sus lógicas mercantiles y un nuevo poder político
Si leemos alguno de los resúmenes de prensa sobre la presentación del libro, por ejemplo, La Generalitat quiere regular Interneto Carbonell propone poner fin al libre acceso a Internet, me hago una idea de exactamente que tipo de regulación desearía este censor - es la palabra adecuada para definirlo - sobre Internet.

Regulación de qué operadores tienen acceso a Internet y de contenidos

De la noticia del Confindencial:
Se declaró partidario de que "los operadores (de Internet) tengan unas obligaciones similares a las que tienen las compañías telefónicas". Se pronunció a favor "de una mínima regulación indispensable, si hiciese falta, de los contenidos". Cree que debe ser una regulación "proporcionada, al servicio del interés público". También denunció presiones de los grandes grupos de telecomunicaciones que, dijo, desean privatizar el espectro radioeléctrico.
Intuyo el modelo que propone el presidente del CAC: Uno basado en licencias como el que está presente actualmente en el espectro radioeléctrico. De esta manera, se podría asignar a los medios amigos o aquellos poco críticos con el poder establecido la posibilidad de conectarse a Internet y dar servicio. Lo que pasa es que este señor no puede evitar que Internet es una red igual a igual donde cualquiera puede montar un servidor en su casa.

La otra es admitir sin tapujos el control de contenidos (como siempre se realizará en nombre de la seguridad de los menores, la seguridad nacional, atenta contra la cultura catalana o cualquier excusas simular). Como siempre, este tipo de medidas lo único que buscan es tener la oportunidad de callar y localizar a todos aquellos que tengan opiniones discrepantes con la línea oficial de pensamiento del gobierno de turno.

Antes era muy fácil callar a los medios díscolos o que publicaran una información poco adecuada para algún político. Su difusión era más limitada, dependían de concesiones políticas que se podrían revocar o directamente, en tiempos del general gallego, cerraban la rotativa o pegaban un tijeretazo a la película. En los últimos treinta años se usan métidos más sibilinos: subvencionar a periódicos amigos, asignación de televisiónes de pago, etc, pero de unos años hasta ahora, se están encontrando con la dura realidad de Internet y su complicado control. Con la llegada de los blogs, la facilidad de publicación de información y la inversión necesaria para ello ha caído y es muy sencillo publicar en Internet, y sobre todo, denunciar los desmanes del poder político. Y eso, no sienta nada bien a quienes están en las poltronas.

Technorati Tags: ,

domingo, noviembre 23, 2008

El Valle del Tiétar

Hace un par de semanas hicimos una pequeña excursión a la zona sur de Gredos, el Valle del Tiétar, conocido como la Andalucía de Ávila, puesto que está resguardado de los fríos del norte por la Sierra de Gredos: en esta zona crecen castaños, olivos, vides e incluso naranjos. Para llegar al Valle del Tiétar desde Madrid hay dos caminos. Bajar por la A-5 hasta Talavera de la Reina y de ahí subir hacia la zona de Arenas de San Pedro, o bien ir por la M-501, llegar hasta San Martín de Valdeiglesias , y seguir el Tiétar desde su nacimiento en Santa Martía del Tiétar.

Nosotros seguimos la M-501, la carretera de los pantanos hasta San Martín de Valdeiglesias, donde tomamos la carretera camino de Plasencia. Entrando ya en Ávila, la carretera se convierte en la CL-501. Unos kilómetros más adelante, tomamos un cruce con dirección a Casillas, población abulense famosa por las castañas. Situada en la falda de una montaña, todos los alrededores del pueblo son un inmenso castañar, restos de los antiguos bosques de castaños que cubrieron esta zona, donde se recolecta y se vende tan preciado fruto, que podemos comprar en muchos casas del pueblo.

Casillas

Desde esta población parte una ruta que sube al Puerto de Casillas y desciende por la otra vertiente hasta el Tiemblo.

Salimos de Casillas por la carretera que lleva hasta Sotillo de la Adrada, continuando por la Cl-501. Los pueblos que nos vamos encontrando han experimentando una expansión fuerte expansión urbana de segundas residencias debido al turismo veraniego madrileño. Tomamos un cruce que nos lleva a Casasviejas y de ahí a Mijares, de donde parte una carretera que sube por el puerto del mismo nombre a la otra vertiente de Gredos, hacía el valle del Alberche. Nosotros no seguimos esa ruta, y bajamos hasta Gavilanes, donde comimos tranquilamente un buen chuletón de la zona y una fabada a muy buen precio.

Después de comer continuamos nuestra ruta hasta Arenas de San Pedro, donde tomamos un pequeño camino que lleva al monasterio de San Pedro de Álcantara, donde murió el santo del mismo nombre. El convento que nos ha llegado a nuestros días data del siglo XVIII, diseñado por Ventura Rodriguez.

Cúpula de la iglesia del monasterio, al atardecer

De vuelta a Arenas de San Pedro, tomamos una retorcida carretera con dirección a Candeleda, para visitar el Santuario de la Virgen de la Chilla, situado en las faldas meridionales del macizo central de Gredos. La tradición dice que la Virgen se apareció a un pastor en el siglo XII. El Santuario está a unos siete kilómetros de Candeleda, llegándose al mismo a través de una estrecha carretera que asciende desde el pueblo. Llegamos casi de noche y no pudimos visitar la iglesia, ya cerrada, pero el atardecer nos permitió sacar algunas fotos chulas.

Santuario de la Virgen de la Chilla

Atardecer sobre la Vera

El resto de las fotos de la excursión la podéis encontrar en este álbum de Picassa:

Valle del Tiétar

Technorati Tags:

viernes, noviembre 21, 2008

Uso de extensiones del GCC en Linux

(vía osnews). Acabo de leer GCC Hacks in the Linux Kernel, donde nos cuentan alguna de las extensiones del gcc que se utilizan en las fuentes de Linux.

  • Descubrimiento de tipos. GCC tiene una extensión denomianda typeof, que puede ser usado:
    int x;
    typeof (x) y;
    En este caso y sería un entero.
  • case ranges, que permite utilizar rango en las construciones switch/case:
    switch(c){
        case 1...9:
            printf("Menor que 10\n");
            break;
        case 10...19:
            printf("Menor que 10\n");
            break;
        default:
            printf("Desconocido\n");
    }
  • arrays de longitud cero, útiles para definir en estructuras que son cabceras para un objeto de dimensión variable:
    struct pascalstring{
        size_t length;
        char string[0];
    };
Extensiones más exóticas son aquellas que permiten obtener información sobre el flujo de ejecución de un programa, alinear un objeto en la frontera de una página, introducir información que pueden aprovechar los optimizadores para los predictores de saltos de los micros , activar el prefetch para llenar la memoria caché con la información que se vaya a tratar evitando tener que ir a la memoria primcipal , usar las intrucciones SIMD de los micros que la soporten o instrucciones para accesos atómicos a memoria.

Technorati Tags:

miércoles, noviembre 19, 2008

Nuevos Macbooks y HDCP (DPCP) : Más protección de contenidos

Hay que desengañarse: todo el modelo de negocio montado alrededor de la tienda online de Apple, iTunes, depende del contenido ofrecido por las grandes productoras, y pasa - inevitablemente - por plegarse a los requerimientos de éstas con respecto a la protección del mismo: Un paso más es la llegada de HDCP/DPCP a los nuevos Macbooks. Alguna de las películas que se ofrecen actualmente a través de iTMS no se reproducirán si la pantalla a la cual están conectadas no soporta HDCP/DPCP. No debe de extrañarlea nadie este paso: cualquier reproductor Blue-Ray o HD DVD tiene la misma restrición.

En el caso de la salida de video de los MacBooks, el DisplayPort, la funcionalidad encargada de evitar la reprodución en aquellos dispositivos no autorizados se llama DPCP, desarrollada por AMD, y que permite el uso del algorimo de encriptación AES-128 para proteger el contenido. Este protocolo tiene mecanismo de autentificación de ambos extremos, sesiones con diferentes claves de encriptación, sistema de revocación de claves comprometidas y sistema de deteción de proximidad, para evitar mandar la señal a sistios "distantas".

Referencias

Technorati Tags: ,

domingo, noviembre 16, 2008

Wikipedia.de censurada por un artículo sobre Lutz Heilmann

(vía Censurada la Wikipedia en Alemania) Acabo de leer que el dominio Wikipedia.de, controlado por la organización Wikimedia Deutschland, encargada de educar para el correcto uso de la Wikipedia, que redirige sus artículos hacia de.wikipedia.org, ha tenido que deshabilitar la redirección de artículos tras la denuncia del ex-miembro de la Staci Lutz Heimann, actual miembro del partido Die Linke, y parlamentario alemán. Lo interesante de la censura es que se aplica a dicho dominio porque el ccTLD (.de) se rige por las normas alemanas, mientras que se puede acceder sin problemas a la wikipedia alemana a través de de.wikipedia.org. La noticia también está en el artículo Politician Forces German Wikipedia Off the Net, en Slashdot.

Leyendo la entrada sobre Lutz Heilman en inglés, se habla sobre la denuncia llevada a cabo contra Wikimedia Deutschland y contra tres de los usuarios involucrados en la redacción del artículo en la Wikipedia. Según esta entrada la denuncia ha sido llevada a cabo por afirmar que Lutz Heilman no acabó su carrera universitaria y ha estado involucrado en negocios con la industria pornográfica:

...
Heilmann objected to claims that he had not completed his university degree, and that he had participated in a business venture involving pornography ...
Es interesante saber que haber pertenecido a la Staci, la policía secreta de la República Democrática Alemana, encargada de espiar a toda su población (aconsejo ver la La Vida de los Otros) no cause ningún sonrojo, pero sin embargo, comentar que se ha dedicado al negocio de la pornografía, sí, y por eso hay que ocultarlo de todos.

Con independencia de todo,no está mal recordar el poder de los políticos para intentar eliminar cualquier comentario que pueda arrojar alguna sombra de su gestión o comportamiento. Y no se justifica una medida de este calibre por un artículo.

jueves, noviembre 13, 2008

Intel Core i7

Intel acaba de presentar la siguiente evolución de su microarquitectura, con nombre comercial Core i7 y conocida como Nahalem. Las novedades más importantes de los nuevos preocesadores son el abandono de la arquitectura de bus que ha usado Intel desde el Pentium-Pro , para pasar a una nueva denominada Intel QuickPath Interconnect, QPI y la inclusión de los controladores de memoria en la propia oblea (cosa que ya hizo AMD hace tiempo).

QPI y controladores de memoria en oblea

Intel tenía en su gama de microprocesadores un problema de ancho de banda: su arquitectura de bus (AGTL) no disponía del suficiente para alimentar a las unidades de ejecución de sus microprocesadores. Para compensar este efecto, incluía memorias cachés de gran tamaño en los chips. Los problemas se complicaban aún más en caso de varios microprocesadores. En el momento que se modificara memoria, había que escribirla a la caché y de ahí a la memoria principal para que todos los micros tuvieran una vista coherente de la misma. Este cambio de arquitectura supone pasar de un sistema de memoria unificada a una arquitectura NUMA. El ancho de banda del nuevo QPI es de 25.6 GB/s. Se pueden ver la mejora en ancho de banda respecto a Penryn en Bandwidth and cache latency (Sandra)

Ahora se podrá dedicar parte de esa ingente cantidad de transistores usados en la caché en aumentar el paralelismo de las unidades de ejecución , puesto que se la combinación de los controladores de memoria en la misma oblea y el nuevo bus permite disponer de la cantidad de ancho de banda necesaria para alimentarlas. En este chip se han puesto las bases para la evolución futura de estas novedades. Por ejemplo, se ha pasado de 820 millones de transistores del caché L2 del la arquitectura Penryn (12 MB combinado) a los 731 millones (8MB L3 combinado), mientras que el Caché L2 ha bajado a uno de 256 Kb por core. También se mejora de manera significativa la latencia de acceso a memoria.

La versión actual soporte DDR3-1066 y el controlador de memoria utiliza un reloj 3.2 Ghz o 2.13 Ghz, dependiendo del modelo.

Modularidad

Uno de los objetivos que persigue Intel es tener una microarquitectura que pueda ser adaptada a diferentes mercados: móviles, estaciones de trabajo de alto rendimiento, desktops y servidores. El número de componetes (cores de ejecución, enlaces QPI, tamaño de caché L3 y controladores de memoria), podrá escalarse en función del segmento de mercado al que vaya dirigido el micro.

Cores de ejecución

Core i7 es un microprocesador con un pipeline de ejecución de 14 etapas capaz de ejecutar instruciones fuera de orden. Las unidades de ejecución no han cambiado respecto a la actual arquitectura Core 2. Ha vuelto la tecnología de hyperthreading (SMT), de tal manera que un micro con dos cores físicos, el sistema verá ahora como cuatro lógicos, lo que sea por no tener hardware ocioso.

En la microarquitectura la unidad de deteción de bucles se colocado detrás de las etapas de decodificación de instrucciones. Ahora almacena hasta 28 micro-ops, lo que permite durante la ejecución del bucle ser más rápido y apagar las unidades de predición de saltos, obteción de instrucciones (fetch) y decodificación de las mismas (decode), ahorrando energía. Este elemento recibe el nombre de Loop Stream Detector (LSD) y en el caso del Core 2 estaba situado antes de la unidad de decodificación de instruciones.

El número de micro-ops que es capaz de ejecutar este Core de ejecución es 128. La técnica que debutó en los Core 2 Duo de macrofusión (agrupar ciertas instruciones de tal manera que dan lugar a una sola micro-ops para su ejecución, para incrementar el número de instrucciones procesadas por cilo), ahora se usa también en el modo de funcionamiento de 64 bits (se puede ver una pequeña descripción de la macro-fusión en EM64T in Core 2 Duo: What’s the Theory?)

Se ha modificado las tablas TLB ( Translation Lookaside Buffers), aquellas encargadas de traducir las direcciones de memoria virtual a física. En Core 2 Duo, el número de entradas no daba para mapear ni todo el caché de nivel 2. Ahora se aumenta para que sean capaces de mapear todo el caché L3 (y un poco más).

Se ha mejorado en la penalización que se incurría al intentar acceder un acceso a la memoria caché no alineada en los Core 2 Duo y se ha mejorado la ejecución de las instrucciones de sincronización (aquellas usadas para implementar primiticvas de sincronización como spinlocks)

Me encantaría saber más de microarquitectura, reconozco que la gente de Intel ha hecho un trabajo excelente para conseguir un gran micro y por las pruebas vistas en Ars Tecnica, deja en pañales a la arquitectura Core 2 Duo.

SSE 4.2

Vuelven instrucciones para gestionar cadenas - que habían quedado arrinconadas durante los últimos años -, cálculo de CRC e instrucciones como POPCNT (cuenta los "1" ...).

Consumo de energía

Se ha introducido un nuevo módulo en el microprocesador para controlar el consumo de manera más eficiente. Este módulo llamado PCU, es un microcontrolador que casi tiene el tamaño de un 486 en transistores, y a través de firmware permite implementar algoritmos inteligentes de control del consumo. Por ejemplo, puede detectar que hay cores que están ociosos y así aumentar ligeramente la frecuencia de los cores activos.

Referencias

Technorati Tags: ,

domingo, noviembre 09, 2008

memcached: Arquitectura interna

(vía reddit.programming). Hace algún tiempo leía un artículo sobre el mecanismo de caché que utiliza Google App Engine está basado el proyecto de fuentes abiertas mencached: un sistema distribuido de gestión de caches genérico, pero usado sobre todo en aplicaciones web. Entre sus usuarios se puede destacar a Facebook o LiveJournal. Para conseguir velocidad utiliza una librería llamada libevent, que permite reemplazar los clásicos bucles de eventos que se encuentran en los programas servidores con un mecanismo basado un funciones callbacks y que permite escalar hasta un número ilimitado de descriptores de ficheros, usa funciones de entrada y salida no bloqueantes y por último, su propio sistema de gestión de memoria, basada en un slab allocator. A peek at memcached's implementation, da una descripción del funcionamiento de la gestión de memoria de esta librería. Este sistema es similar al gestor de memoria del núcleo de Linux e a su vez deriva del implementado en Solaris: Slab allocator (ver el artículo de Jeff Bonwick The slab allocator: An object-caching kernel memory allocator).Se puede leer un poco más de este tipo de gestión en Anatomy of the Linux slab allocator, en especial las referencias que aporta. Por otra parte se intenta garantizar que toda la gestión de memoria se realice con algoritmos en tiempo O(1) y que no exista fragmentación.

En las fuentes de memcached, en el fichero doc/memory_management.txt viene explicado todo el mecanismo de gestión de memoria. Si miramos el fichero slab.c puede verse toda la implementación del slab allocator.

La idea tras este tipo de gestión de memoria es simple: pedir al sistema operativo memoria en unos determinados tamaños,64 bytes, 128 bytes, 256 bytes, hasta un máximo - en el caso de memcached 1 MB -,creando listas con objetos de cada uno de los tamaños (ver slabs.c/slabs_init() ). Cuando el sistema necesita almacenar un objeto, se utiliza aquel trozo de memoria que más se ajuste al tamaño del mismo (en vez de llamar al sistema operativo usando malloc()). En caso de necesitar más memoria memcached lo que hace es reservar un trozo de 1 MB, dividirlo en los trozos necesarios (siempre con los tamaños predefinidos) y asignarlos a la listas libres.

La función slabs.c/slabs_alloc() es la encargada de reservar memoria en uno de los tamaños predeterminados (el slab determinado para un tamaño de objeto se obtiene con slabs.c/slabs_clsid(). Para liberar memoria se usa slabs.c/do_slabs_free().

Con este sistema se evita la fragmentación si se estuviese usando una gestión de memoria basada en malloc() y free(). En contra partida, se desperdicia memoria, porque hay que usar un bloque de memoria con el tamaño adecuado. Así si estamos usando una arquitectura de slabs con una secuencia de 64 bytes, 128 bytes, 256 bytes, 512 bytes, ..., un objeto de 70 bytes tendría que usar un slab de 128 bytes.

sábado, noviembre 08, 2008

Reino Unido: Un paso más hacia el análisis y almacenamiento de la información que circula por sus enlaces Internet

¡Qué lejos queda la Inglaterra de Winston Churchill que luchó contra los nazis en la 2º Guerra Mundial!. El Reino Unido se ha convertido en uno de los países donde la obsesión por el control de qué hacen sus ciudadanos ha crecido hasta tal punto que empieza a parecerse a cualquier dictadura del tres al cuarto. Leyendo en UK Outlines Plan For Internet Black Boxes, me entero que del artículo Internet black boxes to record every email and website visit , donde se comenta como el Reino Unido tiene planes de distribuir cajas negras que almacenen información de navegación y de los correos electrónicos que envían sus ciudadanos (que cada vez parecen más subditos, a ver cuanto tardan en convertirse en siervos) para su posterior análisis llegado el caso, todo esto bajo el llamado the Interception Modernisation Programme.

Actualmente dudo que exista la suficiente capacidad de proceso y almacenamiento para intentar un despliegue de este tipo, pero buscando un poco más de información sobre el tema, leo The Independent gets the wrong end of Jacqui's gIMP, donde The Register hace mención que estas cajas negras que el gobierno británico piensa usar estarán situadas en las rutas de datos y serán configuradas de manera remota para espiar a aquellos siervos^W ciudadanos que les interesen. Básicamente lo que buscan es tener el mismo tipo de infraesctructura que existe a día de hoy en la telefonía móvil y fija que permite intereceptar comunicaciones.

Por comentar algo, hace algún tiempo estuve estudiando información sobre los DSLAM de Alcatel que utiliza Telefónica para implementar las ADSL. Estos equipamientos tienen funcionalidades de duplicación de tráfico ya incluidas en el software de los aparatos para permitir a las fuerzas de seguridad el análisis del tráfico que circula por los mismos.

Internet se está convirtiendo en un medio bastante incómodo para los gobiernos de cualquier país: desde dictaduras y teocracias que quieren que no haya ideas no controladas por ellos como de los países donde existe una mayor libertad de prensa, pero que ésta se modula con la dificultad de acceder a frecuencias (TV, radio) o por la inversión necesaria para montar un periódico. Si a esto le sumanos la facilidad de encontrar información gracias a los buscadores como Google o Yahoo, tenemos un cóctel que los políticos no digieren demasiado bien, sobre todo porque la prensa puede controlar mejor sus movimientos.

Bajo la excusa de la seguridad (ya se sabe: terrorismo, pornografía infantil, etc), se está intentando montar una infraesctructura que permita un control lo más preciso posible de qué se publica en Internet y quien lo publica. En los medios de comunicación tradicionales como TV o Radio, es más fácil porque necesitas autorización del Estado para tener la frecuencias de emisión, y así éstas se pueden asignar a periodistas amigos - en España tenemos una larga tradición con el tema -, mientras que en Internet tienes un soporte para publicar lo que quieras, y en muchos cosas, como puede ser los weblogs casi gratuitos.

Picos de Europa (III): Covadonga y los Lagos

El último día visitamos la zona de Covadonga. Salimos relativamente tarde del parador de Fuente Dé. Llegamos a Potes, y aprovechamos para visitar su mercado que se celebra los lunes y comprar alguno de los quesos tradicionales de la zona. Después de par de horas, cojemos de nuevo el coche, y nos adentramos por el Desfiladero la Hermida, por donde discurre la carretera que nos lleva hasta Panes. En Panes, tomamos ya la carretera que lleva a Cangas de Onís, que discurre paralela al río Cares. Esta carretera está bien asfaltada y es ancha, se tarda poco en llegar por ella a Arenas de Cabrales, uno de los municipios donde se elabora el famoso queso picón. El cabrales se elabora a partir de leche de vaca o bien con mezcla de cabra, vaca y oveja, y se deja madurar en las cuevas naturales de la zona, donde una temperatura entre 8 y 12 ºC y la humedad del 90% favorece la aparición de hongos de la familia penicilinium que le da las vetas tan características.

Arenas de Cabrales es una localidad que se ha transformado para dar servicio al turista, con varias tiendas de recuerdos, donde se puede - como no - adquirir sobre todo quesos de la zona. Aprovechamos para comer en una sidrería y tras un paseo hasta una de las múltiples tiendas de recuerdos - no conociamos la situación de una sería de venta directa donde hubiese sido más barato comprar el queso -, comprar queso y orujo. Continuamos en coche hasta el mirador del Pozo de Oración,en Poo,desde donse se tiene una espectacular vista del Narajo de Bulnes o Picu Urriello.

El Naranjo tiene 2519 metros de altitud, y aunque no es la mayor altura de la cordillera cantábrica (corresponde a Torre de Cerredo con 2648 metros), si es el pico más conocido de la Cordillera Cantábrica. Destaca su cara oeste con caídas verticales de más de 600 metros.

El Naranjo de Bulnes, desde el Mirador del Pozo de Oración

Tras sacar algunas fotos, aunque con el cielo un poco nublado, seguimos hasta Canas de Onís, donde pasamos a visitar el Santurario de Nuestra Señora de a, donde la leyenda cuenta que Don Pelayo se encomendó a la Santina para la Reconquista.

Santuario de Covadonga

A pesar de ser cerca de las seis de la tarde y que teniamos que volver a Madrid, estar cerca de Enol y Ercina era demasiado tentador como para no coger el y subir la revirada y estrecha carretera que nos lleva a estos dos lagos de origen glacial. Enol está situado a unos 1070 metros de altura, mientras el Ercina está situado a unos 1108 metros de altitud, separados por la llamada Porra del Enol.

Al igual que hace dos años, tuvimos suerte de no encontranos con niebla, pero dada la época del año y el estar atardeciendo, no se pudieron sacar fotos como otras veces, aunque mi mujer consiguió una de Enol justo en el que se filtraba el sol por las nubes que me parece muy bonita

Lago Enol, al atardecer

Tras subir a Ercina,nos quedamos un rato disfrutando de la tranquilidad de la zona, y tras unas fotos, de vuelta a Madrid de este estupendo fin de semana Lago Ercina

En el tintero, nos volvemos a dejar una vez más, remontar la carretera desde cebos a Tielves y Sotres, pasarnos por Tresvisos, donde se hace un queso picón exquisito (y que te puede apestar el frigorífico tres meses...) , visitar en la Vega de Liébana el pueblo de Dobres,... pero tres días no dan para tanto.

miércoles, noviembre 05, 2008

Picos de Europa (II): La vertiente Sur de los Picos de Europa

El domingo decimos visitar la zona Sur de los Picos de Europa. Tras salir del parador realizamos una pequeña visita a Mogrovejo, un pequeño pueblo conservado, donde se encuentra la Torre Almenada de Pedro Ruíz de Mogrovejo, finales del siglo XIII. Desde el pueblo se tiene unas excelentes vistas sobre os Picos de Europa y la comarca de Liébana.

Torre Almenada de Pedro Ruíz de Mogrovejo

Mogrovejo

Una ves en Potes, tomamos la CA-184 con dirección al puerto de Piedrasluengas, en Palencia, pasado Cabezón de Liébana, tomamos un cruce con dirección a Piasca. Allí visitamos la iglesia románica de Santa María la Real de Piasca, del siglo XII, construida junto a los restos de un antiguo monasterio que podría datar del siglo VIII o IX.

Portada de Santa María la Real de Piasca

Santa María la Real de Piasca, entre las casas

Seguimos la carretera, que asciende hasta el pueblo de Los Cos, típico pueblo montaña de esta zona. Un poco antes de llegar al mismo, hay un mirador desde cual se disfruta una hermosa vista sobre sobre el valle.

Uno de los valles, desde el mirador de Los Cos

De vuelta, hacia Potes, tomamos una desviación a la izquierda que nos lleva hasta Aniezo, para ver si era relativamente sencillo llegar al Santuario de la Virgen de la Luz. Sin embargo, el camino es de unos cuatro kilómetros desde Aniezo, por un camino apto para cabras :). Este santuario estaba situado en la cara suroeste del Cuernón de Peña Sagra, a unos 1320 metros de altura.

Bajamos de nuevo a la carretera, y seguimos hasta Potes. Una vez allí cojemos N-621 que se adentra en el Valle de la Vega de Liébana. Esta carretera une abría con León a través del puerto de San Glorio.Aunque Riaño y Potes están rados por unos 54 km, se puede tardar bastante en hacer el recorrido, dada la ficultad de la carretera. La vertiente cántabra del puerto es estrecha, de buen firme, pero con muchas curvas. Antes de coronar el puerto nos paramos en el dor del Corzo, desde el cual se tienen una magnífica vista a la Cordilla ica y a unos farallones donde se ven buitres y otras rapaces. No visitamos el rador de Collado de Lesba - donde está el monumento al Oso - , un poco más a del mirador del Corzo, porque pasada las tres de la tarde, podía ser do encontrar un sitio abierto para comer :)

El Valle de La Vega de Liébana, desde el Mirador del Corzo

Empezamos a bajar San Glorio por la vertiente asturiana y nos paramos en Llanaves de la Reina a comer, en un hotel rural. Seguimos por la N-621 hasta el Portilla de la Reina y una vez allí, tomamos la LE-243. Esta carretera lleva hasta Posadas de Valdeón, a través del puerto de Pandetreve. En la carretera se puede disfrutar de vistas increíbles, con hayedos con tonos rojizos, y sobre todo de las impresionantes moles del macizo Urriles o macizo central de los Picos de Europa.

Hayedos junto a la LE-243, camino de Posadas de Valdeón

Macizo Urrieles o Macizo Central desde lo alto de Pandetreve

En los caminos y carreteras de esta zona hay que tener bastante cuidado, sobre todo porque el ganado vacuno pasta con total libertad y no es raro encontrarnos vacas tras una curva o en las calles que atravesamos de los pueblos - como nos pasó en Posadas de Valdeón -,

La carretera entre Posadas de Valdeón y Caín es estrecha, ahora mismo está en obras, y hay que tener mucho cuidado. Corre paralela al Cares. A medio camino, está el llamado Chardo de Lobos, una trampa que se usaba antaño para capturar a los lobos que vivían en la zona.

Charo de Lobos

En Caín comienza la llamada Ruta del Cares, que une Caín con Poncebos, a través de un espectacular desfiladero con entalladuras de más de mil metros en algunas de sus zonas. Mientras atardecía disfrutamos del paisaje desde, con el pueblo en el fondo del valle junto al Cares.

Piedra Lluenga, desde Caín, al atardecer

Una cascada sobre el Cares

Ya atardeciendo, salimos de Caín, y nos paramos en el Mirador del Tombo

Los Picos, desde el Mirador del Tombo

Llegamos a Posadas de Valdeón, donde paramos en una quesería para comprar el queso azul famoso de esta localidad, seguimos la carretera, pero en vez de olver por la LE-243, tomanos la carretera que lleva a través del puerto Panderuedas hasta la N-625 que desemboca justo en el comienzo la subida al puerto del Pontón - que une León con Asturias -. Impresionante por o, seguirlo por la zona asturiana del Desfiladero de los Beyos. Aprovechando el atardecer, tomamos algunas fotos desde el puerto

Atardecer desde el puerto de Panderuedas

Nosotros la carretera dirección Riaño, para de nuevo tomar la N-621 desde Riaño hasta rtilla de la Reina y de ahí de nuevo San Glorio hacia Potes. Si el puerto de da respeto en la vertiente cántabra, no os cuento lo que es de noche. En los aproximandamente veinte kilómetros de bajada de la vertiente cántabra no nos mos con un coche ....

De vuelta al Parador de Fuente Dé donde estábamos alojados, hicimos parada y da en uno de los mesones de Espinama, para tomar un reconstituyente caldo y una buena tabla de embutidos para coger fuerzas para el día siguiente.