{"id":137,"date":"2015-10-22T11:47:30","date_gmt":"2015-10-22T09:47:30","guid":{"rendered":"http:\/\/beta.xpnti.net\/?page_id=137"},"modified":"2015-10-22T11:58:07","modified_gmt":"2015-10-22T09:58:07","slug":"rendimiento-por-vcpu","status":"publish","type":"page","link":"https:\/\/www.xpnti.net\/es\/rendimiento-por-vcpu\/","title":{"rendered":"Rendimiento por vCPU"},"content":{"rendered":"<h3>\u00bfPor qu\u00e9 es \u00fatil un alto rendimiento por core si tengo aplicaciones multi-hilo?<\/h3>\n<div id=\"attachment_141\" style=\"width: 310px\" class=\"wp-caption alignright\"><a href=\"https:\/\/commons.wikimedia.org\/wiki\/File%3ALey_de_Amdahl.svg\" target=\"_blank\"><img aria-describedby=\"caption-attachment-141\" loading=\"lazy\" class=\"size-medium wp-image-141\" src=\"http:\/\/beta.xpnti.net\/wp-content\/uploads\/2015\/10\/648px-Ley_de_Amdahl.svg_-300x225.png\" alt=\"Representaci\u00f3n gr\u00e1fica de la ley de Amdahl. La mejora en la velocidad de ejecuci\u00f3n de un programa como resultado de la paralelizaci\u00f3n est\u00e1 limitada por la porci\u00f3n del programa que no se puede paralelizar. Por ejemplo, si el 10% del programa no puede paralelizarse, el m\u00e1ximo te\u00f3rico de aceleraci\u00f3n utilizando la computaci\u00f3n en paralelo ser\u00eda de 10x no importa cu\u00e1ntos procesadores se utilicen\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.xpnti.net\/wp-content\/uploads\/2015\/10\/648px-Ley_de_Amdahl.svg_-300x225.png 300w, https:\/\/www.xpnti.net\/wp-content\/uploads\/2015\/10\/648px-Ley_de_Amdahl.svg_-285x214.png 285w, https:\/\/www.xpnti.net\/wp-content\/uploads\/2015\/10\/648px-Ley_de_Amdahl.svg_.png 648w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-141\" class=\"wp-caption-text\">Representaci\u00f3n gr\u00e1fica de la ley de Amdahl. La mejora en la velocidad de ejecuci\u00f3n de un programa como resultado de la paralelizaci\u00f3n est\u00e1 limitada por la porci\u00f3n del programa que no se puede paralelizar. Por ejemplo, si el 10% del programa no puede paralelizarse, el m\u00e1ximo te\u00f3rico de aceleraci\u00f3n utilizando la computaci\u00f3n en paralelo ser\u00eda de 10x no importa cu\u00e1ntos procesadores se utilicen<\/p><\/div>\n<p>Salvo contadas excepciones, cada petici\u00f3n de usuario pasa por una parte secuencial, ya sea porque cada petici\u00f3n se ejecuta en un solo hilo o bien porque en alg\u00fan momento tenemos que sincronizar los hilos.<\/p>\n<p>Uno de los ejemplos m\u00e1s claros es un <em>stack<\/em> de una aplicaci\u00f3n Web con PHP y MySQL, llega la petici\u00f3n al motor PHP (v\u00eda Apache, PHP-FPM, etc&#8230;), se asigna un hilo\/proceso y lo tendremos ocupado hasta que termine la petici\u00f3n, si el c\u00f3digo hace peticiones a MySQL (o Redis, o Memcache, o casi cualquier servicio), a esa petici\u00f3n se le asignar\u00e1 un hilo (uno solo) que mirar\u00e1 en los datos, agregar\u00e1, filtrar\u00e1, etc&#8230; y volver\u00e1 a PHP.<\/p>\n<p>Por ejemplo, tanto <a href=\"https:\/\/www.percona.com\/blog\/2014\/01\/07\/increasing-slow-query-performance-with-parallel-query-execution\/\" target=\"_blank\">MySQL<\/a> como <a href=\"https:\/\/wiki.postgresql.org\/wiki\/Parallel_Query_Execution\" target=\"_blank\">PostgreSQL<\/a>\u00a0solo soportan paralelismo en el lado cliente, tienes que abrir varias consultas simult\u00e1neas en varios hilos o as\u00edncronas y agregar los datos que interesan mediante c\u00f3digo en cliente.<\/p>\n<p>Si el cuello de botella es la CPU, un procesador a 3 GHz entregar\u00e1 el doble de r\u00e1pido las p\u00e1ginas que un procesador de 1.5 Ghz, aunque si tenemos el doble de cores en uno de 1.5 GHz puede que consigamos el mismo n\u00famero de peticiones por segundo (throughput) pero con el doble de latencia, as\u00ed que podr\u00edamos dar servicio al mismo n\u00famero de usuarios pero con una calidad de servicio peor.<\/p>\n<p>En entornos multi-hilo en la misma petici\u00f3n, estilo SQL Server, Hadoop, etc&#8230; tenemos que tener en cuenta cuanto tiempo estamos en ejecuci\u00f3n secuencial y cuanto en paralelo. Ya que funcionan de forma muy parecida, tenemos algoritmos que se basan en MapReduce, la parte paralela (Map) si que aprovecha la multitud de cores, pero la parte secuencial (Reduce) se ejecuta en uno solo.<\/p>\n<p>Hace ya tiempo (1967), <a href=\"https:\/\/es.wikipedia.org\/wiki\/Ley_de_Amdahl\" target=\"_blank\">Gene Amdalh propuso la ley que lleva su nombre<\/a>\u00a0donde entre otras cosas se puede deducir que la mejora por paralelizar una parte del proceso estar\u00e1 finalmente limitada por la parte secuencial y de aqu\u00ed no bajaremos<\/p>\n<h3>Por todo esto, todos nuestros servidores est\u00e1n usando el m\u00e1ximo de tiempo las opciones de Turbo, los tenemos en modo alto rendimiento y son de la gama que Intel llama \u00abXeon E5 Frequency Optimized\u00bb<\/h3>","protected":false},"excerpt":{"rendered":"<p>\u00bfPor qu\u00e9 es \u00fatil un alto rendimiento por core si tengo aplicaciones multi-hilo? Salvo contadas excepciones, cada petici\u00f3n de usuario pasa por una parte secuencial, ya sea porque cada petici\u00f3n se ejecuta en un solo hilo o bien porque en alg\u00fan momento tenemos que sincronizar los hilos. Uno de los ejemplos m\u00e1s claros es un<a href=\"https:\/\/www.xpnti.net\/es\/rendimiento-por-vcpu\/\">[&#8230;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-fullwidth.php","meta":[],"_links":{"self":[{"href":"https:\/\/www.xpnti.net\/es\/wp-json\/wp\/v2\/pages\/137"}],"collection":[{"href":"https:\/\/www.xpnti.net\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.xpnti.net\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.xpnti.net\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xpnti.net\/es\/wp-json\/wp\/v2\/comments?post=137"}],"version-history":[{"count":6,"href":"https:\/\/www.xpnti.net\/es\/wp-json\/wp\/v2\/pages\/137\/revisions"}],"predecessor-version":[{"id":145,"href":"https:\/\/www.xpnti.net\/es\/wp-json\/wp\/v2\/pages\/137\/revisions\/145"}],"wp:attachment":[{"href":"https:\/\/www.xpnti.net\/es\/wp-json\/wp\/v2\/media?parent=137"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}