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

Hardware Discussion :

Un coprocesseur pour accélérer les ramasse-miettes


Sujet :

Hardware

  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 668
    Points : 188 678
    Points
    188 678
    Par défaut Un coprocesseur pour accélérer les ramasse-miettes
    Un reproche régulièrement fait aux langages comme Java ou C# est que la gestion de la mémoire n'est pas effectuée par le programmeur, contrairement au C ou au C++. Le développement est beaucoup plus simple, au prix de l'ajout d'une pièce très lourde à l'exécution : un ramasse-miettes. Celui-ci cherche régulièrement les bouts de mémoire qui peuvent être libérés, car plus utilisés, sans quoi le programme utilise de plus en plus de mémoire et finit par bloquer l'ordinateur. Selon certaines estimations, un programme peut passer jusqu'à une dizaine de pour cent de son temps d'exécution sur le ramasse-miettes ! Certes, cette estimation ne tient pas compte du temps à l'exécution que prendrait une gestion manuelle de la mémoire, mais le chiffre reste intéressant.

    Que peut-on faire pour améliorer la situation ? Les processeurs actuels ne sont pas vraiment prévus pour les opérations de nettoyage de la mémoire. Une idée est d'ajouter un petit coprocesseur qui exécuterait uniquement le ramasse-miettes. Ce dernier pourrait n'utiliser que peu de transistors et d'énergie, mais aussi s'exécuter en parallèle. Il pourrait aussi être intégré au plus proche de la mémoire, ce qui diminuerait la consommation d'énergie en transfert de données.

    Selon les tests effectués (un tel accélérateur intégré à un processeur RocketChip RISC-V), une telle puce pourrait être utilisée pour des ramasse-miettes bloquants ou non. En l'utilisant dans une machine virtuelle Java (JikesRVM), il serait possible d'accélérer les opérations de gestion de la mémoire d'un facteur quatre ! La réduction de consommation d'énergie, avec ce prototype, est de quinze pour cent, en utilisant moins de vingt pour cent de la surface d'un cœur de calcul.

    Voir aussi : A Hardware Accelerator for Tracing Garbage Collection.

    Source : For Better Computing, Liberate CPUs From Garbage Collection.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur backend junior - Symfony
    Inscrit en
    Janvier 2018
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Développeur backend junior - Symfony
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2018
    Messages : 325
    Points : 804
    Points
    804
    Par défaut
    Il y a peut être une solution hardware à ce problème qui s'accentue mais il faut aussi continuer le travail d'optimisation du ramasse-miette de la part des éditeurs pour ainsi limiter le problème.

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    Graphic Programmer
    Inscrit en
    Mars 2006
    Messages
    1 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Graphic Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 583
    Points : 4 066
    Points
    4 066
    Par défaut
    moi ce que je trouvait le plus dommageable avec les ramasses miette c# et java, c'est qu'il se déclenchent quand ils veulent.

    l'utilisateur n'a aucun contrôle sur CA. et pourtant il y a des moment ou c'est pas le moment.

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Citation Envoyé par Aiekick Voir le message
    moi ce que je trouvait le plus dommageable avec les ramasses miette c# et java, c'est qu'il se déclenchent quand ils veulent.

    l'utilisateur n'a aucun contrôle sur CA. et pourtant il y a des moment ou c'est pas le moment.
    Cela fait longtemps que je n'ai fais ni Java ni C#, mais n'y a-t-il pas des fonctions du type gc.collect() ou de la définition de code atomique (dans lequel le gc ne sera pas appelé) ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Aiekick Voir le message
    moi ce que je trouvait le plus dommageable avec les ramasses miette c# et java, c'est qu'il se déclenchent quand ils veulent.

    l'utilisateur n'a aucun contrôle sur CA. et pourtant il y a des moment ou c'est pas le moment.
    On peut plus ou moins contrôler le GC en C# avec GC.Collect(), par exemple.
    On peut aussi empêcher le GC d'agir pendant sur une partie du code avec "GC.TryStartNoGCRegion()" et "GC.EndNoGCRegion()" bien que je n'ai jamais testé ces méthodes.

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur backend junior - Symfony
    Inscrit en
    Janvier 2018
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Développeur backend junior - Symfony
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2018
    Messages : 325
    Points : 804
    Points
    804
    Par défaut
    Citation Envoyé par olvini3 Voir le message
    On peut plus ou moins contrôler le GC en C# avec GC.Collect(), par exemple.
    On peut aussi empêcher le GC d'agir pendant sur une partie du code avec "GC.TryStartNoGCRegion()" et "GC.EndNoGCRegion()" bien que je n'ai jamais testé ces méthodes.
    Cela ne tue pas un des intérêts des langages comme le C# d'empêcher le garbage collector de faire sa vie (je parle en terme de technicité) ?

  7. #7
    Membre à l'essai
    Profil pro
    Intégrateur
    Inscrit en
    Décembre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2008
    Messages : 111
    Points : 18
    Points
    18
    Par défaut GC en Java
    Le GC reste toujours customisable en java :

    https://www.cubrid.org/blog/how-to-t...ge-collection/

    Moustic

  8. #8
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    J'ai deux visions pour ma part.

    La première qui se dit qu'un ramasse miette c'est une bêtise... A trop vouloir décharger de la compétence du développeur on se retrouve avec des usines à gaz.
    Et là je vois cela comme : comment peut-on optimiser notre usine à gaz.

    La seconde qui se dit qu'un ramasse miette qui se lance n'importe quand c'est pas vraiment tiptop niveau gestion du process et des ressources (même si on ne gère déjà pas une partie des ressources : mémoire).
    De ce fait un co-processeur pour lui dédier la charge d'exécution du ramasse miette est une très bonne idée.
    Cela rejoint tout à fait le rôle des coprocesseurs de communication pour gérer les uarts et autre par exemple.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2018
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 134
    Points : 0
    Points
    0
    Par défaut
    Ce qui fera autant de silicium de moins pour le reste. Tout ça parce que gérer ses allocations mémoire c tro dur.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    468
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 468
    Points : 682
    Points
    682
    Par défaut
    Si ce coprocesseur apporterait un réel avantage pour libérer de la mémoire… même pour des langages sans ramasse-miette… alors pourquoi pas.

    Cependant il serait aussi judicieux des faire évoluer les langages (tel C# ou C++) pour permettre une gestion de la mémoire plus poussée et plus sécurisée à l'instar de Rust.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 668
    Points : 10 669
    Points
    10 669
    Par défaut
    Citation Envoyé par ijk-ref Voir le message
    Cependant il serait aussi judicieux des faire évoluer les langages (tel C# ou C++) pour permettre une gestion de la mémoire plus pousser et plus sécurisé à l'instar de Rust.
    Le projet Midori de Microsoft peut/ pouvait rendre obsolète cette approche

    En gros, un processus c'est une boîte noire avec son code, sa mémoire.
    Si un processus veut utiliser des resources ou communiquer avec un service/ processus/ dlls/ ..., il passe par un système de contrat.
    Et enfin, il y avait une histoire de langages/ codes sûrs (comme le C#) et ceux pas sûrs (comme le C/ C++). Et les codes sûrs tournent en ring 1 et ceux pas sûrs en ring utilisateur

  12. #12
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Consultant informatique industrielle, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique industrielle, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 138
    Points : 5 906
    Points
    5 906
    Par défaut
    Citation Envoyé par foetus Voir le message
    En gros, un processus c'est une boîte noire avec son code, sa mémoire.
    Si un processus veut utiliser des resources ou communiquer avec un service/ processus/ dlls/ ..., il passe par un système de contrat.
    Je vois pas trop le rapport avec le garbage collector... Et en développement quand un processus devient une boite noire on commence à avoir des problèmes...

  13. #13
    Candidat au Club
    Homme Profil pro
    XYZ
    Inscrit en
    Juillet 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : XYZ
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Petit //
    Ne pas faire le ménage - Ne pas vider la poubelle

    => embaucher une personne pour faire le ménage @ home, ça coûte cher

    => utiliser une usine à gaz en informatique, pas gratuit non plus...

    /troll on
    les informaticiens ne font pas le ménage chez eux?
    pourquoi le faire en informatique?
    /troll off

  14. #14
    Membre extrêmement actif
    Homme Profil pro
    Graphic Programmer
    Inscrit en
    Mars 2006
    Messages
    1 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Graphic Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 583
    Points : 4 066
    Points
    4 066
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Cela fait longtemps que je n'ai fais ni Java ni C#, mais n'y a-t-il pas des fonctions du type gc.collect() ou de la définition de code atomique (dans lequel le gc ne sera pas appelé) ?
    c'est cool, je ne savais pas que ça avait été ajouté. je vais peu être re regardé ca de pres du coup

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 668
    Points : 10 669
    Points
    10 669
    Par défaut
    Citation Envoyé par sergio_is_back Voir le message
    Je vois pas trop le rapport avec le garbage collector... Et en développement quand un processus devient une boite noire on commence à avoir des problèmes...
    Le rapport doit être extrapolé

    Avec ce projet, c'est le compilateur qui faisait des vérifications systèmes (par exemple type et taille des données à échanger lors d'un contrat). D'où la notion de code sûr/ code pas sûr.
    Et donc un code pas sûr été [+ ou -] virtualisé en ring utilisateur. Ceci permet la rétrocompatibilité ... au prix éventuellement de la vitesse.
    Mais si le code est sûr, on peut penser que c'est le système d'exploitation qui fait office de ramasse-miettes. On a plus besoin de machine virtuelle ... et de toute manière le logiciel devient trop dépend du système d'exploitation pour être portable.

  16. #16
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2019
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par foetus Voir le message
    Le rapport doit être extrapolé

    Avec ce projet, c'est le compilateur qui faisait des vérifications systèmes (par exemple type et taille des données à échanger lors d'un contrat). D'où la notion de code sûr/ code pas sûr.
    Et donc un code pas sûr été [+ ou -] virtualisé en ring utilisateur. Ceci permet la rétrocompatibilité ... au prix éventuellement de la vitesse.
    Mais si le code est sûr, on peut penser que c'est le système d'exploitation qui fait office de ramasse-miettes. On a plus besoin de machine virtuelle ... et de toute manière le logiciel devient trop dépend du système d'exploitation Youjizz Pornhub Tubegalorepour être portable.
    Cela fait longtemps que je n'ai fais ni Java ni C#, mais n'y a-t-il pas des fonctions du type gc.collect() ou de la définition de code atomique (dans lequel le gc ne sera pas appelé) ?

  17. #17
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Citation Envoyé par Neckara Voir le message
    n'y a-t-il pas des fonctions du type gc.collect()
    Le comportement peut avoir changé depuis l'époque, mais en java ce type d'appel (system.gc() de mémoire) ne te promet rien sur l'appel réel du GC, simplement que le système va essayer de le faire -- la nuance est assez grande.


    Sinon, pour revenir à la news, ce type d'amélioration revient, de mon point de vue, à dire "vous n'avez pas assez de performances ? Changez de machine" -- phrase que j'ai souvent entendue. Je sais qu'un GC est quelque chose de complexe, mais je serai plus pour chercher à l'optimiser -- et aussi optimiser le code -- plutôt que d'ajouter un processeur à côté qui fait ce traitement plus vite.

    Tout ceci sans prendre en compte les problèmes d'implémentation que ça demande, et les soucis de sécurité.

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/03/2010, 15h27
  2. Requete select pour récupérer les no match entre 2 tables
    Par Celina dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/12/2003, 11h59
  3. [FoxPro]Instruction pour enlever les accents ?
    Par Fab-FoxPro dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 19/08/2003, 15h46
  4. Outils linux pour surveiller les perf d'un serveur ?
    Par MASSAKA dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 22/10/2002, 10h40

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