Windows 10 pot usar més de 4GB de RAM?

Els serveis d'empresa gran com el servidor SQL i el servidor Exchange poden ser bèsties famolencs. Donada l'oportunitat, devoraran tant la RAM com puguis alimentar-les, utilitzant-la per reduir les sol·licituds d'I/O. Aquest tipus de servei s'utilitza sovint en un maquinari de gran Ferro amb l'únic objectiu de permetre-la tornar a terme gratuïtament de la màquina d'acollida el seu treball per a servir clients, preferiblement tant com sigui possible i en el més curt temps possible.

Aquest article ressaltarà les diverses restriccions de memòria que afecten als processos de 32 bits de la plataforma Windows i les solucions que tant Intel· ligència com Microsoft proporcionen per a superar- les mitjançant maquinari, configuració de l' OSM o els canvis de l' API.

Límits de memòria del procés de 32 bits

Quan Windows NT va ser desenvolupat per primera vegada als principis dels anys 90, vas tenir sort de trobar discs durs amb una capacitat sobre 2GB, i va deixar que tot això fos la RAM física. La decisió del disseny inicial va ser dividir l'espai virtual 4GB que cada procés de 32 bits estaria limitat a dos hàlves. Això significa que el 2GB estava reservat pel sistema (o espai del nucli) i 2GB per a l' aplicació (o espai d' usuari). Fins i tot avui aquest límit d'espai d' adreces de 4GB encara està en efecte per als processos de 32 bits. El que han fet els enginyers de Windows és proporcionar una varietat de tècniques per barrejar la relació d' assignació del nucli/ usuari sobre o proporcionar altres API per permetre que les regions de memòria més grans siguin assignades i diferents porcions d' això es mapejan en l' espai del procés en demanda [ RusnosinovichCity name (optional, probably does not need a translation) ].

La major part de la confusió al voltant d' aquest tema particular és degut a les diferències entre els següents límits: l' espai d' adreces virtual que està vinculat a un procés, la quantitat de RAM física que està definit pel maquinari i la memòria virtual basada en disc proporcionat per fitxers de pàgines addicionals. En alguns articles més antics s'utilitzen els termes de l'ArmomiorKey, Wurviutor i l'Exclècia de l'espai, que només composta la confusió. Per tant, per assegurar-me que la consistència a través d'aquest article us oferiré definicions clares d'aquestes restriccions clau.

Processa l' espai d' adreça virtual

Un procés viu en un espai virtual 4GB. Els miralls límits que d'un punter de 32 bits i es considera Xvirtual, perquè el punter de l'adreça no fa referència a la memòria física, però en realitat és una adreça lògica. En comptes d' això, la pàgina que pertany a l' adreça es pot dibuixar a qualsevol lloc dins de la RAM física o fins i tot dins d' un fitxer de pàgina. Aquest és el clàssic de l'Indireccionació a jugar.

Memòria física

Naturalment, aquest és el maquinari que tens dins la teva màquina. Les edicions d' escriptori de Windows només us permeten accedir a 4GB, mentre que el Centre d' edició de dades del servidor Windows dóna suport a 64GB.

Fitxers de pàgina

El disc dur també pot actuar com a magatzem temporal per a pàgines de memòria que no estan actualment en ús. Això s' anomena memòria virtual perquè només es pot usar per a l' emmagatzematge de pàgines 2001- 2009 les pàgines encara han d' estar presents en la memòria física per a que s' hi pugui accedir.

Aquesta mida total de tots els fitxers de treball defineix el límit de memòria virtual per a tota la màquina; això pot ser més petit o més gran que el límit per procés 4GB.

Publica la càrrega (record d'total)

Si obriu el gestor de tasques i mireu a la pestanya libtectionPerformance 2001- KDE, veureu una sèrie de figures de memòria del sistema citats. Un d'ells s'assembla a l'AtxonCommit de la càrrega de l'AKPUTS. Això representa la suma de la RAM física i qualsevol espai assignat a través dels fitxers de pàgina. És la quantitat total de memòria disponible per a tots els processos.

Pàgines de procés reservats

En un procés les pàgines que constitueixen l' espai d' adreces virtual es pot trobar en un dels tres estats: lliure, Reserva o Publicades. Les pàgines lliures són exactament les pàgines de▁pages▁pages de▁pages▁pages que encara s' han d' utilitzar. Les pàgines publicades són aquelles que estan en ús i conten cap a la petjada del procés psture com han de ser retornades pel fitxer de pàgina (per a dades) o la imatge executable (per codi). L' estat intermedi de la reserva és una casa de mig camí usada per posar una regió d'espai d' una adreça a una banda sense forçar l' OSM a publicar qualsevol recurs físic per mantenir- la (excepte per a la alliberament de llibres).

La memòria reservada és una bèstia particularment complicada perquè és invisible en el gestor de tasques degut a que no hi ha cap capital físic, i tanmateix crea contingutió i fragmentació que és difícil observar sense inspeccionar el procés directament.

S' està quedant sense memòria

Bàsicament hi ha dues maneres d'acabar amb la memòria. La primera és ajustar el vostre propi espai virtual per a l' adreça virtual, utilitzant totes les pàgines que hi ha dins, o fer que sigui impossible per al munt de gestor per a trobar pàgines prou contigües de les quals satisfer una sol·licitud d'assignació de memòria. El segon mètode implica consumir tota la memòria disponible del sistema (p. ex. Tan física com virtual) per tal que l' OSM no pugui assignar una pàgina de memòria lliure a qualsevol procés. La implicació de l'últim és que un procés diferent és la causa d'un fracàs d'assignació de memòria que només podríeu ser la víctima.

Per diagnosticar un procés trencant els seus propis límits podeu monitoritzar- lo amb els comptadors privats PERFMON.EXE i veure el procés de processos Virtual Bytes Virtuals i process tectxiu. L' antic representa la quantitat d' espai d' adreces virtual que s' ha assignat per a molts, seccions de fitxers de pàgina, codi executable, etc. L' últim és el nombre de pàgines publicades que representa l' petjada del procés en la memòria total disponible al sistema.

El comptador de bytes privats també es pot veure en el gestor de tasques sota el confús anomenat columna VM Mida de l'ALVI. Explorador de processos alternatius, mitjançant la pestanya Comportament de Propietats, proveeix un sol diàleg per a un procés que conté totes les estadístiques importants de la memòria. No obstant això, utilitza el terme Search Virtual Livure MRegionr-se en lloc de Bytes parrellans. La següent taula traça els termes entre les diverses eines comunes:

Com veurem més endavant, en discutir els mecanismes per trencar la barrera 4GB el nom de la columna Commit 255 es torna menys significatiu, però és una bona aproximació.

La causa exacta de l'esgotament del procés probablement caldrà un examen molt més proper de l'ús actual de pàgina, perquè WinDbg pot ser de gran ajuda. Una altra eina més recent de l'estabilitat dels Sys, anomenada VMMap, també pot ser d'ús. L'últim és més gràfic en la natura que WinDbg és més fàcil per a la visualització.

Determinar que tota la màquina ha pegat a la memòria intermèdia pot ser un assumpte molt més senzill. Porteu la pestanya de rendiment en el gestor de tasques i compareu la càrrega de la publicació de l'AKPeak 2001-2006 a l'UllowLimit danka, si importen el mateix que va obtenir el lloc màxim. Tot i així, les coses comencen a anar malament abans d'aquest punt. Si per exemple, retengeu l' ús molt pesat del fitxer o xarxa I/O, podeu drenar el nombre d' entrades de taula de la pàgina del sistema, que és la piscina de la qual tot flueix. Els indicadors indiquen que els codis d'error Win32 són el 1450 (identificador de recursos del sistema insuficients existeixen per completar el servei sol· licitat 2001- 2004) i 1453 (identificador II, quota insuficient per completar el servei sol· licitat). Perfmon pot ajudar- vos a visualitzar el consum d' aquest recurs vital del sistema mitjançant el comptador d' entrades de la taula de taules del sistema lliure de la pàgina. Si n'heu colpejat cap d'aquestes dues condicions, llavors el vostre problema no serà resolt per cap de les solucions de sota; fins i tot poden empitjorar-ho!

Solucions de pressió de la memòria

Hi ha diverses opcions disponibles per posar remei a un procés de 32 bits que abasta els canvis de configuració simple de l' OSM a canvis arquitectònics mitjançant l' ús de certes API Win32. Portant a 64 bits Windows també s'esmenta aquí, però només s' ha acabat.

S' està basant la recuperació de la configuració

Comencem amb les solucions basades en l' OSMt com no requereixen cap canvi de codi.

L' arrencada /3GB o /USERVA.ini Bandera

Una de les maneres més simples d' incrementar la quantitat de memòria que un procés pot usar a 32 bits Windows és habilitar la /3GB Bandera en el Windows▁offeringrName boot.iniCity name (optional, probably does not need a translation) Fitxer. Aquest té l' efecte d' ajustar l' espai de l' adreça del nucli/ usuari dividit en favor de l' aplicació per 1GB, i. En comptes d'una divisió 2GB/2GB, tenim una divisió 3GB/1GB. La part inferior a això és que l' espai d' adreces del nucli s' halvat de manera que hi ha menys espai per a certes estructures de dades del nucli de claus, com el nombre d' entrades de la taula del sistema de pàgina mencionades abans. La /USERVA La bandera és alternativa a /3GB això permet afinar la relació.

Malauradament aquesta bandera màgica no és bona per si mateixa. L' augment de l' espai d' adreces de l' aplicació vol dir que, de sobte, una aplicació pot començar a tractar amb adreces per sobre de 0x7FFFFFF. Hi ha un punter relatiu a la memòria assignat a sobre d' aquest llindar que pot exposar errors finals que poden portar a una pèrdua subtil de dades en lloc de fallada catastròfica. Per tant, una aplicació o servei ha de declarar- se compatible amb aquest espai d' adreces més gran marcat per la / LARGADESDRSA AREDREDREConstellation name (optional) Bandera a la imatge executable. Aquesta bandera és accessible a través de l' enllaç visual C++ i està exposada per les edicions més tard de l'edició visual Studio IDE en el sistema 2001- 2005, Kenner, Habilita les adreces grans. Per a aplicacions.Net que actualment necessiteu usar un pas de construcció personalitzat que invoca EDITBIN.EXE per posar la bandera.

Per ajudar a provar la compatibilitat de les vostres aplicacions amb les adreces altes hi ha una bandera ( MM_ TOP_ TOP ) que es pot transmetre a VirtualAlloc() per forçar les adreces superiors a assignar abans de les menor (per omissió).

Com a part de la documentació més recent de Microsoft en aquest tema ara usa el terme 4Gbyte Afinament (4GT) [ MSDN ].

Extensions de direcció física (la bota / PAE. Banderaini)

Ampliant l' espai d' adreces virtual d' un únic procés supera una limitació, però hi ha un segon en joc a les finestres de 32 bits que afecta la vostra capacitat d' executar molts d' aquests processos Regionudents, com en un entorn de càlcul de la graella. La quantitat màxima de memòria física que es pot gestionar per Windows també va ser originalment 4GB. Aquest és encara el cas per a les edicions de l' escriptori de 32 bits de Windows, però les variants del servidor són capaces d' adreçar- se a més de la RAM física Urakami fins a 64 GB en l' edició del servidor de dades.

Això s'ha aconseguit utilitzant una tecnologia intel·ligència anomenada Extensions d'adreça física (PAE) que s'ha introduït amb el Pentiu Pro. Afegeix una capa extra al mecanisme de taula de pàgines i amplia les entrades de 32 bits a 64 bits per tal que fins a 128GB es pugui abordar teòricament.

La introducció de PE vol dir que els controladors del nucli també s'haurien exposat a adreces físiques per sobre de la barrera 4GB, una cosa que potser no s'han provat originalment. Windows intenta mantenir la memòria intermèdia sota el límit de la fiabilitat de la 4GB, però una vegada més l' habilitat de la característica ha de ser un directori conscient aquesta vegada a través de la /PAE commuta també en boot.iniCity name (optional, probably does not need a translation) . Si el maquinari del servidor accepta per omissió Afegeix memòria calenta aquesta bandera està habilitada.

El perill de /3GB i /PAE

Com sempre hi ha un cost per habilitar això i l'índex de taula de pàgina de 10 bits a 9 bits via /PAE Significa que hi ha la meitat de les entrades de taula de pàgina del sistema disponibles per a l' ús. Si el combines amb la /3GB La bandera que haureu reduït significativament aquest recurs i podeu veure el servidor s' esforceu malament amb la càrrega d' E/O, i. Podríeu començar a veure aquells errors de 1450 i 1453 anteriors.

L'altra baixa principal és l'adaptador de vídeo [ Chen ], però això és sovint de petites conseqüències com a servidors d'aplicacions no són generalment famosos per a les seves habilitats de joc. Per descomptat, l'augment en unitats de processament gràfic general (GPGPU) posa una rotació diferent a l'ús d'aquest maquinari en servidors moderns.

Usar les finestres de 64 bits per executar un procés de 32 bits

Naturalment tot això /3GB i /PAE Les ximpleries desapareixen sota 64 bits Windows com l' espai total del sistema és massiu per comparació. Tot i que en teoria hi ha 64 bits per jugar, les limitacions de l'aplicació signifiquen que en realitat només hi ha 48 bits per treballar. Encara, 256 TB n'haurien de tenir prou per a ningú?

Però, el Windows de 64 bits també beneficia els processos de 64 bits; l'arquitectura també canvia la disposició espacial de l' adreça per als processos de 32 bits. L' espai d' adreces del nucli ara viu molt més amunt deixant tota la regió 4GB per a que l' aplicació coincideixi (assumint que la vostra imatge està marcada amb la / LARGADESDRSA AREDREDREConstellation name (optional) Bandera com abans).

Recompant- se per 64 bits

La solució òbvia a tots aquests shangans podria ser simplement per recompil·lar la teva aplicació com a procés de 64 bits. Millor, encara, si ho reescriure en.Net teniu l'habilitat de executar- lo com a un procés de 32 bits o 64 bits com a apropiat sense feina extra. Però això mai és tan senzill...

Hi ha molts problemes que fan un port a una arquitectura de 64 bits no proporcional, tant en el nivell del codi font com degut a les dependències externes. Entendre el teu punter, l'aritmètica és el so i que qualsevol codi persisteix és l'agnòstic de mida dues de les àrees principals més sovint escrites. Però també necessiteu veure aquelles biblioteques 3r festa i components com a procés de 64 bits no pot acollir un DLL de 32 bits, com un servidor inproc COM.

El maquinari i el sistema operatiu també es comportaran d'una altra manera. Hi ha un munt de Manveengotcs que esperen atrapar-te durant el desplegament i les operacions. En el món corporatiu de 32 bits els escriptoris Windows encara són probablement la norma amb 64 bits Windows convertint- se en la norma en l' espai del servidor. Així doncs, mentre que les edicions de 64 bits del servidor SQL i Exchange estan ben llitdes, les aplicacions personalitzades encara es desenvolupen en una plataforma diferent.

Memòria utilitzable

Tenir un espai d'adreça d'usuari de 2, 3, o fins i tot 4 GB no vol dir, per descomptat, que podeu usar tots els últims grams. Vostè té piles de fil i seccions d'imatges executables traient trossos. A més, si useu C++ i COM teniu com a mínim dos munts de competència, els dos dels quals hauran de pagar qualsevol descriptor d' adreça virtual (VAD) que puguin reservar, i independentment de si estan en ús o no. Llança' t a l' espai de fragmentació de l' espai de l' espai de fragmentació de l' espai de l' ekaS, i us garantiteu bastant (a no ser que\\ {@} hagueu marcat específicament els requeriments de memòria de l' aplicació) per obtenir menys del que heu negociat.

La taula següent descriu les meves experiències de les diferències entre la memòria màxima i realista d' ús per a un procés que fa ús general tant de la COM com dels munts de CRT:-

Aquest tipus d'informació és útil si voleu afinar la mida de qualsevol cau, o si necessiteu processar el reciclatge com en una graella o escenaris per a màquines web. Per a veure la quantitat d' espai d' adreces virtual que s' usa per un procés podeu veure el comptador de Bytes VirtualfsPerfmon com es descriu abans.

Estén la seva petjada sobre 4GB

Els que van passar per la transició de 16 bits a 32 bits no tindran cap dubte que el risc/reward per a portar una aplicació de marge que només és necessita una petita sala de cap pot no ser suficient per justificar el cost i el potencial canvis a distància.

Si a la mateixa màquina us cau cau la memòria cau, i no us importa que el procés vagi fora de la mateixa màquina (o fins i tot fent una trucada remota) llavors hi ha algun nombre de productes fora de la línia de seguretat a l'espai NOSQL, com ara la font lliure basada en Mecamed. No obstant això, si esteu cercant fer alguna cosa vosaltres mateixos i voleu evitar dependències addicionals, o necessiteu fer un rendiment més a prop de la cau del procés, llavors hi ha dues opcions: l' adreça de finestres i la memòria compartida.

El que cal tenir en ment és que no és possible superar el límit de l'espai de la llibreta d' adreces de 4 GB, però el que els dos mecanismes permeten és la capacitat de desar i accedir a més de 4GB memòria molt ràpidament ® no tot exactament al mateix temps.

Extensions de finestra d' adreces (Apareixerà)

Windows 2000 va veure l' afegit d'un nou API escollit específicament en aquest problema, i és l'únic servidor SQL que utilitza. L' API d' AWWE està dissenyada únicament amb rendiment en ment i proporciona l' habilitat per assignar i formar part de l'espai d' adreça física en un procés. Com que el nom implica que no podeu accedir directament a tot el que la memòria en un sol go però ha de crear windows de windows de windows d' escriptori en seccions d' ell com a i quan calgui. El nombre i la mida de les finestres que podeu fer mapa en qualsevol moment encara està lligat efectivament pel límit del procés 4GB.

Degut a la manera en què el treball d' inici hi ha algunes restriccions a la memòria que són assignades:

  • La memòria no té pàgines.
  • L' aplicació s' ha de concedir a les pàgines de l' arc a la memòria Privilgeaka.

Les funcions API us permeten assignar memòria com a pàgines en brut (com indicades per l' ús del terme Page Números de fotogrames) aquest és la mateixa estructura que usa el nucli. Sol· licituds per a un subconjunt d' aquestes pàgines que es mapejan en una regió de l' espai virtual restrictat per aconseguir- hi accés, usant els números del marc de pàgina prèviament retornats.

Per als serveis com ara Servidor SQL i Exchange Server, que sovint són donats a tota una màquina, aquesta API els permet fer l' ús més òptim dels recursos disponibles en el proviso que la memòria mai serà publicada.

Memòria compartida amb el fitxer de pàgina

Hi ha una altra manera d' accedir a tota aquesta memòria extra usant les API de Windows existents d' una manera similar al mecanisme d' ordres, però sense moltes de les seves limitacions: Memòria compartida. A part de no necessitar cap privilegis extra de la memòria assignada també es pot agrupar que sigui útil per a una futura pujada transitoria o per explotar l' algorisme de recerca que ja proporciona l' OSM.

S' està localitzant la memòria compartida sota Windows és la feina de la mateixa API usada per als fitxers amb memòria. En essència el que esteu traçant és una part d' un fitxer, tot i que no una aplicació definida sinó una part del fitxer de pàgina de sistema Alexsons. Això s'ha aconseguit passant. INVALID_ HANDLE_ VALUE en comptes d' un gestor de fitxers real a Crea un mapa de fitxers() . Llistat 1 crea un segment compartit de 1MB.

En aquest punt, hem assignat un tros de memòria del sistema, però no podem accedir-hi. Més important encara que també hem consumit qualsevol de les nostres adreces. Per llegir i escriure- hi hem de traçar una porció (o tot) d'ella a l'espai de la nostra adreça, amb la qual fem amb MapaViewDeFile() . Quan haguem acabat, podem tornar a alliberar l'espai d'adreça. UnmapViewOfFile() . Continuant el nostre exemple, necessitem el codi de llistat 2 per accedir al segment compartit.

Cada vegada que necessitem accedir al segment que acabem de mapa una vista, accedir-hi i deixar-ne un mapa una altra vegada. Quan l'aspiritzem completament, podem alliberar la memòria del sistema, amb la trucada habitual. Close Madel() .

Limitacions dels segments de memòria compartits

Aquesta aproximació no és sense les seves pròpies restriccions, ja que qualsevol que hagi usat VirtualAlloc() Ho sabrà. Tal i com amb una assignació normal de la mida actual s' arrodoneix fins a cert punt per a coincidir amb la mida de pàgina subjacent. Tot i això, el que és més restrictiu és que lafina de la finestra d' mainwindow, mapau per accedir al segment (via) MapaViewDeFile ) ha de començar en un desplaçament que és un múltiple de la granularitat Bibtexml. Això és normalment 64K i es pot obtenir trucant Obtén l'Info del sistema() . La longitud pot ser qualsevol mida i s' arrodoneix fins al límit de pàgina més proper. Això bastant garanteix que Umbrello només és útil amb trossos més grans de dades.

Un problema més subtil pot sorgir si no trobeu les trucades a MapaViewDeFile amb aquells a UnmapViewOfFile . Cada crida a MapaViewDeFile xoca el compte de referència de la nansa de segment subjacent i crida així Tanca el Maderle No alliberarà el segment si encara hi ha cap vista mapa. Si es deixa sense marcar, això podria crear un got de memòria totpoderós que seria interessant per rastrejar.

A part de les limitacions de l' API també hi ha el problema de no ser capaç de permetre la memòria cau o desar els punters en brut a les dades fora o dins del bloc de memòria que heu d' usar o emmagatzemar desplaçaments. L' adreça base de cada vista només és vàlida mentre la vista està mapada per tal que s' hagi de tenir cura per evitar els punters que es penja.

Una altra efecte operacional d'aquesta tècnica sobre la qual heu d'avisar els administradors del vostre sistema és l'augment massiva en els defectes de les pàgines que veuran en les estadístiques del procés. El que han d'entendre és que probablement aquestes són només els defectes de l'YPUTS, on una pàgina física està mapejada en un procés i no pas una culpa d'Ahberthard, on es produeix un accés al disc també. Tot i que el segment està oficialment retractat pel fitxer de pàgina del sistema si hi ha prou RAM física que existeix la pàgina mai s' hauria d' escriure al disc i per tant ofereix una excel· lent actuació.

Ús real del món

He utilitzat prèviament segments de memòria compartida molt amb èxit en dos serveis de xarxa de 32 bits que van dur a terme junt amb altres serveis en un servidor Windows 2003 de 64 bits. Un d'ells va emmagatzemar a 16 GB de dades sense efectes secundaris indeguda, fins i tot quan transitori carregava el límit de la RAM física i va ocórrer alguns petits períodes.

Il·lusionisme actualment treballa en un sistema basat en elNet que depèn d' una biblioteca nativa de 32 bits i ha marcat la tècnica una altra vegada com a un mètode de problemes que s' han causat per una gran bombolla interna temporal de dades.

Projecte de recerca sense cau de serveis

L' habilitat de desar dades en memòria compartida, que és una referència efectiva comptada per l' OSM, ha proporcionat la base per a un mecanisme de prototips que permetria múltiples processos ANSIs executant- se en la mateixa màquina al cau de dades comuns sense necessitat d' un procés de servei separat per actuar com a portal. Això evitaria la duplicació massiva de les dades de la memòria cau per a cada procés, que, com a nombre de CPU (i per tant processos de motor) augmentaria l' ús més eficient de tota la piscina del sistema RAM.

El mecanisme era bastant simple. En comptes de cada procés de motor desant les seves grans bombolles de dades comunes en memòria privada, seria desat en un segment compartit (vertit per un nom d' objecte determinant) i basat en demanda. L' ús de similar (determinalment) anomenat sincronització dels objectes assegura que només un motor necessita per demanar les dades des de dalt a la sortida i l' existència d' una bombolla de memòria cau local també es pot detectar fàcilment. Això es va fer explotant el fet que la creació d' un objecte amb el mateix nom que un altre èxit i retorna l' error especial ERROR_ REUL_ EXISTISTS .

La idea va ser prototipal però mai va usar en producció tan lluny com jo sé.

Resum

Aquest article proporciona un nombre de tècniques per a il· lustrar com un procés Windows de 32 bits pot accedir a més memòria que el valor per omissió 2GB. Aquests ajustaments abastats dels canvis de configuració que inclouen el /3GB i /PAE banderes a través de la AWE i API de la memòria compartida. Al llarg de la manera en què va ajudar a explicar algunes de la terminologia i va mostrar com ajudar a diagnosticar problemes d'esgotament de la memòria.

Crèdits

Gràcies a Matthew Wilson per a reordenar i comentar sobre el meu primer projecte, i a Franças Buon tempo per a la seva valuosa retroalimentació i encoratjament.

Artículos Relacionados:

- Memòria RAM -

Esta web usa cookies, puedes ver la política de cookies, aquí -
Política de cookies +