Montag, 27. Juni 2011

ccache für optimiertes neukompilieren

Durch Zufall habe ich letzte Woche das Tool ccache gefunden.
Dabei handelt es sich um ein Tool, dass vom compiler generierte .obj Dateien cached.
Damit wird das erneute kompilieren eines Programmes um eine herbliche Dauer verkürzt.

Damit das Tool seine volle Leistung erreicht muss es erst eingerichtet und noch etwas angepasst werden.
In Debian Squeeze kann man es per "aptitude install ccache" installieren.

Ist dies getan, sollte man die größe des gesamten Caches noch anpassen.
Per Default steht dies bei 1 GB was leider viel zu klein ist, wenn man öfters Programme oder kernel kompiliert.

Hier muss man per "ccache -M " un einem Wert wie 25G die größe setzen.
Da ich meistens Systemplatten habe die ca. 120-250 Gigabyte fassen und selten genutzt werden, kann ich den cache locker auf 25G setzen.

Somit stellt man also den cache per "ccache -M 25G" auf schöne 25 Gigabyte.
Damit man auch eine kleine Übersicht hat kan man mit dem Parameter -s sich die Statistik anschauen.
Diese kann man mit dem Parameter -z wieder zurück setzen.

Für Leute selbst 25 Gigabyte als cache vollkriegen gibt es den Parameter -C der den gesamten cache löscht.

Wenn man den aktuellen stable Kernel 2.6.39.2 kompilieren will muss man noch 2 Variablen setzen.
Einmal muss noch die PATH Varaible angepasst werden.
Dies ist nötig, da ccache auf eigene Verlinkungen der jeweiligen compiler zugreifen muss.

Dazu verwendet man folgenden Befehl.
export PATH="/usr/lib/ccache:$PATH"

Nun muss zum kompilieren folgender Befehl verwendet werden.

make CC="ccache gcc"
 Zusätzlich kann man für die paralelle abarbeitung noch den Parameter -j und die Anzahl der Jobs anhängen.
Somit wird beim kompilieren ccache genutzt was beim erneuten kompilieren gut Zeitspart.

Zusätzlich kann man auch noch tmpfs nutzten.
Hier sollte man aber genutzt RAM haben, damit das Dateisystem bzw. der Speicher nicht vollläuft bevor man fertig mit kompilieren ist.

Dienstag, 21. Juni 2011

Netzwerk Programmierung mit Sockets

Da ich schon seit einiger Zeit mich mit dem Thema der Netzwerkprogrammierung beschäftigen wollte, habe ich mir mal die Zeit genommen und habe dieses Thema mit C# begonnen.

Dazu habe ich erst einmal eine kleine Konsolenanwendung gebaut die per Parameter zwischen Client und Server umschaltet.

Als Daten wird dort nur der String "Testdaten" hingesendet, vom Server ausgegeben und zum Client zurück geschickt.
Dieser gibt dann die Antwort vom Server ebenfalls aus.

Ist nur eine kleine Spielerei aber trotzdem ein kleiner Anfang.
Ich habe dies ebenfall mit Java mal umgesetzt, da ich dort auch mal die Erfahrungen sammelt wollte.

Beide Programmiersprachen haben fast die selben Klassen, was die Umsetzung auch sehr einfach macht.

Vielleicht kann ich ja in Zukunft mal ein kleines Tool bauen, was über das Netzwerk Daten versenden und empfangen kann :)
Wenn ich eine gute Idee habe, werde ich diese mal versuchen umzusetzen.