<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>ITBlog: 32 czy 64 bity?</title>
    <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>grono.net</description>
    <item>
      <title>32 czy 64 bity?</title>
      <description>&lt;p style="text-align:justify;"&gt;Parafrazuj&#261;c tytu&#322; jednego z poprzednich post&#243;w, ten powinien brzmie&#263; &amp;#8220;64 bitom m&#243;wimy papa&amp;#8221;.&lt;/p&gt;


	&lt;p style="text-align:justify;"&gt;Nie jest &#380;adn&#261; tajemnic&#261;, &#380;e w Gronie u&#380;ywamy Linuxa. Niczym nowym te&#380; nie jest, &#380;e serwis stoi na frameworku Django. Podobno jeste&#347;my najwi&#281;kszym serwisem u&#380;ywaj&#261;cym tej technologii.&lt;/p&gt;


	&lt;p&gt;Jednak nie dla wszystkich jest jasne jak wygl&#261;da Django od strony serwerowej&amp;#8230;&lt;/p&gt;


	&lt;p style="text-align:justify;"&gt;Podczas surfowania po Gronie, Twoje &#380;&#261;danie dotycz&#261;ce strony grona (request) trafia do jednego z naszych serwer&#243;w. Nast&#281;pnie serwer przypisuje obs&#322;ug&#281; Twojego requesta jednemu z wielu proces&#243;w Django. Pojedynczy proces generuje stron&#281; Grona, ale mo&#380;e obs&#322;ugiwa&#263; tylko jedno &#380;&#261;danie na raz. Linuxowcy mog&#261; znale&#378;&#263; podobie&#324;stwo
w tym modelu z modelem &amp;#8220;prefork&amp;#8221; z konfiguracji Apache. Po wygenerowaniu strony proces jest zn&#243;w dost&#281;pny i czeka na kolejne klikni&#281;cia u&#380;ytkownik&#243;w.&lt;/p&gt;


	&lt;p style="text-align:justify;"&gt;Wynika z tego, &#380;e na pojedynczym serwerze mo&#380;emy obs&#322;u&#380;y&#263; na raz tylko tyle &#380;&#261;da&#324;, ile mamy uruchomionych proces&#243;w Django&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;. Niestety, pojedynczy proces zu&#380;ywa do&#347;&#263; du&#380;o pami&#281;ci. Aby m&#243;c obs&#322;ugiwa&#263; jak najwi&#281;cej u&#380;ytkownik&#243;w na raz, wypada&#322;oby mie&#263; mo&#380;liwie du&#380;o uruchomionych proces&#243;w. Jednak ich ilo&#347;&#263; jest limitowana wielko&#347;ci&#261; pami&#281;ci operacyjnej.&lt;/p&gt;


	&lt;p style="text-align:justify;"&gt;Aby zwi&#281;kszy&#263; wydajno&#347;&#263; (czyli ilo&#347;&#263; stron kt&#243;re mo&#380;emy wygenerowa&#263;), staramy si&#281; w miar&#281; mo&#380;liwo&#347;ci zmniejsza&#263; wielko&#347;&#263; pojedynczego procesu. W tym celu mo&#380;emy zmniejsza&#263; ilo&#347;&#263; linii kodu lub optymalizowa&#263; zu&#380;ycie pami&#281;ci operacyjnej przez proces. Niestety oba zadania s&#261; bardzo trudne.&lt;/p&gt;


	&lt;p&gt;Ostatnio wpadli&#347;my na inny pomys&#322;.&lt;/p&gt;


	&lt;p style="text-align:justify;"&gt;Nasze serwery u&#380;ywaj&#261; 64 bitowej wersji linuxa. Administratorzy zdecydowali si&#281; na to ju&#380; dawno temu. G&#322;&#243;wnym argumentem by&#322;o to, &#380;e zamierzali&#347;my u&#380;ywa&#263; wi&#281;kszej ilo&#347;ci RAMu ni&#380; 4GB, oraz lepsza wydajno&#347;&#263; tej architektury.&lt;/p&gt;


	&lt;p style="text-align:justify;"&gt;Pad&#322; pomys&#322;, &#380;eby sprawdzi&#263; ile RAMu zaoszcz&#281;dzimy przenosz&#261;c si&#281; na &#8220;stare&#8221; 32 bity. W sumie to w Pythonie ca&#322;kiem sporo pami&#281;ci zaj&#281;tej jest przez wska&#378;niki, a w&#322;a&#347;nie
zmniejszenie jej da&#322;oby najwi&#281;kszy zysk.&lt;/p&gt;


	&lt;p style="text-align:justify;"&gt;Efekt okaza&#322; si&#281; du&#380;o lepszy ni&#380; przewidywali&#347;my. W pe&#322;ni za&#322;adowany proces Django na 32 bitach zajmuje oko&#322;o 60MB, czyli o 30% mniej ni&#380; na 64 bitach, gdzie jest to 95MB.&lt;/p&gt;


Oto przyk&#322;ad &#8220;topa&#8221; z maszyny 64 bitowej. Kolumna &lt;span class="caps"&gt;RES&lt;/span&gt; pokazuje orientacyjne zu&#380;ycie pami&#281;ci przez proces:
&lt;pre&gt;
VIRT  RES  SHR S %CPU   TIME+  COMMAND
212m  96m 3832 S    0  1:49.61 django '/gallery/3329236/0/'
203m  96m 3120 S    0  1:37.78 django '/gallery/4871149/6/0/'
211m  95m 3832 S    0  1:38.74 django '/mailbox/box/1/'
210m  95m 3824 S    0  1:45.45 django '/gallery/photo/40328359/'
210m  95m 3844 S    0  1:48.43 django '/users/index/'
210m  94m 3848 S    0  1:33.94 django '/users/'
&lt;/pre&gt;

A oto, dla por&#243;wnania, analogiczny z maszyny 32 bitowej:
&lt;pre&gt;
VIRT  RES  SHR S %CPU    TIME+  COMMAND
68396  62m 3484 S    0  2:06.94 django '/users/433317/'
67716  61m 3488 S    0  1:50.23 django '/gallery/photo/42009962/'
66264  60m 3488 S    0  2:01.94 django '/pub/join/'
65312  59m 3484 S    0  2:08.75 django '/users/'
65148  59m 3508 S    0  1:48.02 django '/users/1533943/friendlist/'
64884  59m 3508 S    0  1:51.48 django '/'
&lt;/pre&gt;

	&lt;p style="text-align:justify;"&gt;Podsumowuj&#261;c, mo&#380;emy powiedzie&#263;, &#380;e stosowane 64 bit&#243;w mo&#380;e nie by&#263; takie wspania&#322;e. Architektura x86_64 niew&#261;tpliwie ma wiele zalet, jednak w naszej sytuacji,
gdzie ilo&#347;&#263; zaj&#281;tego RAMu zaczyna mie&#263; znaczenie, zaczynamy odczuwa&#263; jej wady.&lt;/p&gt;


	&lt;p&gt;Teoretycznie, po ca&#322;kowitej migracji na 32 bity byliby&#347;my w stanie obs&#322;ugiwa&#263; o 1/3 wi&#281;cej 
ruchu ni&#380; obecnie. Mamy wi&#281;c o co walczy&#263;.&lt;/p&gt;


&lt;br&gt;
	&lt;p id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; W praktyce nie jest to takie proste, bo mamy tak&#380;e inne ograniczenia, jak na
przyk&#322;ad moc procesora.&lt;/p&gt;</description>
      <pubDate>Thu, 17 Jan 2008 11:19:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:724c4f88-04f5-4cb7-91ff-01de5678854c</guid>
      <author>Marek Majkowski</author>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity</link>
      <category>ciekawostki</category>
      <category>python</category>
      <category>python</category>
    </item>
    <item>
      <title>"32 czy 64 bity?" by anih</title>
      <description>&lt;p&gt;co do psyco to jest ono jeszcze na tyle niedopracowane ze jesli wlaczy sie optymalizacje calego django tzn wszystkich funkcji to nawet nie odpalimy django w trybie testowym(python manage.py runserver).
