Arquitectura y LPARs

Guía exhaustiva de la arquitectura IBM i: TIMI, almacenamiento, objetos, procesadores, memoria, compilación, particiones lógicas, alta disponibilidad e IPL.

TIMI — Technology Independent Machine Interface

Este es el concepto más importante para entender la longevidad de la plataforma.

Aplicaciones de usuarioRPG, COBOL, Java, PHP, Python
TIMI (interfaz de máquina)Capa de abstracción — ~430 instrucciones
SLIC (System Licensed Internal Code)Implementación del SO en C/C++
Hardware POWERProcesadores IBM POWER10

El TIMI es una capa de aproximadamente 430 instrucciones de máquina virtual independiente del hardware real. Cuando compilás un programa RPG o COBOL, el compilador genera un MI Program Template — código intermedio TIMI, no código nativo. Este template se almacena dentro del objeto *PGM.

El proceso de traducción

Cuando el programa se ejecuta por primera vez (o después de un cambio de hardware), el componente Translator del SLIC convierte las instrucciones TIMI en código nativo POWER. Este código nativo se cachea dentro del objeto, pero puede regenerarse en cualquier momento. Por eso IBM pudo migrar de CISC → RISC → POWER sin romper ningún programa.

Flujo de vida de un programa

Fuente RPG/COBOL

código fuente

Compilador ILE

CRTBNDRPG

MI Template

instrucciones TIMI

Translator

SLIC → nativo

Código POWER

ejecución real

¿Qué contiene un objeto *PGM?

Cada programa compilado en IBM i almacena ambas representaciones:

MI Program Template

Instrucciones TIMI portables. Permanentes e inmutables. Es la "fuente" real del ejecutable. Garantiza portabilidad entre generaciones de hardware.

Observable (código nativo)

Código POWER nativo generado por el Translator. Cache descartable. Se regenera automáticamente al migrar hardware o con STROBJCVN.

Comparación x86: Sería como si tus binarios de Linux compilados para Intel corrieran nativamente en ARM sin recompilar. En IBM i, esto es una realidad arquitectónica desde 1988. Java logra algo similar con el bytecode + JVM, pero TIMI opera a nivel de SO completo.

Single-Level Storage

En x86, tenés una clara separación entre RAM y disco. Los programas deben manejar explícitamente la carga de datos desde disco a memoria. En IBM i, la RAM y el disco se ven como un único espacio de direcciones de 128 bits.

x86 tradicional

  • RAM y Disco son espacios separados
  • El programa gestiona la carga/descarga (open, read, write, close)
  • Control explícito de I/O — el programador decide
  • El SO gestiona paginación solo dentro de RAM virtual
  • Espacio de direcciones de 48-64 bits

IBM i — Single-Level Storage

  • Espacio de direcciones único de 128 bits
  • RAM ↔ Disco es completamente transparente
  • El SO paginiza entre RAM y disco automáticamente
  • Los objetos persisten: un *PGM en disco ES el mismo en memoria
  • Permite direccionar hasta 2¹²⁸ bytes (~3.4 × 10³⁸)

¿Cómo funciona en la práctica?

Cuando un programa referencia un objeto (por ejemplo, abre un archivo), no hay una operación de "carga desde disco". El objeto ya tiene una dirección en el espacio unificado. El hardware y el SLIC se encargan de traerlo a RAM si no está ahí (page fault), exactamente como funciona la memoria virtual en x86, pero extendido a todo el almacenamiento.

Consecuencia práctica: Un objeto nunca se "pierde" si hay un crash — su estado en disco siempre es consistente. No hay archivos temporales en memoria que se pierdan. Esto es una de las razones por las que IBM i es famoso por su resiliencia.

Direccionamiento de 128 bits y Teraspace

IBM i usa internamente punteros de 128 bits (16 bytes), llamados System Pointers. Cada puntero contiene:

Tag bit

1 bit

Identifica como puntero válido

Tipo de objeto

7 bits

*PGM, *FILE, *USRPRF…

Segmento

64 bits

Identifica el objeto

Offset

56 bits

Posición dentro del objeto

Teraspace

A partir de V5R1, IBM i introdujo Teraspace, un modelo de memoria plana de hasta 1 TB por proceso. Esto complementa el modelo original de 16 MB por segmento (Single-Level Storage), permitiendo a programas ILE usar punteros de espacio plano tipo C/C++ más familiares.

  • Modelo original: Segmentos de 16 MB, accesados con punteros de 128 bits
  • Teraspace: Espacio plano de 1 TB, accesado con punteros de 64 bits (más eficientes)
  • Ambos modelos coexisten — los programas eligen cuál usar en compilación

Todo es un objeto

En IBM i, absolutamente todo es un objeto tipado encapsulado: programas, archivos, colas de mensajes, perfiles de usuario, bibliotecas, dispositivos, hasta las descripciones de trabajo. Cada objeto tiene:

  • Nombre: Hasta 10 caracteres (modelo clásico) o nombre largo vía SQL/IFS
  • Tipo: Identificado con prefijo * — hay más de 100 tipos
  • Biblioteca (Library): Contenedor donde vive el objeto
  • Atributo: Sub-clasificación (ej. un *PGM puede ser RPGLE, CLLE, CBL)
  • Propietario: Perfil de usuario que lo creó
  • Autoridad: Permisos de acceso (similar a chmod pero más granular)

Tipos de objetos comunes:

*PGM

Programa ejecutable

*SRVPGM

Programa de servicio (shared lib)

*MODULE

Módulo compilado (no ejecutable solo)

*FILE

Archivo/Tabla DB

*LIB

Biblioteca

*USRPRF

Perfil de usuario

*DTAARA

Área de datos

*MSGQ

Cola de mensajes

*JOBD

Descripción de trabajo

*CMD

Definición de comando

*DTAQ

Cola de datos

*USRSPC

Espacio de usuario

*OUTQ

Cola de salida (impresión)

*DEVD

Descripción de dispositivo

*SBSD

Descripción de subsistema

*BNDDIR

Directorio de binding

Estructura interna de un objeto

Todo objeto en IBM i tiene una estructura interna consistente:

Object HeaderNombre, tipo, propietario, timestamps, tamaño, autoridad
Associated SpaceDatos del objeto (contenido del archivo, código del programa)
Internal StructuresMetadata del SLIC — no accesible desde TIMI

Integridad de objetos y Tagged Storage

IBM i implementa un mecanismo de seguridad a nivel de hardware llamado tagged storage. Cada byte de memoria tiene un bit de tag adicional que indica si contiene un puntero válido del sistema.

x86 — Sin tags

  • Cualquier dato puede interpretarse como puntero
  • Buffer overflow puede sobreescribir punteros
  • La integridad depende del programador
  • Exploits aprovechan la manipulación libre de memoria

IBM i — Tagged Storage

  • Solo instrucciones MI autorizadas pueden crear punteros
  • Escribir datos sobre un puntero borra el tag → puntero inválido
  • Imposible fabricar punteros a objetos arbitrarios
  • Buffer overflow no puede crear acceso a otros objetos

Esto significa que un programa no puede acceder a un objeto para el que no tiene un puntero válido otorgado por el sistema. Es una capa de seguridad por hardware que no existe en x86 y que hace a IBM i inherentemente más resistente a ciertas categorías de ataques.

Dato: Por esto IBM i históricamente no ha necesitado antivirus. El modelo de objetos encapsulados con tagged storage previene la mayoría de vectores de ataque que afectan a x86.

Procesadores IBM POWER

Los servidores IBM i corren exclusivamente en procesadores IBM POWER(Performance Optimization With Enhanced RISC). La generación actual es POWER10, fabricado en 7nm.

GeneraciónAñoProcesoCores (máx.)
POWER7201045 nm32
POWER7+201232 nm32
POWER8201422 nm12
POWER9201714 nm24
POWER1020217 nm60

Diferencias clave vs x86

  • SMT-8: Cada core puede ejecutar hasta 8 threads simultáneos (x86 tiene SMT-2 / Hyper-Threading)
  • Caché L3 masivo: Hasta 120 MB de L3 por chip en POWER10
  • Bandwidth de memoria: Subsistema de memoria Open Memory Interface (OMI) muy superior a DDR5 en throughput
  • RAS (Reliability, Availability, Serviceability): Memoria redundante, CPU de repuesto automático, diagnostico en caliente
  • Virtualización en hardware: El hipervisor PowerVM corre en firmware, no como software sobre el SO
CPW (Commercial Processing Workload): IBM mide la potencia de sus servidores en CPW, un benchmark propio. Un servidor S1014 entry-level tiene ~3,800 CPW; un E1080 enterprise puede superar 3,000,000 CPW. El CPW es importante porque muchas licencias de software (incluyendo el propio IBM i) se facturan por rangos de CPW (P-Groups).

Gestión de memoria — Memory Pools

IBM i divide la memoria disponible en pools (piletas). Cada pool es una porción de RAM reservada para un propósito. Esto evita que un proceso o subsistema acapare toda la memoria.

Memoria total del sistema (ej. 64 GB)

*MACHINE

8 GB

Pool de máquina — SLIC y kernel

*BASE

32 GB

Pool base — trabajos sin pool específico

*INTERACT

16 GB

Pool interactivo — sesiones 5250

*SPOOL

8 GB

Pool de spool — trabajos de impresión

Además se pueden crear pools privados (pool 1-64) para subsistemas específicos.

Tuning: Faults por segundo

El indicador clave de performance en IBM i es fault rate — cuántas veces por segundo el sistema necesita traer páginas desde disco porque no estaban en RAM. Se monitorea con:

CL — Monitoreo de memoria
WRKSYSSTS          Ver estado del sistema, pools y fault rates
WRKSHRPOOL         Trabajar con shared pools
CHGSHRPOOL         Cambiar tamaño/actividad de un pool
WRKDSKSTS          Ver estado de los discos (I/O wait)
Regla general: Si el fault rate de un pool es consistentemente alto (>10 faults/seg), es probable que necesite más memoria. IBM i permite ajustar pools dinámicamente sin reiniciar.

Almacenamiento — ASPs (Auxiliary Storage Pools)

El almacenamiento en IBM i se organiza en ASPs — agrupaciones lógicas de discos. Es el equivalente a LVM (Logical Volume Manager) en Linux, pero integrado en el SO.

ASP 1

System ASP

Siempre existe. Contiene el SO, todas las bibliotecas del sistema, y los objetos del usuario que no estén explícitamente en otro ASP. Equivalente al volumen raíz en Linux.

ASP 2-32

User ASPs (básicos)

ASPs opcionales para separar datos de usuario del sistema. Si un user ASP se llena o falla, no afecta al System ASP. Se acceden mediante la library list.

ASP 33-255

IASPs (Independent ASPs)

Pools independientes que pueden desconectarse y reconectarse en otro sistema. Son la base de la alta disponibilidad (switchover/failover). Contienen su propio namespace de bibliotecas y pueden replicarse geográficamente.

Protección de disco

  • Mirroring: IBM i soporta mirroring a nivel de SO (no necesita RAID del controlador)
  • Device parity (RAID 5/6): Protección a nivel de controlador de disco
  • Hot spare: Discos de repuesto que entran automáticamente si falla uno

Proceso de compilación (ILE)

El modelo ILE (Integrated Language Environment) define un proceso de compilación en dos fases que permite combinar módulos escritos en diferentes lenguajes.

Pipeline de compilación ILE

Fase 1 — Compilación a módulo

Fuente RPG

CRTRPGMOD

*MODULE RPG

Fuente CL

CRTCLMOD

*MODULE CL

Fuente C

CRTCMOD

*MODULE C

Fase 2 — Binding (enlazado)

CRTPGM

Combina módulos → *PGM

Ejecutable directo con CALL

CRTSRVPGM

Combina módulos → *SRVPGM

Biblioteca compartida (≈ .so / .dll)

También existen comandos "one-step" que combinan ambas fases:

CRTBNDRPG

Compila RPG + bind en un paso → *PGM

CRTBNDCL

Compila CL + bind en un paso → *PGM

CRTBNDC

Compila C + bind en un paso → *PGM

Binding Directories

Un *BNDDIR es una lista de módulos y service programs que el binder puede resolver automáticamente. Es el equivalente al -L / -l de gcc o al LD_LIBRARY_PATH.

LPARs — Particiones Lógicas

LPAR (Logical PARtition) permite dividir un único servidor físico IBM Power en múltiples "servidores virtuales" independientes. Cada LPAR tiene su propio SO, memoria, procesadores, almacenamiento y red. Las LPARs están completamente aisladas entre sí.

Servidor físico IBM Power (ej: S1024)

LPAR 1

IBM i 7.5

Producción

4 CPUs dedicadas64 GB RAM

LPAR 2

IBM i 7.5

Desarrollo

0.5 CPU shared16 GB RAM

LPAR 3

AIX 7.3 / Linux

VIOS

1 CPU shared8 GB RAM

PowerVM Hypervisor (en firmware — no es software instalable)

Comparación con virtualización x86

