Kategorie:
21

Wydano kod HipHop PHP od Facebooka

W zasobach repozytorium GitHub pojawiła się stworzona na potrzeby Facebooka aplikacja open source tłumacząca kod PHP na bardzo dobrze zoptymalizowany kod C++. Jak wykazały pierwsze testy, dzięki zastosowaniu HipHop for PHP zanotowano 50-cio procentową redukcję wykorzystania mocy procesora tak serwowanej strony Facebooka w stosunku do wersji działającej na Apache!

Facebookowy HipHop for PHP można wykorzystać do odciążenia procesorów serwera. Jest to możliwe dzięki translatorowi, który tłumaczy kod PHP na C++, co daje możliwość kompilacji na kod binarny np. za pomocą g++. Tak skompilowana aplikacja jest mniej zasobożerna, gdyż nie ma potrzeby jej ciągłego interpretowania przez kompilator PHP.

Jak wykazały pierwsze testy przy zastosowaniu HipHop for PHP, przy takim samym jak w przypadku zastosowania Apache ruchu nastąpił spadek obciążenia procesora o 50%. Jednocześnie stwierdzono, że aplikacja obsłuży dwukrotnie większy ruch przy wykorzystaniu mniejszej o 30% mocy procesora.

Aplikacja powinna znaleźć zastosowanie przede wszystkim w dużych firmach, które muszą tworzyć rozszerzenia kodu PHP w języku C++. Dotychczas konieczne było oddelegowanie lub zatrudnienie nowych programistów do pracy z rozszerzeniemi, a w efekcie wiązało się odpowiednio z wydłużeniem czasu pracy nad projektem lub ze zwiększonymi nakładami finansowymi.

Obecna wersja HipHop PHP pracuje z PHP 5.2, ale wkrótce jej kod powinien zostać zaktualizowany do pracy z PHP 5.3 Kod aplikacji jest otwarty.

Treść została pierwotnie opublikowana pod adresem http://bit-tech.net.pl/otwarty-kod-facebook-hiphop-php-na-githubie Jestem jej autorem i posiadam pełne prawo do jej opublikowania na OSNews.pl

Więcej informacji: http://wiki.github.com/facebook/hiphop-php/

«
»

Znalazłeś literówkę? Zgłoś ją używając formularza!


Jeśli uważasz, że ten nius jest nieobiektywny, przedstawia nieprawdziwe wydarzenie, jest spamem lub nie spełnia standardów serwisu, napisz raport.

Niusy na podobny temat:

Komentarze (RSS)

Komentarze są prywatnymi opiniami dodających je osób. Prosimy o zachowanie kultury wypowiedzi. Komentarze obraźliwe oraz obniżające poziom serwisu będą usuwane. Więcej w regulaminie komentowania.

28 komentarzy

zwiń wątek hind  22 lutego 2010 o godz. 21:21 #
Gravatar

może ktoś jest bardziej obeznany z tematem, ale jak dokładnie to działa? To zastępuje serwer HTTP czy dział jako CGI (z newsa trudno mi to jednoznacznie określić). Oraz czy to kompiluje cały kod czy można kompilować pewną część kodu aby potem użyć go jako rozszerzenie do PHP ?

Na stronie sprawdzałem na szybko i znalazłem tylko jak zainstalować (nie szukałem dokładnie, bo jakoś jeszcze nie potrzebuję aż takiej optymalizacji)

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek oO  23 lutego 2010 o godz. 11:05 #
Gravatar

Jak to działa? Czego używa do łączenia się z bazami?

 
zwiń wątek Mateusz Tymek  23 lutego 2010 o godz. 20:14 #
Gravatar

W skrócie:

- można skompilować od razu całą aplikację lub odpalić hh jako demona (lub serwer) i pozwolić mu na kompilację żądanych plików "w locie";

- może działać jako samodzielny serwer WWW, ale myślę że nie będzie trudno zmusić do współpracy z Apache;

- ma parę zaawansowanych opcji – można na przykład określić liczbę plików .cpp które mają zostać wygenerowane – bez tej opcji jeden plik .php = jeden plik .cpp

- działa tylko na 64-bitowych systemach – z tego powodu nie mogłem go jeszcze przetestować :)

 
 
zwiń wątek Emdek  22 lutego 2010 o godz. 21:43 #
Gravatar
(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek spookypld  22 lutego 2010 o godz. 21:48 #
Gravatar

:) – zazdrość niektórych newsmanów tutaj.

Protip: Czytaj uważnie. Ten news jest o wydaniu HH4PHP, Twój był o zapowiedzi.

zwiń wątek Emdek  22 lutego 2010 o godz. 22:10 #
Gravatar

Czytam uważnie. :-P

Nie ma czego zazdrościć, są ciekawsze tematy.

A według mnie nie warto pisać całego wpisu tak szybko, skoro i tak było wiadomo, że w ciągu kilku dni wydadzą źródła.

zwiń wątek spookypld  22 lutego 2010 o godz. 22:17 #
Gravatar

A według mnie nie warto pisać całego wpisu tak szybko, skoro i tak było wiadomo, że w ciągu kilku dni wydadzą źródł

To po co pisałeś?? :D

 
zwiń wątek Emdek  22 lutego 2010 o godz. 22:26 #
Gravatar

Czytaj uważnie, mam na myśli Twój wpis. :-P

 
zwiń wątek spookypld  23 lutego 2010 o godz. 0:01 #
Gravatar

Nie każ mi myśleć. :)

 
 
 
 
zwiń wątek pudlo  23 lutego 2010 o godz. 9:43 #
Gravatar

Chłopaki załóżcie sobie kółko polonisty i nie siejcie opinii poza tematem. Od razu widać, że jesteście redaktorami, bo się panoszycie.

Co do tematu, to ciekaw jestem czy porównywali czyste php czy z modułem akceleracji. Po jego włączeniu php przyspiesza kilkukrotnie bo nie parsuje kilka razy tego samego pliku.

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
 
zwiń wątek Królik  23 lutego 2010 o godz. 10:39 #
Gravatar

"na bardzo dobrze zoptymalizowany kod C++"

To jakiś żart, czy co? PHP jest językiem o dynamicznej typizacji – bez wcześniejszego uzupełnienia dokładnej informacji o typach, nie da się wygenerować bardzo dobrze zoptymalizowanego kodu. Nie sądzę, by to zrobili, skoro do tej pory nie udało się to twórcom takich projektów jak IronPython czy JRuby. To by też tłumaczyło niewielkie przyspieszenie, które uzyskali (co jak co, ale różnice wydajności między PHP a dobrze zoptymalizowanym kodem Java/.NET/C++ są o ponad rząd wielkości większe niż 50%, na niekorzyść PHP).

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek Tomasz Woźniak  23 lutego 2010 o godz. 10:55 #
Gravatar

@Królik: o ile pamiętam IronPython to najszybsza maszyna Pythona.

zwiń wątek abec  23 lutego 2010 o godz. 11:14 #
Gravatar

Królik nie twierdzi, że nie.

 
zwiń wątek salmon  23 lutego 2010 o godz. 16:45 #
Gravatar

Z tego co mi wiadomo to najwolniejsza, masz jakieś testy ?

zwiń wątek Tomasz Woźniak  23 lutego 2010 o godz. 18:49 #
Gravatar

@salomon: na pewno nie najwolniejszą, ale też nie najszybsza. Jak widzę od 2.4 sporo się poprawiło w wydajności.

Tutaj najnowsze porównanie: http://ironpython.codeplex.com/wikipage?title=IP2

Przepraszam Pythona (choć używam i wydajność ZAWSZE mi odpowiadała).

 
zwiń wątek salmon  23 lutego 2010 o godz. 19:34 #
Gravatar

Tak na upartego to w wersji 2.6 mamy tylko IronPythona i Cpythona, więc najwolniejszy… ;)

 
 
zwiń wątek Budyń  23 lutego 2010 o godz. 21:47 #
Gravatar

IronPython chodzi na CLI czyli VM .NET-owej a ta jest istotnie chyba najlepszą z obecnie dostępnych. Co innego sam język, który nawet w wersji klasycznej demonem prędkości nie jest, a co dopiero na JVM I CLI – tam RAM i cykle żre bez opamiętania. Ale to kwestia nie maszyn i nawet nie języka, tylko po prostu konkretnych implementacji.

zwiń wątek Królik  24 lutego 2010 o godz. 11:45 #
Gravatar

Kwestia języka. Zauważ, że na tym samym JVM (CLI) Java (C#) chodzą duuużo szybciej niż Python, Ruby, PHP, JavaScript i inne podobne wynalazki. Natomiast relatywnie nowa Scala (na pewno nowsza od Rubyego i Pythona) chodzi na JVM/CLI praktycznie tak samo szybko jak Java/C#. No, ale Scala jest statycznie typowana z bardzo elastycznym systemem typów (co powoduje, że kod jest tak samo zwięzły jak w Pythonie, ale nie trzeba zylionów testów jednostkowych).

Po prostu wygenerować efektywny kod bez informacji o typach jest cholernie trudno – jeżeli funkcja deklaruje, że może przyjmować dowolne obiekty, to musisz przeanalizować CAŁY kod, który ją wywołuje, żeby być w stanie policzyć rzeczywiste górne ograniczenie dla typu obiektu. Dopóki tego nie masz, musisz wołać pola/metody w sposób pośredni, który jest b. niewydajny, bo np. uniemożliwia inlining. A brak inline uniemożliwia kolejne optymalizacje. No i efekt jest taki jaki widać…

 
 
 
 
zwiń wątek oO  23 lutego 2010 o godz. 11:05 #
Gravatar

"Tak skompilowana aplikacja jest mniej zasobożerna, gdyż nie ma potrzeby jej ciągłego interpretowania przez kompilator PHP."

Niestety twój argument o interpretacji użyty do potwierdzenia tezy jest fałszywy.

Zobacz np. testy *interpretowanego* Basha, który wypadł w testach lepiej niż kompilowane C++. Szokujące i dziwne, ale tak wyszło. Więc twoje uzasadnienie jest błędne.

No ale co z tezą? Są jakieś badania albo inne uzasadnienia?

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek macias  23 lutego 2010 o godz. 11:29 #
Gravatar

A link do tych testow?

 
zwiń wątek alienv.pip.verisignl  23 lutego 2010 o godz. 11:35 #
Gravatar

tak samo można udowodnić wyższość dowolnego języka który opiera się na interpretacji kodu aniżeli kompilacji do bin'a.

dzieje się tak dlatego, że wirtualna maszyna potrafi wykryć procesor i dostosować się do jego możliwości, wykorzystując – bądź nie – dodatkowe rozkazy.

a przypadku c++ używa się -march=i386 , bo i po co

eh, Ci "testerzy"

jak powiedział Stalin – nieważne kto głosuje, ważne kto liczy głosy :-)

zwiń wątek macias  23 lutego 2010 o godz. 14:35 #
Gravatar

> a przypadku c++ używa się -march=i386 , bo i po co

Dotyczyloby to takze maszyn wirtualnych, jesli chcesz byc konsekwentny.

 
 
 
zwiń wątek X  23 lutego 2010 o godz. 16:49 #
Gravatar

Mogliby dać możliwość pisania wstawek w C++, tak jak sie w C robiło asmowe. Wtedy optymalizator zostawiałby te wstawki na żywca do kompilatora.

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek Budyń  23 lutego 2010 o godz. 21:51 #
Gravatar

Po co ? Po to kilku ubermózgów pisało HipHop-a aby masa kodotłuków mogła pisać w PeHaPie i się nie przejmować. Zaraz by się znalazł geniusz który by zaczał pisać własne wstawki i tylko rozwalał to co działa dobrze.

zwiń wątek X  23 lutego 2010 o godz. 23:18 #
Gravatar

