IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

Compilateur JIT avec OS sans disque dur


Sujet :

Embarqué

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut Compilateur JIT avec OS sans disque dur
    Salut
    -----

    J'envisage une application sur base d'une carte genre pandaboard (pour donner un exemple concret) sur lequel tournerait un Linux + Xenomai installé sur carte SD.

    Il s'agit de mémoire flash, donc la durée de vie en écriture est limitée, et donc on ne peut pas y écrire à répétition comme sur un HD.

    Ma question est simple : si j'utilise un langage utilisant un compilateur JIT (Java ou C#/Mono), ce JIT va-t-il écrire sur la carte SD à chaque exécution du programme... ou la compilation sera-t-elle unique tant qu'on ne change pas le programme?

    Question subsidiaire : Je ne connais pas bien Java, si je l'utilise, puis-je compiler pour obtenir du code natif et non du code IL, ce qui me permettrait d'éviter le JIT?

    Merci d'avance,
    Claude

  2. #2
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 680
    Points
    680
    Par défaut
    Normalement, si je dit pas de conneries le JIT vas compiler les blocs de programmes uniquement quand ceux-ci sont requis, mais, par contre, je ne sais pas si tu peux forcer la compile unique au démarrage du logiciel.

    Pour java le code natif c'est du JAR, donc oui ça existe, par contre, je ne fait pas de java donc je vais pas pouvoir trop t'aider sur ce point.

  3. #3
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    la question est surtout de savoir s'il ne va faire du JIT qu'en Ram, ou s'il va devoir swaper... question qui ne se pose pas tellement sur des environnements classiques


    sinon il y a moyen de désactiver le JIT... voire d'utiliser des machines virtuelles alternatives, plus adaptées à l'embarqué en Java

    exemples
    • mono et --full-aot
    • Sun Java et -Xint
    • Java via la Sun KVM, la JVM Esmertec et son DAC, etc
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Salut
    -----

    La question est surtout de savoir s'il ne va faire du JIT qu'en Ram, ou s'il va devoir swaper... question qui ne se pose pas tellement sur des environnements classiques
    Oui, c'est exactement ça.
    J'ai besoin de pouvoir créer une solution où il n'y a pas d'écriture disque, ou alors uniquement lors de la première exécution.

    J'aimerais aussi pouvoir utiliser C# en mono, et de nouveau les mêmes questions se posent.

    Comme tu l'indiques ce sont des interrogations qui n'intéressent personne... tant qu'on ne se retrouve pas avec ce genre de contraintes, et donc les réponses ne sont pas simples à dénicher

    A+
    Claude

  5. #5
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 680
    Points
    680
    Par défaut
    Bonjour,

    Je dirais que ça vas surtout dépendre de ton OS.

    Par exemple, sous Android, il y a un compilateur JIT cependant, par defaut, la plateforme n'a pas forcement une carte SD de rattachée, pourtant le JIT fonctionne quand même.

    D'intuition je dirais que le JIT vas fonctionner en RAM quitte à ce créer un ramdisk pour le cache temporaire.

    Pour moi, pas de souci vis à vis de la carte SD.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Salut
    -----

    Merci pour ces précisions.

    Le choix ne sera probablement pas Android car la carte ne contiendra aucun afficheur type "GSM" ou "tablette", mais fonctionnera sans écran, avec possibilité de connecter en cas de mise à jour un écran "standard". Ce sera donc probablement un Linux "standard".

    Partant de là, une question m'interpelle :

    Comment le compilateur JIT sait-il qu'il tourne sur une flash ou sur un HD? En effet, s'il se comporte différemment ça doit être signalé quelque part?


    A+
    Claude

  7. #7
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 680
    Points
    680
    Par défaut
    A mon avis, le compilateur ne sais pas ou il se trouve, cependant l'OS oui.
    Donc si tu fait tourner ton OS en RAM c'est bon.

    Après, j'avoue que je ne connais pas Java et JIT plus que ça donc...

    Pour le coups, ton problème devrait être facile à résoudre pour quelqu'un qui fait du Java et qui utilise JIT, pas forcement que en embarqué.

    Sinon, je connais quelqu'un qui developpe pas mal sous Android, du cout je peux lui demander de passer jeter un oeil.

    Même si tu développe pas sous Android, Java c'est Java et JIT bah pareil

  8. #8
    Membre habitué Avatar de monnoliv
    Homme Profil pro
    Opticien-ébéniste: lunettes de WC
    Inscrit en
    Août 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opticien-ébéniste: lunettes de WC

    Informations forums :
    Inscription : Août 2003
    Messages : 139
    Points : 195
    Points
    195
    Par défaut
    Pourquoi ne pas créer un ramdisk e tout faire en RAM?
    IoT CC3200, ESP8266
    8051, ARM Cortex-M (forever)/Cortex A (TI, Silabs, NXP), FPGA, Bare Metal Raspberry-PI programming
    VHDL-ALTERA-XILINX

  9. #9
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 680
    Points
    680
    Par défaut
    C'est ce que je lui proposai comme solution plus haut.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Salut
    -----

    Donc si tu fait tourner ton OS en RAM c'est bon.
    Oui, mais la RAM est une ressource limitée en embarqué, et la RAM je vais devoir en réserver une bonne partie pour un programme qui va, lui, tourner en temps réel sous Xenomai. Si je peux économiser la RAM, c'est tout bénéfice pour moi : l'OS en RAM c'est plus simple, évidemment, mais c'est la solution de consommation maxi.

    Sinon, je connais quelqu'un qui developpe pas mal sous Android, du cout je peux lui demander de passer jeter un oeil.
    Merci.

    En fait, une partie sera codée en Java (pas par moi), mais une autre en C# (par moi) sous Mono, il y a donc 2 JIT, d'où ma question de départ.

    La flash est en lecture/écriture, ce n'est pas grave si au premier lancement de l'application ça compile et ça écrit, ce que je veux vérifier c'est si ça écrit en permanence à chaque lancement de l'application (destruction de la flash), ou une seule fois lors de la toute première exécution (ça, c'est bon).

    A+
    Claude

  11. #11
    Membre habitué Avatar de monnoliv
    Homme Profil pro
    Opticien-ébéniste: lunettes de WC
    Inscrit en
    Août 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opticien-ébéniste: lunettes de WC

    Informations forums :
    Inscription : Août 2003
    Messages : 139
    Points : 195
    Points
    195
    Par défaut
    Hum, petit calcul: supposons que ton prg est executé 10x par jour, une flash tient 100000 réécriture, donc tu en as pour 100000/365/10 = 27 ans c'est pas mal pour commencer. Ceux qui utilisent des SSD ont moins de scrupules (mais il est vrai que les contrôleurs SSD optimisent les accès et évitent d'écrire toujours sur les mêmes blocs flash).
    IoT CC3200, ESP8266
    8051, ARM Cortex-M (forever)/Cortex A (TI, Silabs, NXP), FPGA, Bare Metal Raspberry-PI programming
    VHDL-ALTERA-XILINX

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Salut
    -----

    Hum, petit calcul: supposons que ton prg est executé 10x par jour, une flash tient 100000 réécriture, donc tu en as pour 100000/365/10 = 27 ans c'est pas mal pour commencer.
    C'est clair, je suis bien d'accord.

    C'est juste que les logiciels vont tourner en permanence (la carte sera sous tension 24H/24 365 jours/an. Et vu que j'ignore tout de la façon dont le JIT va se comporter en écriture dans la mémoire programme j'essaye de comprendre pour évaluer au maximum ce qui va se passer en pratique.

    J'essaye en fait de savoir si, en installant un nouveau soft :

    1) A chaque première utilisation d'une partie du code, le JIT compile, sauve la partie compilée en mémoire programme, et du coup ne recompile jamais plus tant qu'on ne modifie pas le code en question.

    2) Ou si le Jit compile à la première utilisation du code du programme lancé, mais doit recommencer la compilation si on stoppe le programme puis qu'on le relance.

    Exprimé autrement : la compilation effectuée par le JIT est-elle permanente ou valable pour une seule exécution du programme?

    C'est un projet qui sera open-source et qui devrait en principe être repris par une communauté à terme. Je ne voudrais pas poser les bases de quelque chose de caduc.

    Si la réponse est "1", alors aucun soucis.
    Si la réponse est "2", j'ai plutôt intérêt à essayer de compiler en natif, ou alors de laisser les programmes en service sans les lancer à la demande.

    En tout cas, c'est sympa de me répondre, merci


    A+
    Claude

  13. #13
    Membre habitué Avatar de monnoliv
    Homme Profil pro
    Opticien-ébéniste: lunettes de WC
    Inscrit en
    Août 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opticien-ébéniste: lunettes de WC

    Informations forums :
    Inscription : Août 2003
    Messages : 139
    Points : 195
    Points
    195
    Par défaut
    En ce qui concerne C#, il me semble avoir vu une option qui permet de compiler le code directement en code assembleur (qui dépend du processeur donc) et non pas en code intermédiaire.
    Il doit bien avoir cette sorte d'option pour toi, non? Faut peut-être poser la question dans le forum Java (en lisant les posts de ce fil, je m'aperçois qu'on en revient au début ) ?
    Bonne chance
    IoT CC3200, ESP8266
    8051, ARM Cortex-M (forever)/Cortex A (TI, Silabs, NXP), FPGA, Bare Metal Raspberry-PI programming
    VHDL-ALTERA-XILINX

  14. #14
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 680
    Points
    680
    Par défaut
    Bien, apparemment, sur du x86 et sous des outils microsoft, ça donne une compile puis c'est fini.

    http://www.google.fr/url?sa=t&source...A2akd-MHr4pMiw

    Et sinon, sur le fonctionnement de JIT en lui meme y'a pas grand chose à par des definitions :/

    Edit: Et meme là, y'a pas grand chose http://jmdoudoux.developpez.com/cour...-jvm.php#jvm-5

  15. #15
    Membre habitué Avatar de monnoliv
    Homme Profil pro
    Opticien-ébéniste: lunettes de WC
    Inscrit en
    Août 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opticien-ébéniste: lunettes de WC

    Informations forums :
    Inscription : Août 2003
    Messages : 139
    Points : 195
    Points
    195
    Par défaut
    J'ai trouvé ça, le Native Image Generator:
    http://en.wikipedia.org/wiki/Native_Image_Generator
    IoT CC3200, ESP8266
    8051, ARM Cortex-M (forever)/Cortex A (TI, Silabs, NXP), FPGA, Bare Metal Raspberry-PI programming
    VHDL-ALTERA-XILINX

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Salut
    -----

    Merci pour l'aide.

    Je vais lire les documents pointés, et éventuellement partir de là pour un complément d'informations.

    A+
    Claude

  17. #17
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    comme dit plus haut, le plus simple si vraiment tu as peur de cette éventualité est d'avoir ton root en read-only, et un /var en ramdisk (tmpfs ?)
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Salut
    -----
    comme dit plus haut, le plus simple si vraiment tu as peur de cette éventualité est d'avoir ton root en read-only, et un /var en ramdisk
    Oui c'est clair qu'il reste cette possibilité.

    D'après ce que j'ai lu ces jours-ci, en lisant "en filigranes", le code machine serait conservé tant qu'on ne modifie pas l'application.

    Du coup, je doit d'abord commander la carte (en rupture de stock), et une fois reçue, je vais expérimenter en pratique comment se comporte le JIT dans cet environnement (en JAVA et en Dotnet sous Mono).

    Ensuite, je ressortirai ce sujet et je viendrai y dire ce que j'ai constaté dans la pratique, je suis certain que ça servirais à d'autres.

    En tout cas, merci des informations

    A+
    Claude

  19. #19
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par ClaudeBg Voir le message
    Salut,
    Du coup, je doit d'abord commander la carte (en rupture de stock)

    En tout cas, merci des informations

    A+
    Claude
    Tu serais pas en train de commander une pandaboard par hasard?

  20. #20
    Membre éprouvé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Points : 1 214
    Points
    1 214
    Par défaut
    Je suis quasiment certain d'avoir lu quelque part (et sur MSDN j'en suis sûr), que pour l'éxécution de code MSIL (et donc C# compilé), le CLR ne fait pas tout le temps appel au JIT compiler, mais qu'il garde en cache, soit des morceaux de l'application qu'il avait linké auparavant, soit qu'il génére à chaque éxécution le code natif dans le cache, soit qu'il met en cache "définitivement" l'application, suivant les options de compilation.
    Le but de l'article était de dire que par ce mécanisme, on arrivait à garder une rapidité identique à un programme classique compilé en natif, sauf à la première éxecution qui génère le code natif dans le cache.

    Bien entendu, je ne retrouve plus ce lien . Cependant ça reste du MSDN, donc il faut voir comment mono gère son JIT si jamais tu souhaite utiliser Linux.

    Sinon, la doc pour NGen et le JIT compiler : http://msdn.microsoft.com/en-us/library/ht8ecch6.aspx

    The magic of Opera, La magie de l'Opera
    The mysteries of Space Opera, Les mystères de l'Opera Spatial
    Mr. Know-it-all, M. Je-Sais-Tout
    Prelude in C sharp minor, the most beautiful piano song and the best C sharp prelude ever, Prélude en do dièse mineur, le plus beau morceau de piano et le meilleur prélude au C#
    The Mesmerizing Saphir Division for Nerds, L'Hypnotisante Division Saphire pour les Nerds (HDSN)

Discussions similaires

  1. mon disque dur avec icone de réseau san fil
    Par devlopassion dans le forum Windows XP
    Réponses: 0
    Dernier message: 10/01/2009, 12h13
  2. Booter sans disque dur
    Par ArHacKnIdE dans le forum Administration système
    Réponses: 15
    Dernier message: 26/05/2006, 11h35
  3. Conseil achat disque dur externe avec TV ?
    Par elitost dans le forum Périphériques
    Réponses: 8
    Dernier message: 02/03/2006, 16h50
  4. Problème avec le disque dur esclave.
    Par JavaAcro dans le forum Composants
    Réponses: 1
    Dernier message: 20/12/2005, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo