 Hola a todos y a todas. Hi everybody. We are, my name is Jose. My partner today is Emilio. We are here from Uruguay. Uruguay is a country you can search in Google. We are from the University of the Republic, La Universidad de la República of Uruguay. Okay. In the first part of the presentation will be a speak in Spanish and a few English. UDLR is the University of the Republic. It's the main University of Uruguay. The principal University of Uruguay is the main plus, plus, plus institution University of Uruguay. And we have a similar student, those students. 100,000. Sorry, 100,000 students. And we have 12,000 professors. And we have a lot of carers and 20 schools. We have 25 installation of models. 16 central users and 9 decentralized users. And we have a single sign, sorry, which she will add technology. Yes. In the 2020, the use of technology because the pandemic situation was intensive for the use of the system model online of the University. We in the Friday was declared the situation of the pandemic in Uruguay and the Monday, the University are functioning totally online. We have only one weekend for the transformation, for the adaptation, the systems for our model that will be functioning correctly. This also implied we need to make a migration of all installation of models for a new system, virtual system, to be able to function correctly. It is common in our University to have thousands of users giving tests and tests. And therefore it was very important for us to have a system that could support those thousands of users doing tests at the same time. Now Emilio is going to show us the system that we had to install so that we could support those tests that we needed to do. Okay, hi everyone. We are a little country but our University has a lot of users. A large number of users, it was necessary to set up a model system dedicated exclusively to carry out online evaluations. We decided to make the online evaluations in a separate server so it has no interference from the courses and activity. So we know the server and the database is dedicated only to the students attempting the quiz. Okay, we installed an environment, we'll show you later. And the question was how many students that supported at the same time of concurrent. So looking for an answer we decided to run a load test. We used a patch shape meter. The previous presentation was a good combination because this is performance testing and for automated performance testing shape meter is the tool, it's open source and one of the best tools. It's easy to use. With shape meter, like in the picture in the previous presentation where the robot was making the request with shape meter, the shape meter client generator makes the same HTTP requests to the server as a human with a web browser can do. So for the server it's the same. You have to take care of what content may be cached on the browser but you can script all that. Okay, we configured a middle quiz as a test data. We needed a test data, a test scenario with 16 questions in eight pages, two questions in each page, some small animations, multiple choice and other type of questions. This data was generated with 5,000 test users enrolled in the course. But we think what does it mean that the users enter at the same time and the critical moment in the quiz is the quiz start. So if you say the quiz is opens at 8 a.m. So at 8 a.m. all the students' thousands enter to the quiz. This is the critical moment for the server. But it's not the same if the thousand users enter in 10 seconds or if they enter in two minutes. It's different for the server. So we looked at the real data of some schools with large evaluations. For example, in this table, we looked at for evaluation with 2,500 users. And we saw, for example, that they looked at the pattern logs looking for the start attempt.php request. That is when the user clicks on the start attempt button. And 13% of the users enter in the first 10 seconds. The others enter a bit later. So this was an important input to simulate with Sheymeter with a timing similar to what we will see in production. This is the Sheymeter script. First, the users do the login to the system. In the real situation, the login is not in the last minute. They login with some minutes before the quiz starts. So we configured in Sheymeter a 10-minute ramp up time. I don't know if you know Sheymeter, but we configured, for example, 1,000 threads or virtual users. So you can configure. They can be entering. The threads can be launching in a time period. Then we used a synchronized timer that waits until all virtual users are logged in. And when all are logged in, they go to the next timer. And the good finding was that Sheymeter comes with a Gaussian random timer. And we found that with that timer, with a 50 seconds deviation, we can obtain a similar distribution as we see in real loads with real evaluations. That was important. Our infrastructure is very simple. It's not a cluster. We wanted to know how far we can go with only one application server. Maybe one application server doesn't support the load and we have to install a cluster. But how much one installation supports? This is our infrastructure, our reverse proxy. We use Debian, VMware, one application server with PHP, FPM, and database server. The only more costly component is we have a storage, an enterprise storage with fiber channel with SSD disk or fast disk. Okay, we started around the test. The test failed at first. In the first running, 200 users and it gives failures. And that were the bottlenecks that we detected, reached max DB connections, reached max Apache workers, and two high CPU load in app server. The first was increased the DB connection supported in my SQL. We augmented it to 700. And the server, if I correct me, changed it to Apache. MPM is multi-processing module. It's a multi-threader module opposed to pre-fork, which is the default MPM in Debian. We used Apache event and give a better, much better performance. So that was a good choice. And PHP FPM consumed much less RAM. OP cache, cache of PHP by code, and rise the processors for the application server, A212 CPU, because we saw that it was CPU intensive. It was the main hardware factor that influenced the performance. We run tests with 2,500 virtual users with no errors. That surprised us. We don't think that one single application server can support this number of users. And we read the documentation of Moodle, but perform a test with quizzes. The information is updated. You can find updated information in the Moodle documentation, so we think it's interesting. With 3,000, the performance was improved. We start the times. The max CPU sash, low liberation to the 100% was okay. Max quantity of Apache processes helps with the configuration of the event MPM and max processes of PHP FPM. Memory, it has 12 gigabytes. And it still has free memory. Don't need more RAM. Monitoring, other simulations. If you once can talk about these others. In conclusion, it's quite good. Got good results for only one application server. Simple deployment. It's not a cluster. It's only one application server, only one storage. No problem with the 5C systems or something like that. CPU intensive. So if you have money, buy more CPU, no more RAM, as in some patients it said. This system was used in production in more than 200 online evaluations with up to 1,200 students without problems that went okay. And the scripts were useful for testing our Moodle system in other universes. We shared the scripts and were used to test and see how much that supports. Our idea is to share this script and the results, the documentations, the configurations, the quiz, the MVC file with the users file so you can run this test in your environments. The script and load test were made by Valentina Barula which worked in our university. She's not here, but she did a great work. This is the link to the page. Awesome. Thank you. Our email address so Porte Eva Arroa, if you want to have some questions.