środa, września 14, 2016

Jak zmusić Gradle'a do używania ramdysku (na OS X)

Jest tak. Mam dużo kodu do kompilowania, a część tego kodu to wygenerowane z innych rzeczy klasy.
Dużo jest dysku używane.
Nawet z SSD kompilacja może zająć nawet ponad 20 minut.

To szukam sposobów jakby przyspieszyć buildy ;-)

Pierwszy to użycie RAM dysku.
Ale chciałbym mieć kontrolę nad tym czy używać tego RAM dysku czy też nie.

W tym celu w ~/.profile (czyli pliku ładowanym za każdym razem gdy tworzona jest nowa powłoka) dodałem sobie takie linie:


ramdisk() {
diskutil erasevolume HFS+ "RAMDisk" `hdiutil attach -nomount ram://8388608`
}

remove_ramdisk() {
umount -f "/Volumes/RAMDisk"
}

Dzięki nim po wpisaniu ramdisk stworzy mi się RAM dysk o pojemności 4GB, po remove_ramdisk zostanie on usunięty z systemu.

Teraz trzeba przekonać Gradle'a by użył RAM dysku.
Używamy do tego pliku ~/.gradle/init.gradle, który robimy taki:


boolean ramDisk = new File("/Volumes/RAMDisk").exists()
if (ramDisk) {
print "WILL USE RAMDISK :-)"
gradle.projectsLoaded {
rootProject.allprojects {
buildDir = "/Volumes/RAMDisk/gradle-build/${rootProject.name}/${project.name}"
//println "GOT RAMDISK? buildDir=$buildDir"
}
}
}

Najpierw do zmiennej ramDisk wrzucamy wynik testu czy nasz RAM dysk w ogóle istnieje, jeśli istnieje to zmieniamy buildDir dla projektu na taki, który będzie wskazywał na RAM dysk :-)

Uzyskałem przyspieszenie od 20 do 35% ;-) czyli niezbyt duże.....
A i z obserwacji df -H wynika, że wcalę nie potrzebuję 4 GB, 2 GB by wystarczyły ;-)



Podobne postybeta
SleepAdvisor - komórka pomaga w wyspaniu się ;-)
Trzy wielkie tajemnice Androida (od strony programisty)
Komputer bez sieci nie ma już sensu
Delete Driven Development ;-)
Wolne komputery nie pozwalają się skupić....