jesli wybierzemy tylko czesc funkcji to django jest tylko &amp;#8220;lekko&amp;#8221; niestabilne wiec trzeba bardzo uwazac gdzie sie uzywa optymalizacji psyco, mozna probowac podpiac psyco pod funkcje odpowiedzialne za templaty to powinno dac niezlego kopa przynajmniej tak twierdza deweloperzy psyco&lt;/p&gt;</description>
      <pubDate>Sat, 09 Feb 2008 15:44:09 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:473ba88a-b79c-4702-a9cd-53db1acb0c9e</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1354</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by matrut</title>
      <description>&lt;p&gt;temat zastosowania fork()&amp;#8217;a i watkow w odniesieniu do aplikacji serwerowych byl poruszany wiele razy&lt;/p&gt;


	&lt;p&gt;z reszta jest temu poswiecony jest art. (&lt;a href="http://www.kegel.com/c10k.html" rel="nofollow"&gt;http://www.kegel.com/c10k.html&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;mowienie co jest lepsze &amp;#8211; watki czy procesy ma sens w odniesieniu do konkretnej architektury, os&amp;#8217;a, a nawet stricto zadanej aplikacji&lt;/p&gt;


	&lt;p&gt;wg. mnie uzywanie watkow w linuxie jak i (free | open)bsd
nie przynosi zyskow a wrecz kaplikuje rozwoj aplikacji serwerowej&lt;/p&gt;


	&lt;p&gt;smialbym twierdzic, ze mimo powszechnego zachwalania freebsd pod katem wydajnosci port biblioteki libpth byl b. opozniony w stosunku do wersji linuxowej&lt;/p&gt;


	&lt;p&gt;opnie znanych:&lt;/p&gt;


	&lt;p&gt;wg. ksiazki  richarda stevensa &amp;#8216;unix &amp;#8211; programowanie uslug sieciowych&amp;#8217; &amp;#8211; w rozdziale poswieconym architekturze aplikacji serwerowych podkreslone sa zalety wielowatkowego wyprzedzajacego serwera tcp. warto dodac, ze autor swego rodzaju biblii dla developerow uzywal komercyjncyh wersji 
unix&amp;#8217;a a stan wiedzy datowany jest na koneic lat &amp;#8216;90.&lt;/p&gt;


	&lt;p&gt;zdaniem Steva Jurczyka &amp;#8211; autora IdeaWebServer ktory zachwala swoje rozwiazanie jako jedno z bardziej wydajnych &amp;#8211; hybrydka fork&amp;#8217;a + kqueue ; wspomnial o magicznej liczbie 10 000 polaczen ktore IdeaWebSerer jest w stanie obsluzyc 
(nie wnikajac przy tym w szczegoly)&lt;/p&gt;


	&lt;p&gt;wiec wniosek jeden &amp;#8211; jesli mowa o wydajnych aplikacjach serv. pod katem optymalizacji dla Linux&amp;#8217;a &amp;#8211; fork() &amp;#38; /dev/poll dla jader 2.6 i real time signals + fork() dla jader 2.4&lt;/p&gt;


	&lt;p&gt;ciekawe jestem jak wyglada sprawa wydajnosci watkow pod solarisem&lt;/p&gt;</description>
      <pubDate>Sat, 02 Feb 2008 01:34:30 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:cbb0d479-a1ff-4be8-9659-3c3fe7d760cb</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1343</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by climbus</title>
      <description>&lt;p&gt;1. S&#322;ysza&#322;em (nie sprawdza&#322;em), &#380;e Django nie jest thread safe.
2. Czy robili&#347;cie testy. Aplikacje webowe raczej nie maj&#261; skomplikowanej logiki i liczenia nie jest zbyt wiele. Ciekawi mnie jaka by&#322;a by r&#243;&#380;nica.
3, Czy rozpatrywali&#347;cie wariant pomi&#281;dzy: kilka proces&#243;w po kilka w&#261;tk&#243;w (teoretyzuj&#281;).
4. Ile mniej wi&#281;cej proces&#243;w przypada na jedn&#261; maszyn&#281;?&lt;/p&gt;</description>
      <pubDate>Thu, 31 Jan 2008 19:45:42 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:2ab5f1a3-add1-40b5-9493-98f58aa0db2a</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1337</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by anih</title>
      <description>&lt;p&gt;czy dobrze mi sie wydaje ze watki i procesy w linuxie maja podobna wydajnosc jesli chodzi o procesor, a tylko mniej ramu moga zrzerac?&lt;/p&gt;</description>
      <pubDate>Thu, 31 Jan 2008 17:06:14 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:d4807366-e7e4-46ea-88a2-de84d7fe4fef</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1336</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by R</title>
      <description>&lt;p&gt;Marek, a zak&#322;adaj&#261;c &#380;e przepisaliby&#347;cie grono i korzystali ze stackless pythona, jak du&#380;e korzy&#347;ci systemowe mogliby&#347;cie odnie&#347;&#263;? Czy korzystanie z w&#261;tk&#243;w jest wyra&#378;nie widoczne po przekroczeniu pewnego progu odwiedzalno&#347;ci serwisu?&lt;/p&gt;</description>
      <pubDate>Thu, 31 Jan 2008 16:17:38 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:97f9ee39-339e-4061-8803-b4010559da60</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1335</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by frrua</title>
      <description>&lt;p&gt;&amp;#8220;AJAX&amp;#8221; to przestarza&#322;y i ma&#322;o trafny akronim.
Wsp&#243;&#322;czesna nazwa dla tej technologii to &amp;#8220;Ajax&amp;#8221; (wielko&#347;&#263; u&#380;ytych liter makes the difference) i jest to nazwa, kt&#243;ra nie implikuje czy mamy do czynienia z po&#322;&#261;czeniem synchronicznym, czy asynchronicznym ani czy u&#380;ywamy XML-a, czy nie ;)&lt;/p&gt;</description>
      <pubDate>Thu, 31 Jan 2008 11:38:59 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:84e859c2-e8d6-495c-a7d7-84152401fc21</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1332</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by climbus</title>
      <description>&lt;p&gt;Ca&#322;y czas nie kumam czemu Django nie jest oparte na w&#261;tkach. Przecie&#380; to spora oszcz&#281;dno&#347;&#263;. Mo&#380;e troch&#281; wi&#281;cej pracy przy thread safe ale&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Wed, 30 Jan 2008 22:11:12 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:f4705cc3-9d5d-4b76-ac2e-946c4ab933ca</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1329</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by anih</title>
      <description>&lt;p&gt;OMG co ma AJAX do PHP ;/ grono jest napisane w django
AJAX &amp;#8211; Asynchronous JavaScript and XML
PHP &amp;#8211; jezyk skryptowy
DJANGO &amp;#8211; framework pythonowy&lt;/p&gt;</description>
      <pubDate>Tue, 29 Jan 2008 07:19:01 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:d97c3f63-508f-4090-9c8f-9585fd716535</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1322</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by tie</title>
      <description>&lt;p&gt;a ja mam takie pytanie &amp;#8211; do adminka :) &amp;#8211; grono napisane jest w AJAX czy PHP ?&lt;/p&gt;</description>
      <pubDate>Mon, 28 Jan 2008 18:44:30 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:d1bc77a1-75a8-4d43-9ba9-1db3653c031e</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1320</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by mariush</title>
      <description>&lt;p&gt;Trzymajcie tak dalej, jako nieliczni dzielicie sie wiedza techniczna i to na dobrym poziomie. Az milo sie wraca i czyta takie rzeczy&amp;#8230; :)&lt;/p&gt;</description>
      <pubDate>Sun, 27 Jan 2008 14:16:55 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:0d482dae-0070-4e80-a4cc-460043d1eb54</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1316</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by anih</title>
      <description>&lt;p&gt;czy moglibyscie opisac w jaki sposob django jest odpalone na poszczegolnych maszynach? bo jakos nie moge znalezc podobnego sposobu jak wasz w dokumentacji :)&lt;/p&gt;</description>
      <pubDate>Sat, 26 Jan 2008 10:29:10 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:dac6ffef-399d-4e9f-bb91-e58129a261eb</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1313</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by fijal</title>
      <description>&lt;p&gt;Na 32 bitach mozecie uzywac psyco (co prawda pamiec wam tylko od tego skoczy)&lt;/p&gt;</description>
      <pubDate>Fri, 25 Jan 2008 22:40:24 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:47dc038e-119d-4e07-b749-ddf9ba8307a2</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1312</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by Widmo</title>
      <description>&lt;p&gt;Wi&#281;cej, wi&#281;cej takich art&amp;#8217;&#243;w! :)&lt;/p&gt;</description>
      <pubDate>Tue, 22 Jan 2008 03:44:07 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:98b9a95b-c72a-41be-a477-0ae58682fc19</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1291</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by ukasz</title>
      <description>&lt;p&gt;Ole: testujemy wszystkie kombinacje, ale w naszym przypadku jajko 64 bitowe w praktyce nic nie zmieni&lt;/p&gt;


	&lt;p&gt;kmb: je&#347;li chodzi o r&#243;&#380;nice w u&#380;yciu procesora to 32 bity zjadaj&#261; oko&#322;o 5% procent wi&#281;cej (sumarycznie przy quad corach) w stosunku do 64 bit&#243;w, tak wi&#281;c na 64 bitach mamy ciut wi&#281;kszy zapas mocy procesora ale nijak nie idzie go wykorzysta&#263; bo mamy za ma&#322;o odpalonych proces&#243;w (ze wzgl&#281;du na limit ramu)&lt;/p&gt;</description>
      <pubDate>Fri, 18 Jan 2008 16:52:32 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:88554b3b-68cf-4cd6-8a24-b0e65a7cad73</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1225</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by matt</title>
      <description>&lt;p&gt;kmb, chyba kpisz prawda?&lt;/p&gt;</description>
      <pubDate>Fri, 18 Jan 2008 13:40:43 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:aea5944c-5b1e-4d4f-a5b0-e66283f8d16f</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1222</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by kmb</title>
      <description>&lt;p&gt;strach si&#281; ba&#263; jak serwis by zasuwa&#322; gdyby go przenie&#347;&#263; na platform&#281; 16 bitow&#261;.. Demon szybko&#347;ci! A gdyby jeszcze go napisa&#263; w asemblerze to ju&#380; nawet boje si&#281; my&#347;le&#263;..&lt;/p&gt;


	&lt;p&gt;A czy s&#261; jakie&#347; badania o ile wydajniejsza jest arch. 64 bitowa?&lt;/p&gt;</description>
      <pubDate>Fri, 18 Jan 2008 12:35:37 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:a1cfb577-ad54-452c-8c99-e41c39932b4f</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1221</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by R</title>
      <description>&lt;p&gt;Super artyku&#322;, jak reszta tutaj. Ciekawy i dobrze przedstawiony. Mo&#380;e cz&#281;&#347;ciej by&#347;cie co&#347; opisywali?&lt;/p&gt;</description>
      <pubDate>Fri, 18 Jan 2008 08:55:13 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:510b0d95-017b-4ad2-b2a0-0f7c52cb29bb</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1220</link>
    </item>
    <item>
      <title>"32 czy 64 bity?" by Ole</title>
      <description>&lt;p&gt;To mo&#380;na wzi&#261;&#263; kernel 64bit a ca&#322;e userspace zostawi&#263; na 32bit. Linuks nie ma z tym najmniejszego problemu. Je&#380;eli jeden proces nie potrzebuje &amp;gt; 2GB to jest to do&#347;&#263; dobre rozwi&#261;zanie.&lt;/p&gt;</description>
      <pubDate>Thu, 17 Jan 2008 14:02:42 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:f8f37e47-45fb-4544-aec1-99ba7637751d</guid>
      <link>http://itblog.grono.net/articles/2008/01/17/32-czy-64-bity#comment-1211</link>
    </item>
  </channel>
</rss>
