RAM диск для компиляции - есть такая вещь?

голоса
49

Ответ (см ниже) на один из вопросовпрямо здесь на Stack Overflow дал мне идею для большого небольшого куска программного обеспечениякоторое может быть неоценимым для кодеров везде.

Я себе программное обеспечение RAM диск, но с одним существенным отличием - это будет отражать реальную папку на жестком диске. Более конкретно - папка, содержащая проект я в настоящее время работает над. Таким образом, любой строит бы почти мгновенно (или, по крайней мере, на пару порядков быстрее). Привод RAM будет синхронизировать его содержимое на жесткий диск в фоновом режиме, используя только неработающие ресурсы.

Быстрый поиск Google ничего не выявили, но, возможно, я просто не знаю, как Google. Может быть, кто-нибудь знает такого программного обеспечения? Предпочтительно свободная, но разумная плата может быть тоже нормально.

Добавлено: Некоторые решения были предложены , которые я отбрасываюсь в самом начале. Они были бы (в произвольном порядке):

  • Купить диск быстрее жесткий диск ( SSD , может быть , или 10K RPM). Я не хочу аппаратное решение. Мало того, программное обеспечение имеет потенциал , чтобы быть дешевле, но он также может использоваться в средах , где аппаратные модификации были бы нежелательны , если не невозможно (бесплатное программное обеспечение , кто?) - скажем, в офисе.
  • Пусть OS / HDD сделать кэширование - это лучше знает , как использовать свое свободное ОЗУ. OS / HDD имеют алгоритмы общие кэша, кэшировать все и пытаются предсказать , какие данные будут наиболее необходимы в будущем. Они не имеют ни малейшего представления о том , что для меня приоритетом является моя папка проекта. И как мы все хорошо знаем - они на самом деле не кэшировать его много в любом случае. ;)
  • Есть много RAM дисков вокруг; использовать один из них. К сожалению, это было бы опрометчиво. Мне нужно мои данные для синхронизации обратно на жесткий диск , когда есть немного свободного времени. В случае сбоя питания я мог потерять последние пять минут работы, но не все , так как мое последнее фиксирование.

Добавлено 2: идея пришла - использовать обычный диск RAM плюс синхронизатор фона папки (но я имею в виду фона ). Есть ли такая вещь?

Добавлено 3: Интересно. Я просто попробовал простой диск RAM на работе. Время восстановления падает с ~ 14 секунд до ~ 7 секунд (не плохо), но инкрементные сборки еще в ~ 5 секунд - так же , как на жестком диске. Любые идеи , почему? Он использует aspnet_compilerи aspnet_merge. Может быть , они что - то делать с другими временными файлами в другом месте?

Добавлено 4: О, хороший новый набор ответов! :) Хорошо, у меня есть немного больше информации для всех вас скептиков. :)

Одной из главных причин этой идеи не вышеупомянутое программное обеспечение (14 секунд времени сборки), а другие один , что я не имел доступа в то время. Это другое приложение имеет базовый код 100 МБ, а его полная сборка занимает около 5 минут. Ах да, это в Delphi 5 , так что компилятор не слишком продвинутый. :) Ввод источника на диске RAM в результате большой разницы. Я получил его ниже минуты, я думаю. Я не измерял. Таким образом , для всех тех , кто говорит , что операционная система может кэшировать вещи лучше - я прошу отличаться.

Связанный с этим вопрос:

RAM диск для скорости до IDE

Обратите внимание на первую ссылку: Вопрос , к которому он связывает был удален , потому что он был дубликат. Он спросил:

Что вы делаете во время компиляции вашего кода?

И ответ на Дмитрия Нестерук , к которым я связан был:

Я компилирую почти мгновенно. Отчасти из-за мои проекты будучи маленьким, отчасти из-за использования дисков RAM.

Задан 09/12/2008 в 22:11
источник пользователем
На других языках...                            


18 ответов

голоса
17

В Linux (вы никогда не упоминалось , какую ОС вы находитесь, так что это может иметь отношение) , вы можете создать блочные устройства из памяти и смонтировать их , как и любой другой блок устройства (то есть, HDD).

Вы можете создавать сценарии, которые копируют и из этого диска при запуске / выключении, а также периодически.

Например, вы можете настроить его так , у вас ~/codeи ~/code-real. Ваш блок RAM смонтировано на ~/codeстарте системы , а затем все из ~/code-real(который находится на стандартный жесткий диск) получает копируются. При останове все будет скопировано ( Rsync d»будет быстрее) назад от ~/codeк ~/code-real. Вы также , вероятно , хотите , чтобы скрипт периодически запускать, так что вы не потеряете много работы в случае сбоя питания, и т.д.

Я не делаю этого больше (я не использовал его для оперы , когда бета 9,5 медленно, не нужно больше).

Вот как создать виртуальный диск в Linux.

Ответил 09/12/2008 в 23:58
источник пользователем

голоса
15

Я удивлен, как много людей предполагают, что ОС может сделать лучшую работу на выяснение ваших потребностей кэширования, чем вы можете в этом специализированном случае. В то время как я не делал это для компиляции, я сделал это для подобных процессов, и я в конечном итоге с помощью RAM диска с помощью скриптов, которые автоматизированных синхронизация.

В этом случае, я думаю, что я бы с современной системой управления версиями. На каждом компилировать было бы проверить в исходном коде (по экспериментальной ветви в случае необходимости) автоматически, так что каждый компиляция приведет данные сохраняются прочь.

Для того, чтобы приступить к разработке, запуске RAM диска и вытащить текущую базовую линию. Выполните редактирование, компилировать, редактировать, компилировать и т.д. - все это время редактирует спасаемое для вас.

Выполните окончательную проверку в том, когда счастлив, и вы даже не должны включать ваш обычный жесткий диск.

Но есть фон синхронизаторы, которые автоматизируют вещи - проблема в том, что они не будут оптимизированы для программирования либо и, возможно, потребуются сделать полные каталоги и файлы сканирование иногда поймать изменения. Система управления исходным кода предназначена именно для этой цели, так что, вероятно, будут ниже накладными расходами, даже если она существует в настройках сборки.

Имейте в виду , что задача фон синхронизации, в случае отключения электроэнергии, является неопределенным. Вы бы в конечном итоге, чтобы выяснить , что был спасен , и что не было спасти , если бы все пошло не так. С определяется сохранить точку (в каждой компиляции, или вынуждены вручную) , вы бы иметь довольно хорошее представление о том , что это было по крайней мере , в состоянии , в котором вы думали , вы могли бы собрать его. Используйте VCS , и вы можете легко сравнить его с предыдущим кодом и посмотреть , какие изменения вы применили уже.

Ответил 27/03/2009 в 05:03
источник пользователем

голоса
4

См Форсирование возникают с TMPFS ( Gentoo Linux вики).

Ускорение компилирует с использованием RAM дисков под Gentoo был предмет как-письменных многих эонов назад. Это дает конкретный пример того, что было сделано. Суть в том, что все исходные и построить промежуточный файл перенаправляются на RAM диск для компиляции, в то время как конечные двоичные файлы направляются на жесткий диск для установки.

Кроме того , я рекомендую исследовать поддержание вашего источника на жестком диске, но git pushваши последние изменения источника в клоне respository , который находится на RAM - диске. Компиляция клон. Используйте свой любимый сценарий , чтобы скопировать двоичные файлы , созданные.

Надеюсь, это поможет.

Ответил 10/12/2008 в 01:28
источник пользователем

голоса
3

Используйте https://wiki.archlinux.org/index.php/Ramdisk сделать RAM диск.

Тогда я написал эти сценарии для перемещения каталогов и из RAM диска. Резервное копирование производится в деготь файл , прежде чем перейти в RAM диск. Преимущество делать это таким образом, что путь остается неизменным, так что все ваши конфигурационные файлы не нужно менять. Когда вы закончите, используйте , uramdirчтобы вернуть на диск.

Edit: Добавлен C код , который будет выполнять любую команду она задана на интервале в фоновом режиме. Я посылаю его tarс --updateобновить архив , если каких - либо изменений.

Я считаю, что это универсальный раствор бьет делает уникальное решение что-то очень простое. ПОЦЕЛУЙ

Убедитесь, что вы измените путь к 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. You may need to change it 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 I got an error.
mkdir -p /mnt/ramdisk$somedir
/bin/cp -r  $somedir /mnt/ramdisk$somedirparent

# Remove  directory
/bin/rm -r $somedir

# Create symbolic link. It needs to be in parent of given folder.
/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 a 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;
}
Ответил 26/10/2011 в 00:00
источник пользователем

голоса
3

Я не то , что вы ищете, но я сейчас , используя комбинацию Ramdisk и DRAM псевдодиска . Так как это Windows , у меня есть жесткий лимит 3 ГБ для оперативной памяти, то есть я не могу использовать слишком много памяти для RAM диска. 4 Гб дополнительной на 9010 действительно качается это. Я позволяю моему IDE магазин весь его временный материал на твердотельной памяти диска , а также Maven хранилище. Диск DRAM RAM имеет резервную батарею на флэш - карту. Это звучит как реклама, но это действительно отличная настройка.

DRAM диск имеет двойные порты SATA-300 и поставляется с 0.0 мс среднее время поиска на большинстве тестов;) Что-то для рождественского чулка?

Ответил 09/12/2008 в 22:41
источник пользователем

голоса
3

Ваша ОС будет кэшировать вещи в памяти, как это работает. RAM-диск может показаться быстрее, но это потому, что вы не факторинг в «копии в виртуальном диске» и «копии с Ramdisk» времен. Выделение ОЗУ на псевдодиск фиксированного размера просто уменьшает объем памяти, доступную для кэширования. OS лучше знает, что нужно, чтобы быть в оперативной памяти.

Ответил 09/12/2008 в 22:38
источник пользователем

голоса
2

Да, я встретил ту же проблему. И после бесплодного Googling я просто написал службу Windows для ленивого создания резервной копии диска RAM (фактически - любая папка, так как диск RAM может быть установлен, например, на рабочем столе).

http://bitbucket.org/xkip/transparentbackup Вы можете указать интервал для полного сканирования ( по умолчанию 5 минут). И интервал для сканирования только уведомлены файлы ( по умолчанию 30 секунд). Scan обнаруживает измененные файлы , используя атрибут «архивный» (ОС сбрасывает , что один специально для архивирования цели). Только файлы , измененные таким образом копируются.

Служба оставляет специальный файл-маркер, чтобы убедиться, что цель резервного копирования именно резервное копирование источника. Если источник пуст и не содержит файл маркера, служба выполняет автоматическое восстановление из резервной копии. Таким образом, вы можете легко уничтожить диск RAM и создать ее снова с автоматическим восстановлением данных. Лучше использовать диск RAM, который способен создать раздел на старте системы, чтобы сделать его работать прозрачно.

Другое решение , которое я недавно обнаружил это SuperSpeed SuperCache .

Эта компания также имеет RAM диск, но это другое программное обеспечение. SuperCache позволяет использовать дополнительную память для кэширования на уровне блоков (это очень отличается от кэширования файлов), а другой вариант - зеркало вам диск в оперативной памяти полностью. В любом случае вы можете указать, как часто падать грязные блоки обратно на жесткий диск, делая операции записи, как на диске RAM, но зеркало сценарий также делает читается как с диска RAM. Вы можете создать небольшой раздел, например, 2 Гб (с использованием Windows) и отобразить весь раздел в ОЗУ.

Одна интересная и очень полезная вещь о том, что решение - вы можете изменить кэширование и зеркальное отображение параметры можно в любое время просто мгновенно с двумя щелчками. Например, если вы хотите, чтобы ваш 2 ГБ назад для gamimg или виртуальной машины - вы можете просто остановить зеркальное отображение мгновенно и освободить память обратно. Даже открытые дескрипторы файлов не ломается - раздел продолжает работать, но как обычный диск.

EDIT: Я также настоятельно рекомендую переместить папку TEMP на диск тэ RAM, потому что компиляторы обычно делают много работы с темпом. В моем случае это дало мне еще 30% скорости компиляции.

Ответил 11/03/2012 в 07:31
источник пользователем

голоса
2

Я была такая же идея, и сделал некоторые исследования. Я нашел следующие инструменты, которые делают то, что вы ищете:

Тем не менее, второй один я не мог управлять, чтобы работать на 64-битной Windows 7 на всех, и это, кажется, не поддерживается в данный момент.

VSuite RAM диск на других руках работает очень хорошо. К сожалению , я не мог оценить любой значительный прирост производительности по сравнению с SSD - диск на месте.

Ответил 09/11/2011 в 20:33
источник пользователем

голоса
2
  1. Профиль. Убедитесь , что вы делаете хорошие измерения каждого варианта. Вы даже можете купить вещи , которые вы уже отвергнутые, измерить их, и вернуть их, так что вы знаете , что вы работаете с хорошими данными.

  2. Получите много оперативной памяти. 2 Гб модули DIMM очень дешево; 4 ГБ модулей DIMM являются чуть более US $ 100 / еа, но это еще не много денег , по сравнению с тем, что компьютер стоит частей всего несколько лет назад. Если вы в конечном итоге с RAM диска или просто позволить ОС делать свое дело, это поможет. Если вы используете 32-разрядную Windows, вам необходимо перейти на 64-битную , чтобы использовать что - нибудь более 3 ГБ или около того .

  3. Live Mesh можно синхронизировать с вашего локального диска RAM к облаку или к другому компьютеру, что дает вам последнюю актуальную резервную копию .

  4. Перемещение только компилятор выходов. Держите свой исходный код на реальном физическом диске, но прямой .obj, DLL и EXE - файлы , которые будут созданы на диске RAM.

  5. Рассмотрим DVCS . Клонирование от реального диска в новое хранилище на диске RAM. «толкать» свои изменения обратно к родителю часто, говорят , каждый раз , когда все тесты пасс.

Ответил 10/12/2008 в 00:31
источник пользователем

голоса
2

Мы делали это много лет назад для 4GL макро-компилятора; если вы кладете библиотеку макросов и поддержки библиотеки и код на RAM диске, компиляция приложения (на 80286) будет идти от 20 минут до 30 секунд.

Ответил 09/12/2008 в 22:32
источник пользователем

голоса
1

Есть много RamDrives вокруг, используйте один из них. К сожалению, это было бы опрометчиво.

Только если вы работаете полностью в RAM диск, который глупо ..

Псевдопользователей-иш сценарий оболочки, ramMake:

# setup locations
$ramdrive = /Volumes/ramspace
$project = $HOME/code/someproject

# ..create ram drive..

# sync project directory to RAM drive
rsync -av $project $ramdrive

# build
cd $ramdrive
make

#optional, copy the built data to the project directory:
rsync $ramdrive/build $project/build

Тем не менее, ваш компилятор может возможно сделать это без каких-либо дополнительных скриптов .. Просто измените расположение вывода сборки на RAM диске, например, в Xcode, это в Настройках, Строительство, «Место сборки продуктов в:» и «Место Intermediate сборки файлов в:".

Ответил 27/03/2009 в 06:31
источник пользователем

голоса
1

