50 votes

RAMDrive pour la compilation - existe-t-il une telle chose?

Une réponse (voir ci-dessous) à la une de la question, ici, sur la SORTE m'a donné une idée pour un super petit morceau de logiciel qui pourrait être précieux pour les codeurs de partout.

J'imagine un RAMDrive logiciel, mais avec une différence cruciale serait - il un miroir d'une véritable dossier sur mon disque dur. Plus précisément, le dossier qui contient le projet sur lequel je travaille actuellement. De cette façon, tout s'appuie serait presque instantanée (ou au moins deux ordres de grandeur plus rapide). Le RAMDrive permettrait de synchroniser son contenu avec le disque dur en arrière-plan à l'aide d'inactivité uniquement des ressources.

Une rapide recherche sur Google n'a rien révélé, mais peut-être que je ne sais pas comment faire pour Google. Peut-être quelqu'un sait d'un tel logiciel? De préférence gratuit, mais des frais raisonnables peuvent être OK aussi.

Ajouté: Certaines solutions ont été proposées qui j'ai jeté dans le début. Ils seraient (dans aucun ordre particulier):

  • Acheter un disque dur plus rapide (SSD peut-être ou 10K TR / min). Je ne veux pas d'une solution matérielle. Non seulement le logiciel a le potentiel d'être moins cher (freeware, anyone?) mais il peut également être utilisé dans des environnements où les modifications du matériel serait une erreur si ce n'est impossible - dire, au bureau.
  • Laissez OS/HDD ne le cache il sait mieux comment utiliser votre mémoire RAM libre. L'OS/HDD ont générique cache algorithmes qui cache tout et d'essayer de prédire lesquels des données sera plus nécessaire à l'avenir. Ils n'ont aucune idée que pour moi, la priorité est de mon dossier de projet. Et comme nous le savons tous très bien qu'ils n'ont pas vraiment le cache beaucoup de toute façon. ;)
  • Il y a beaucoup RAMDrives autour, utilisez l'un de ceux-ci. Désolé, ce serait irresponsable. J'ai besoin de mes données pour être synchronisé sur le disque dur à chaque fois qu'il y a un peu de temps libre. Dans le cas d'une panne de courant, je ne pouvais supporter de perdre les 5 dernières minutes de travail, mais pas tout depuis mon dernier enregistrement.

Ajout de 2: Une idée qui m'est venue à usage normal RAMDrive plus un dossier de synchroniseur (mais je veux arrière-plan). Est-il une telle chose?

Ajout De 3: Intéressant. J'ai juste essayé un simple RAMDrive au travail. Le temps de reconstruction des gouttes de ~14s à ~7s (pas mal), mais progressives construire est encore à ~5s - tout comme sur le disque dur. Des idées pourquoi? Il utilise aspnet_compiler et aspnet_merge. Peut-être qu'ils font quelque chose avec d'autres fichiers temporaires d'ailleurs?

Ajouté 4: Oh, belles nouvelles réponses! :) OK, j'ai un peu plus d'info pour tous les opposants. :)

L'une des principales raisons pour que cette idée n'est pas le logiciel mentionné ci-dessus (14s moment de la construction), mais une autre que je n'ai pas accès à l'époque. Cette autre application a un 100MB base de code, et sa construction complète prend environ 5 minutes. Ah oui, c'est dans Delphi 5, de sorte que le compilateur n'est pas trop avancé. :) De mettre les sources sur un RAMDrive a abouti à une GRANDE différence. L'ai eu en dessous d'une minute, je pense. N'ai pas mesuré. Donc, pour tous ceux qui disent que l'OS peut mettre en cache des trucs mieux - je prie de différer.

Question Connexe:

Disque RAM pour accélérer IDE

Note sur le premier lien: La question à laquelle elle liens a été supprimé parce qu'il était un doublon. Elle a demandé:

Que faites-vous pendant que votre code a la compilation?

Et la réponse par Dmitri Nesteruk à qui je me suis lié a:

Je compile presque instantanément. En partie en raison de mes projets de petite taille, en partie en raison de l'utilisation de disques virtuels.

18voto

SCdF Points 11397

Dans linux (vous n'avez jamais dit quel système d'exploitation vous êtes sur de sorte que ce pourrait être pertinent) vous pouvez créer des périphériques de bloc de mémoire RAM et les installer comme n'importe quel autre périphérique de bloc (c'est à dire un disque dur).

Vous pouvez ensuite créer des scripts qui copier vers et à partir de ce lecteur sur le démarrage et l'arrêt, ainsi que périodiquement.

Par exemple, vous pouvez configurer de sorte que vous aviez ~/code et ~/code-real. Votre RAM bloc est monté à l' ~/code au démarrage, et puis tout d' ~/code-real (qui est sur votre disque dur standard) est copié sur. Lors de l'arrêt, tout devrait être copiés (rsync ferais serait plus rapide) de retour de ~/code de ~/code-real. Vous aussi, vous avez probablement envie que le script à exécuter périodiquement de sorte que vous ne perdez pas beaucoup de travail en cas de panne de courant, etc.

Je ne fais pas ça (utilisé pour l'Opéra lors de la 9.5 beta est lent, pas besoin de plus) mais je peut encore avoir les scripts. Quand je rentre à la maison.

Voici comment créer un Disque RAM sous linux.

15voto

Adam Davis Points 47683

Je suis surpris de voir comment beaucoup de gens suggèrent que le système d'exploitation peut faire un meilleur travail à déterminer vos besoins de mise en cache que vous pouvez dans ce cas spécial. Alors que je n'ai pas fait cela pour la compilation, j'ai fait faire par des procédés similaires et j'ai fini par utiliser un ramdisk avec des scripts automatisés la synchronisation.

Dans ce cas, je pense que j'irais avec un moderne système de contrôle de source. À chaque compilation, il serait de vérifier dans le code source (le long d'une branche expérimentale si nécessaire) automatiquement, de sorte que chaque compiler aurait pour résultat les données enregistrées off.