Conceptox86IBM Power
HipervisorVMware ESXi, Hyper-V, KVMPowerVM (en firmware)
Máquina virtualVMLPAR
Consola de gestiónvCenter, Hyper-V ManagerHMC (Hardware Management Console)
SOs soportadosWindows, Linux, etc.IBM i, AIX, Linux on Power
CPU compartidavCPU (time-slicing)Micro-Partitioning (1/100 de core)
Movimiento de recursosHot-add limitadoDLPAR (add/remove CPU/RAM en caliente)
Live migrationvMotion, Live MigrationLive Partition Mobility (LPM)

DLPAR y Micro-Partitioning

DLPAR — Dynamic LPAR

DLPAR permite agregar o quitar CPU, memoria y adaptadores de I/O a una LPAR en caliente, sin detener el SO. Esto se hace desde la HMC y los cambios son inmediatos.

  • Agregar 2 CPUs a producción porque hay pico de fin de mes → sin reiniciar
  • Quitar memoria de desarrollo y dársela a producción → inmediato
  • Los cambios pueden ser permanentes o temporales

Micro-Partitioning

PowerVM permite asignar fracciones de procesador tan pequeñas como 1/100 de un core (0.01 CPU). Esto se llama Shared Processor Pool.

Dedicated processors

Cores físicos asignados exclusivamente a la LPAR. Predecible. Ideal para producción con carga constante.

Shared processors

Virtual processors despachados por el hypervisor desde un pool compartido. Configurables como capped (límite fijo) o uncapped(puede tomar CPU libre del pool).

Ejemplo: Una LPAR de desarrollo puede tener 0.2 CPUs (virtual = 1, entitled = 0.2, uncapped). Normalmente usa solo 0.2 de un core, pero si compila algo pesado puede tomar CPU libre del pool compartido temporalmente.

VIOS — Virtual I/O Server

El VIOS es una LPAR especial que corre AIX y actúa como intermediario para virtualizar recursos de I/O (discos y red). Permite que LPARs que no tienen adaptadores físicos propios accedan a almacenamiento y red.

LPAR Producción

Discos virtuales (vSCSI)

Red virtual (vNIC)

LPAR Desarrollo

Discos virtuales (vSCSI)

Red virtual (vNIC)

LPAR Test

Discos virtuales (vSCSI)

Red virtual (vNIC)

VIOS (Virtual I/O Server)

AIX — Adaptadores físicos de disco (SAS/FC) y red (Ethernet)

SAN / Storage

Red física

Ventaja: Podés tener 5 LPARs compartiendo 2 puertos de fibra y 4 puertos Ethernet, todo virtualizado por el VIOS. Esto reduce costos de hardware y simplifica el cableado. Es equivalente a un vSwitch + vSAN en VMware.

HMC — Hardware Management Console

La HMC es una máquina (o VM) separada que corre Linux y se conecta al servidor Power para administrar particiones. Desde la HMC podés:

  • Crear, modificar y eliminar LPARs
  • Asignar y mover recursos dinámicamente (DLPAR)
  • Encender/apagar particiones individuales
  • Ver logs de hardware y alertas
  • Ejecutar Live Partition Mobility (migrar LPAR entre servidores)
  • Actualizar firmware del servidor
  • Acceder a la consola virtual de cada LPAR

Las HMC modernas también ofrecen una REST API para automatización, y existe la opción de HMC Virtual Appliance (vHMC) que corre como VM en lugar de requerir hardware dedicado.

Equivalente x86: Es similar a vCenter para VMware o System Center para Hyper-V, pero dedicada exclusivamente al hardware IBM Power. No es opcional — es la forma principal de gestionar el hardware.

IPL — Initial Program Load

En IBM i, el proceso de arranque se llama IPL (Initial Program Load). No se dice "reboot" sino "hacer un IPL". Es un proceso significativamente más complejo que un boot de Linux porque el sistema reconstruye estructuras internas.

Tipos de IPL

IPL Normal

PWRDWNSYS RESTART(*YES)

Apagado controlado + arranque. Equivalente a shutdown -r. Toma 5-30 minutos según el sistema.

IPL Anormal

Power button / crash

Arranque después de un apagado no controlado. El sistema ejecuta recovery automático (journaling replay). Puede tomar más tiempo.

IPL tipo A

DST/IPL de servicio

Arranca desde copia alternativa del SLIC. Usado por soporte IBM para diagnosticar problemas de SO.

IPL tipo B

Normal

Arranca desde la copia primaria del SLIC. Es el modo normal de operación.

Fases del IPL

Secuencia de arranque