Что может быть очень полезным на даже одноядерный машины параллельно делают. Disk I / O является довольно большим фактором в процессе сборки. Нерест два экземпляра компилятора на ядро процессора может фактически увеличить производительность. В качестве одного экземпляра компилятор блоков на I / O другой может , как правило , прыгать в CPU интенсивной части компиляции.

Вы должны убедиться, что у вас есть RAM, чтобы поддержать это (не должно быть проблемой на современном рабочем месте), в противном случае вы будете в конечном итоге замены и поражения цели.

На GNU сделать , вы можете просто использовать , -j[n]где [n]это количество одновременных процессов на нерест. Убедитесь , что у вас есть дерево зависимостей право , прежде чем пытаться его , хотя и результаты могут быть непредсказуемыми.

Еще один инструмент , который очень полезен (в параллельном макияжем моды) является DistCC . Он работает лечить с помощью GCC (если вы можете использовать GCC или что - то с подобным интерфейсом командной строки). DistCC фактически разбивает задачу компиляции, притворяясь задачи компилятора и нерестилища на удаленных серверах. Вы называете это таким же образом , как вы назвали бы GCC, и воспользоваться -j сделать в опции [п] для вызова многих процессов DistCC.

На одном из моих предыдущих работ мы имели достаточно интенсивные сборки операционной системы Linux, которая была выполнена почти ежедневно на некоторое время. Добавление в несколько выделенных строительных машин и положить DistCC на несколько рабочих мест, чтобы принять компиляции рабочих мест позволило довести время сборки вниз от полдня до 60 минут для полного OS + пользовательское приложение сборки.

Там много других инструментов для скорости компилирует существующие. Вы могли бы хотеть исследовать больше, чем создание дисков RAM; то, что выглядит, как это будет иметь очень небольшой прирост, так как операционная система делает кэширование диска с оперативной памятью. дизайнерам OS тратить много времени получать право кэширования для большинства рабочих нагрузок; они (коллективно) умнее вас, так что я не хотел бы, чтобы попытаться сделать лучше, чем они.

Если вы жуете оперативную память для RAM диска, операционная система имеет меньше рабочей памяти для кэширования данных и для запуска кода -> вы в конечном итоге с большим количеством свопинга и хуже производительность диска, чем в противном случае (примечание: вы должны профиль этого параметра до полного отбрасывания Это).

Ответил 27/03/2009 в 05:29
источник пользователем

голоса
1

Интересно, если вы могли бы построить что-то вроде программного RAID 1, где у вас есть физический диск / раздел в качестве члена, и кусок оперативной памяти в качестве члена.

Держу пари, с немного настройки и некоторые действительно странные конфигурации можно получить Linux, чтобы сделать это. Я не уверен, что это будет стоит усилий, хотя.

Ответил 10/12/2008 в 01:06
источник пользователем

голоса
0

Мое окончательное решение проблемы vmtouch: https://hoytech.com/vmtouch/ Этот инструмент блокирует текущую папку , в (RAM) кэша и vmtouch daemonizes в фон.

sudo vmtouch -d -L ./

Поместите это в гсе оболочки для быстрого доступа:

alias cacheThis = 'sudo vmtouch -d -L ./'

Я искал готовый сценарий довольно долгое время, потому что я не хочу тратить много времени на написание моего собственный электронного диска-Rsync-скрипт. Я уверен, что я пропустил бы некоторые крайние случаи, которые были бы весьма неприятно, если важный код был вовлечен. И мне никогда не нравился подход опроса.

Vmtouch кажется идеальным решением. Кроме того, он не тратит память, как размер электронного диск фиксированного делает. Я не делал тест, потому что 90% моего источника 1gig + построить папку уже в кэше, но, по крайней мере, он чувствует себя быстрее;)

Ответил 02/08/2017 в 10:08
источник пользователем

голоса
0

Замедление диска вы понесете в основном пишут, а также, возможно, из-за вирусных сканеров. Это может значительно варьироваться в зависимости от операционки тоже.