Pour commencer le développement, démarrer le ramdisk et tirez le courant de ligne de base. Faire de l'édition, de compiler, d'éditer, compiler, etc - tout de même, les modifications sont enregistrées pour vous.

Faire la vérification finale dans lorsque heureux, et vous n'avez même pas à impliquer votre HD.

Mais il y a des antécédents synchroniseurs qui permettra d'automatiser les choses - le problème est qu'ils ne seront pas optimisés pour la programmation, et peut-être besoin de faire le plein de répertoire et de fichier analyses parfois à attraper des changements. Un contrôle de code source du système est conception pour exactement cet effet, il serait probablement plus faible surcharge, même si elle existe dans votre construction de l'installation.

Gardez à l'esprit qu'une tâche de synchronisation, dans le cas d'une panne de courant, n'est pas défini. Vous allez finir par avoir à comprendre ce qui a été sauvé et ce qui n'était pas enregistré si les choses tournaient mal. Avec la définition d'un point de sauvegarde (à chaque compilation, ou forcé par la main) vous auriez une assez bonne idée de qui il était, au moins dans un état où vous avez pensé que vous pourriez compiler. L'utilisation d'un VCS et vous pouvez facilement comparer au précédent code et voir ce que les modifications que vous avez déjà appliquée.

5voto

composer Points 401

http://en.gentoo-wiki.com/wiki/Speeding_up_emerge_with_tmpfs

Accélérer compile à l'aide de disques ram sous Gentoo a fait l'objet d'un howto écrit de nombreux il y a des éons. Il fournit un exemple concret de ce qui a été fait. L'essentiel est que toutes les sources et construire l'intermédiaire de fichiers sont redirigés vers un disque ram pour compiler, tandis que la finale binaires sont dirigés vers le disque dur pour l'installation.

Aussi, je vous recommande d'explorer le maintien de votre source sur le disque dur, mais git push votre dernière modification de la source à un clone respository qui réside sur le disque ram. Compiler le clone. Utilisez votre favori script pour copier les fichiers binaires créés.

Espérons que cela aide.

4voto

Joe McGrath Points 1039

Utilisation https://wiki.archlinux.org/index.php/Ramdisk pour faire le ramdisk

que j'ai écrit ces scripts pour déplacer des répertoires et de la ramdisk. La sauvegarde est faite dans le fichier tar avant de passer dans le ramdisk. L'avantage de cette façon de faire est que le chemin reste le même pour vous tous les fichiers de configuration n'avez pas besoin de changer. Lorsque vous avez terminé d'utiliser uramdir de ramener sur le disque.

edit: Ajouté le code c qui va exécuter n'importe quelle commande il est donné sur un intervalle en arrière-plan. En l'envoyant tar avec --update de la mise à jour de l'archive si toutes les modifications.

Je crois que cette finalité générale de la solution vaut une solution unique pour quelque chose de très simple. KISS

Assurez-vous de changer de chemin pour rdbackupd

ramdir #!/bin/bash

# may need some error checking for bad input. 

 #convert relative path to absolute
 # /bin/pwd gets real path without symbolic link on my system and pwd
 # keeps symbolic link.  may need to change to suit your needs
somedir=`cd $1; /bin/pwd`; 
somedirparent=`dirname $somedir`

# backup directory 
/bin/tar cf $somedir.tar $somedir

# copy, tried move like https://wiki.archlinux.org/index.php/Ramdisk
# suggests, but got error 
mkdir -p /mnt/ramdisk$somedir
/bin/cp -r  $somedir /mnt/ramdisk$somedirparent

# remove  dir
/bin/rm -r $somedir

# create symbolic link. needs to be in parent of given foler. 
/bin/ln -s /mnt/ramdisk$somedir $somedirparent

#run updater
~/bin/rdbackupd "/bin/tar -uf $somedir.tar $somedir" &

uramdir

#!/bin/bash

 #convert relative path to absolute
 #somepath would probably make more sense 
 # pwd and not /bin/pwd so we get symbolic path
somedir=`cd $1; pwd`; 

# remove symbolic link
rm $somedir

# copy dir back
/bin/cp -r /mnt/ramdisk$somedir $somedir

#remove from ramdisk 
/bin/rm -r /mnt/ramdisk$somedir

#stop
killall rdbackupd

rdbackupd.cpp

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <signal.h>
#include <sys/time.h>

struct itimerval it;
char* command;

void update_archive(int sig)
{
    system(command);
}

int main(int argc, char**argv)
{
    it.it_value.tv_sec     = 1;   // start right now
    it.it_value.tv_usec    = 0;
    it.it_interval.tv_sec  = 60;   // run every 60 seconds
    it.it_interval.tv_usec = 0;

    if (argc < 2) 
    {
        printf("rdbackupd: Need command to run\n");
        return 1;
    }
    command = argv[1];

    signal(SIGALRM, update_archive); 
    setitimer(ITIMER_REAL, &it, NULL); // start 

    while(true);

    return 0;
}

3voto

James Curran Points 55356

Votre système d'exploitation mettra les choses en mémoire cache pendant son fonctionnement. Un disque RAM peut sembler plus rapide, mais c'est parce que vous ne tenez pas compte des périodes "copier sur RAMDisk" et "copier à partir de RAMDisk". Le fait de dédier de la RAM à un disque mémoire de taille fixe réduit simplement la mémoire disponible pour la mise en cache. Le système d'exploitation sait mieux ce qu'il faut dans la RAM.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X