A po to, że ten hip-hop przyspiesza raptem o połowę, a ponoć konstrukcja języka (dynamiczne typowanie) to fundamentalny problem w optymalizacji i na dużo więcej nie można liczyc. Przy podejściu hip-hop (kompilacja do C++) umożliwienie robienia wstawek byłoby prawdopodobnie za darmo. Ja nie twierdzę, że to jest rozwiązanie na wszystkie bolączki i pozbawione wad, ale co Ci szkodzi taka furteczka? Nie chodzi o to by cały skrypt przerobić na mix PHP z C, ale mieć możliwość odpowiedniego potraktowania wąskiego gardła.

A tak ogólniej, to sobie pomyślałem, że może miałby sens jakiś dodatkowy rodzaj zmiennej, takiej która ma raz na zawsze ustalony typ. Nie upieram się przy tym, bo mi trochę brakuje teorii języków, ale może to by uczyniło pracę optymalizatorów łatwiejszą.

zwiń wątek Królik  24 lutego 2010 o godz. 11:50 #
Gravatar

Najprościej by było jakby przepisali wszystko na jakiś wysokopoziomowy język statycznie typowany (niekoniecznie C++). No, ale to jest strasznie dużo roboty, więc nie dziwię się wcale, że poszli tą drogą. Prowizorka, ale ważne że trochę działa.

 
 
 
 
zwiń wątek X  23 lutego 2010 o godz. 23:42 #
Gravatar

Dotychczas konieczne było oddelegowanie lub zatrudnienie nowych programistów do pracy z rozszerzeniemi, a w efekcie wiązało się odpowiednio z wydłużeniem czasu pracy nad projektem lub ze zwiększonymi nakładami finansowymi.

Obawiam się, że i tak rozszerzenia będą konieczne, gdy:

1. stajemy przed poważnym problemem wydajnościowym, np. napisanie parsera, zakodowanie kosztownego algorytmu którego nie ma w standardowych funkcjach. 50% turbo w tym wypadku niewiele daje.

2. pomijamy względy wydajnościowe, ale nie możemy czegoś zrealizować, bo dostępne w PHP funkcje tego "nie widzą". Np. chcemy zaimplementować obsługę nietypowej bazy danych, jakiegoś odwołania do OS albo sprzętu.

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
 
zwiń wątek blog.szsz.pl/  24 lutego 2010 o godz. 13:31 #
Gravatar

2X przyśpieszenie kosztem kompilacji do C++ może wydawać się sporym osiągnięciem, ale przydały by się testy porównawcze z innymi językami. Na podstawie innych zestawień, które pamiętam, taki kod nadal będzie wolniejszy niż odpowiednik w Java/Python/Ruby itp (alfabetycznie).

Podobny projekt, kompilujący do bytekodów JVM chwalił się przyśpieszeniem od 3x do 6x.

Z biegiem lat, jestem coraz mniej przekonany do zalet statycznej kompilacji. Tak nawiązując do dyskusji o flagach kompilatora (powyżej). Całkiem niedawno walczyłem z kawałkiem kodu, który był szybszy w Javascript niż w C. Dopiero po licznych próbach, udało mi się tak dobrać flagi by czas wykonywania był "porównywalny".

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
 

Uwaga! Niektóre komentarze, m.in. te dodane przez niezalogowanych i nowych użytkowników, są ręcznie moderowane. Jeśli Twój komentarz nie ukaże się od razu, nie dodawaj go ponownie, tylko cierpliwie poczekaj na akceptację.

W komentarzach możesz używać prostych znaczników HTML. Przykłady:
  • Link: <a href="http://osnews.pl">OSnews: niusy IT</a>,
  • Wytłuszczenie: <strong>tekst pogrubiony</strong>,
  • Kursywa: <em>tekst pochylony</em>,
  • Przekreślenie: <strike>tekst przekreślony</strike>,
  • Kod: <code>printf("blok kodu");</code>,
  • Cytat: <blockquote>cytat</blockquote>
Uwaga: jeśli dodasz nieznany znacznik, będzie on niewidoczny, gdyż system filtruje takie znaczniki.

Wszystkie autorskie niusy w serwisie publikowane są na licencji Creative Commons Uznanie autorstwa 2.5 Polska.

Twoja sugestia