{"id":318,"date":"2014-03-26T20:57:58","date_gmt":"2014-03-26T20:57:58","guid":{"rendered":"http:\/\/blogs.nd.edu\/devops\/?p=318"},"modified":"2014-03-27T15:42:57","modified_gmt":"2014-03-27T15:42:57","slug":"why-we-test","status":"publish","type":"post","link":"https:\/\/sites.nd.edu\/devops\/2014\/03\/26\/why-we-test\/","title":{"rendered":"Why We Test"},"content":{"rendered":"<p>Despite design principles, despite best intentions, things can go wrong. \u00a0This is true when all of the design parameters are quantifiable, as exhibited by this spectacular engine failure:<a href=\"http:\/\/blogs.nd.edu\/devops\/files\/2014\/03\/F1EngineFail.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-320 aligncenter\" alt=\"F1EngineFail\" src=\"http:\/\/blogs.nd.edu\/devops\/files\/2014\/03\/F1EngineFail-300x199.jpg\" width=\"300\" height=\"199\" srcset=\"https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/F1EngineFail-300x199.jpg 300w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/F1EngineFail-450x300.jpg 450w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/F1EngineFail.jpg 597w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>\u00a0What happens when some of the design constraints are not fully understood? \u00a0Specifically, consider the following excerpt taken from Amazon&#8217;s page detailing instance specifications:<\/p>\n<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td>Instance Family<\/td>\n<td>Instance Type<\/td>\n<td>Processor Arch<\/td>\n<td>vCPU<\/td>\n<td>ECU<\/td>\n<td>Memory (GiB)<\/td>\n<td>Instance Storage (GB)<\/td>\n<td>EBS-optimized Available<\/td>\n<td>Network Performance<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div>\n<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td valign=\"top\">Storage optimized<\/td>\n<td valign=\"top\">i2.xlarge<\/td>\n<td valign=\"top\">64-bit<\/td>\n<td valign=\"top\">4<\/td>\n<td valign=\"top\">14<\/td>\n<td valign=\"top\">30.5<\/td>\n<td valign=\"top\">1 x 800 SSD<\/td>\n<td valign=\"top\">Yes<\/td>\n<td valign=\"top\">Moderate<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">Storage optimized<\/td>\n<td valign=\"top\">i2.2xlarge<\/td>\n<td valign=\"top\">64-bit<\/td>\n<td valign=\"top\">8<\/td>\n<td valign=\"top\">27<\/td>\n<td valign=\"top\">61<\/td>\n<td valign=\"top\">2 x 800 SSD<\/td>\n<td valign=\"top\">Yes<\/td>\n<td valign=\"top\">High<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">Storage optimized<\/td>\n<td valign=\"top\">i2.4xlarge<\/td>\n<td valign=\"top\">64-bit<\/td>\n<td valign=\"top\">16<\/td>\n<td valign=\"top\">53<\/td>\n<td valign=\"top\">122<\/td>\n<td valign=\"top\">4 x 800 SSD<\/td>\n<td valign=\"top\">Yes<\/td>\n<td valign=\"top\">High<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">Storage optimized<\/td>\n<td valign=\"top\">i2.8xlarge<\/td>\n<td valign=\"top\">64-bit<\/td>\n<td valign=\"top\">32<\/td>\n<td valign=\"top\">104<\/td>\n<td valign=\"top\">244<\/td>\n<td valign=\"top\">8 x 800 SSD<\/td>\n<td valign=\"top\">&#8211;<\/td>\n<td valign=\"top\">10 Gigabit*4<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">Storage optimized<\/td>\n<td valign=\"top\">hs1.8xlarge<\/td>\n<td valign=\"top\">64-bit<\/td>\n<td valign=\"top\">16<\/td>\n<td valign=\"top\">35<\/td>\n<td valign=\"top\">117<\/td>\n<td valign=\"top\">24 x 2,048*3<\/td>\n<td valign=\"top\">&#8211;<\/td>\n<td valign=\"top\">10 Gigabit*4<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">Storage optimized<\/td>\n<td valign=\"top\">hi1.4xlarge<\/td>\n<td valign=\"top\">64-bit<\/td>\n<td valign=\"top\">16<\/td>\n<td valign=\"top\">35<\/td>\n<td valign=\"top\">60.5<\/td>\n<td valign=\"top\">2 x 1,024<br \/>\nSSD*2<\/td>\n<td valign=\"top\">&#8211;<\/td>\n<td valign=\"top\">10 Gigabit*4<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">Micro instances<\/td>\n<td valign=\"top\">t1.micro<\/td>\n<td valign=\"top\">32-bit or<br \/>\n64-bit<\/td>\n<td valign=\"top\">1<\/td>\n<td valign=\"top\">Variable*5<\/td>\n<td valign=\"top\">0.615<\/td>\n<td valign=\"top\">EBS only<\/td>\n<td valign=\"top\">&#8211;<\/td>\n<td valign=\"top\">Very Low<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>10 Gigabit is a measure we can understand. \u00a0But what does Moderate mean? \u00a0How does it compare to High, or Very Low? \u00a0It is possible to find out, but only if we test.<\/div>\n<p>According to Amazon&#8217;s <a title=\"Amazon instance types\" href=\"http:\/\/aws.amazon.com\/ec2\/instance-types\/\">page on instance types<\/a>\u00a0(emphasis added):<\/p>\n<blockquote><p>Amazon EC2 allows you to provision a variety of instances types, which provide different combinations of CPU, memory, disk, and networking. Launching new instances and running tests in parallel is easy, and <strong>we recommend measuring the performance of applications to identify appropriate instance types and validate application architecture<\/strong>. We also recommend rigorous load\/scale testing to ensure that your applications can scale as you intend.<\/p><\/blockquote>\n<p>Using <a href=\"http:\/\/loaduiweb.org\">LoadUIWeb<\/a> by <a href=\"http:\/\/smartbear.com\">Smartbear<\/a>, we were able to take a given workload and run it on different instance types to gain a better understanding of the performance differences. \u00a0Running 100 simultaneous virtual users with a 9 millisecond think time between pages, we ran against an M1.small and an M1.medium. \u00a0Here is are some pictures to illustrate what we discovered:<\/p>\n<p>M1.small performance test output:<\/p>\n<p><a href=\"http:\/\/blogs.nd.edu\/devops\/files\/2014\/03\/Unknown-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-323 aligncenter\" alt=\"Unknown-2\" src=\"http:\/\/blogs.nd.edu\/devops\/files\/2014\/03\/Unknown-2-300x175.png\" width=\"300\" height=\"175\" srcset=\"https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Unknown-2-300x175.png 300w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Unknown-2-1024x600.png 1024w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Unknown-2-500x293.png 500w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Unknown-2.png 1108w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><a href=\"http:\/\/blogs.nd.edu\/devops\/files\/2014\/03\/Small.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-324 aligncenter\" alt=\"Small\" src=\"http:\/\/blogs.nd.edu\/devops\/files\/2014\/03\/Small-300x194.png\" width=\"300\" height=\"194\" srcset=\"https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Small-300x194.png 300w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Small-1024x663.png 1024w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Small-462x300.png 462w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Small.png 1214w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>M1.medium performance test output:<\/p>\n<p><a href=\"http:\/\/blogs.nd.edu\/devops\/files\/2014\/03\/Unknown-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-321 aligncenter\" alt=\"Unknown-1\" src=\"http:\/\/blogs.nd.edu\/devops\/files\/2014\/03\/Unknown-1-300x205.png\" width=\"300\" height=\"205\" srcset=\"https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Unknown-1-300x205.png 300w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Unknown-1-1024x703.png 1024w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Unknown-1-436x300.png 436w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Unknown-1.png 1117w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/blogs.nd.edu\/devops\/files\/2014\/03\/Medium.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-325 aligncenter\" alt=\"Medium\" src=\"http:\/\/blogs.nd.edu\/devops\/files\/2014\/03\/Medium-300x199.png\" width=\"300\" height=\"199\" srcset=\"https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Medium-300x199.png 300w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Medium-1024x681.png 1024w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Medium-450x300.png 450w, https:\/\/sites.nd.edu\/devops\/files\/2014\/03\/Medium.png 1196w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Looking at the numbers, we see that the the response time of the small is roughly twice that of the medium. \u00a0As neither CPU, memory, or disk activity were constraints, this serves as a warning to us &#8211; the quality of service limitations placed on different instance types must be taken into consideration when doing instance size analysis.<\/p>\n<p>When in doubt, test it out!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Despite design principles, despite best intentions, things can go wrong. \u00a0This is true when all of the design parameters are quantifiable, as exhibited by this spectacular engine failure:\u00a0What happens when some of the design constraints are not fully understood? \u00a0Specifically, &hellip; <a href=\"https:\/\/sites.nd.edu\/devops\/2014\/03\/26\/why-we-test\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1551,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[65088,65095],"tags":[],"class_list":["post-318","post","type-post","status-publish","format-standard","hentry","category-aws","category-cloud-infrastructure"],"_links":{"self":[{"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/posts\/318","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/users\/1551"}],"replies":[{"embeddable":true,"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/comments?post=318"}],"version-history":[{"count":5,"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/posts\/318\/revisions"}],"predecessor-version":[{"id":330,"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/posts\/318\/revisions\/330"}],"wp:attachment":[{"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/media?parent=318"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/categories?post=318"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/tags?post=318"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}