1. Power-on / FirmwareAutotest de hardware, carga del hypervisor
2. Carga del SLICKernel de IBM i — Licensed Internal Code
3. Storage recoveryVerificación de integridad, replay de journals
4. Inicio del SOCarga de objetos del sistema, configuración
5. Arranque de subsistemasQCTL → QINTER, QBATCH, etc.
6. Sistema disponibleSign-on habilitado, trabajos autostart ejecutados
Dato: Muchos sistemas IBM i en producción tienen uptimes de años. Los IPL son eventos planificados (para PTFs que requieren reinicio) y se programan en ventanas de mantenimiento. A diferencia de Windows/Linux, no se necesita reiniciar para la mayoría de cambios de configuración.

Alta disponibilidad y Journaling

Journaling (el equivalente a WAL)

El journaling de IBM i es equivalente al Write-Ahead Log (WAL) de PostgreSQL o al redo log de Oracle. Cada cambio a un archivo/tabla se registra primero en un journal receiver antes de aplicarse.

Flujo de journaling

Aplicación

INSERT/UPDATE

Journal

*JRN objeto

Receiver

*JRNRCV

Tabla

*FILE / PF

El journaling sirve para múltiples propósitos:

  • Recovery: Después de un IPL anormal, el sistema replays los journals para recuperar datos
  • Auditoría: Registro completo de quién cambió qué y cuándo
  • Replicación: Herramientas como MIMIX o iCluster leen journals para replicar datos a otro sistema
  • Commitment control: Transacciones ACID usando journals como redo/undo log

Commitment Control (Transacciones)

IBM i soporta transacciones ACID completas a nivel de SO (no solo de la base de datos). Un commit point puede abarcar múltiples archivos, data areas, y hasta colas de datos.

Clustering y replicación

IBM PowerHA (ISHA)

Clustering nativo de IBM. Switchover de IASPs entre nodos. Puede ser automático o manual.

MIMIX (Precisely)

Replicación basada en journals en tiempo real. El más popular para HA en IBM i.

iCluster (Assure)

Replicación journal-based de Precisely (antes Syncsort/HelpSystems). Replicación de objetos y datos.

Quick-EDD (Assure)

Replicación HA/DR completa: datos, objetos, IFS, config. Rápida instalación y bajo impacto.

System Values

Los System Values son los parámetros de configuración global del sistema. En x86 serían equivalentes a una combinación de sysctl, /etc/security y Group Policy. Hay más de 200.

System ValueDescripciónEjemplo
QSECURITYNivel de seguridad del sistema40 (recomendado)
QCCSIDCoded Character Set ID (encoding)65535 o 37 (EBCDIC)
QMAXSIGNIntentos de login antes de desactivar5
QPWDEXPITVDías para expiración de contraseña90
QMAXSGNACNAcción al superar intentos de login3 (deshabilitar perfil)
QATNPGMPrograma de atención (Ctrl+Attn)*ASSIST
QINACTITVTimeout de inactividad (minutos)60
QDATFMTFormato de fecha*DMY
QTIMSEPSeparador de hora:
QAUDCTLControl de auditoría*AUDLVL *OBJAUD
CL — Gestión de System Values
DSPSYSVAL QSECURITY       Ver el valor actual de QSECURITY
WRKSYSVAL *ALL            Listar todos los system values
CHGSYSVAL QSECURITY VALUE('40')   Cambiar nivel de seguridad
DSPSYSVAL *SEC            Ver todos los de categoría seguridad

Licenciamiento — CPW y P-Groups

El modelo de licenciamiento de IBM i es único. Se basa en la capacidad del procesador, no en el número de usuarios o cores.

CPW — Commercial Processing Workload

CPW es un benchmark propietario de IBM que mide la capacidad de procesamiento comercial (transacciones tipo ERP/negocio). Cada modelo de servidor tiene un CPW rating publicado.

P-Groups (Performance Groups)

IBM agrupa los servidores en P-Groups según su rango de CPW. El costo de licencia del SO y de productos IBM depende del P-Group del servidor.

P-GroupRango CPW aprox.Ejemplo de servidor
P05< 5,000S1012 / S1014 entry
P105,000 – 18,000S1014 / S1022
P2018,000 – 70,000S1022 / S1024
P3070,000 – 250,000E1050
P40250,000 – 1,000,000E1080
P50> 1,000,000E1080 full
Relevancia para esta app: Esta aplicación (cotizador) calcula precios para el producto Assure QuickEDD, cuyo licenciamiento depende del P-Group del servidor del cliente. El CPW del servidor determina el P-Group, que determina el tier de precio.