С идеей , что записи являются медленнее, я был бы соблазн установки сборки , где промежуточные (например, .oфайлы) и исполняемые файлы получить выход в другое место , например , как диск RAM.

Затем можно связать бен / промежуточную папку для более быстрой информации ( с помощью символической ссылки или NTFS точки соединения ).

Ответил 27/09/2011 в 22:36
источник пользователем

голоса
0

Некоторые идеи с верхней части моей головы:

Использовать Sysinternals' Process Monitor (не Process Explorer ) , чтобы проверить , что происходит во время сборки - это позволит вам увидеть , если %temp%используется, например , (имейте в виду , что файлы ответов, вероятно , созданы с FILE_ATTRIBUTE_TEMPORARY , который должен предотвратить запись на диск , если это возможно, хоть). Я переместил %TEMP%на RAM диск, и это дает мне незначительные ускорений в целом.

Получить диск RAM, который поддерживает автоматическую загрузку / сохранение образов дисков, так что вы не должны использовать загрузочные скрипты, чтобы сделать это. Последовательное чтение / запись одного образа диска быстрее, чем синхронизация много маленьких файлов.

Поместите часто используемые / большие файлы заголовки на RAM диске, и переопределить стандартные пути компилятора использовать RAM диск копии. Это, скорее всего , не даст , что большая часть улучшение после первого времени сборки, хотя, как операционная система кэширует стандартные заголовки.

Храните ваши исходные файлы на вашем жестком диске, а также синхронизировать с RAM диска - а не наоборот . Проверьте MirrorFolder для выполнения синхронизации в режиме реального времени между папками - это достигает этого с помощью драйвера фильтра, так синхронизирует только то , что нужно (и только не меняется - это 4 KB запись в файл с 2 Гб будет только вызвать 4 KB запись в целевую папку ). Выяснить , как сделать ваш IDE сборки с диска RAM , хотя исходные файлы на вашем жестком диске ... и иметь в виду , что вы будете нуждаться в большой RAM диск для крупных проектов.

Ответил 27/03/2009 в 06:16
источник пользователем

голоса
0

Это звучит как кэширование диска, которые операционная система и / или жесткий диск будет обрабатывать для вас автоматически (в той или иной степени исполнения, по общему признанию).

Мой совет, если вам не нравится скорость вашего привода, купить высокую скорость привод чисто для составления целей. Меньше труд с вашей стороны, и вы могли бы иметь решение ваших бед компилирования.

Так как этот вопрос был первоначально спросили, спиннинг жестких диски становятся несчастной черепахой по сравнению с SSD. Они очень близки к первоначально запрошенной RAM диск в SKU, которые вы можете приобрести у Newegg или Amazon.

Ответил 09/12/2008 в 22:16
источник пользователем

голоса
-1

Так же, как говорит Джеймс Каррано, тот факт, что большинство программ следовать закону локальности ссылок, частый код и страницы данных счетчик будет сужен с течением времени к управляемому размеру с помощью кэша ОС диска.

Диски RAM были полезны, когда операционные системы были построены с ограничениями, такие как тупые кэша (Win 3.x, Win 95, DOS). Преимущество RAM диска близка к нулю, и если вы назначаете много оперативной памяти он будет сосать память, доступную для менеджера кэш-системы, повреждая общую производительность системы. Правило большого пальца: пусть ваши ядра, чтобы сделать это. Это то же самое, как «дефрагментация памяти» или «оптимизаторы» программа: они фактически принуждают страницы из кэша (так что вы получите больше оперативную памяти в конце концов), но в результате чего системы, чтобы сделать много страницы-разломообразование с течением времени, когда ваши загруженные программы начинает просить код / ​​данные, который был выгружаемыми из.

Так что для большей производительности, получить аппаратную подсистему быстрого дискового ввода / вывода, может быть, RAID, быстрый процессор, лучше чипсет (не VIA!), Больше физической памяти и т.д.

Ответил 27/03/2009 в 04:51
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more