Actions

Difference between revisions of "Real-time response of the Embedded Linux system on BeagleBone Black Wireless"

From EdWiki

(Results)
(Resouces)
Line 317: Line 317:
  
 
==Resouces==
 
==Resouces==
*  [https://github.com/vishnugumme/linux Github Link for Source Files]
+
*  [https://github.com/vishnugumme/Linux_BeagleBoneBlack Github Link for Source Files]
 
* [http://derekmolloy.ie/kernel-gpio-programming-buttons-and-leds/ Loadable Interrupt module programming]
 
* [http://derekmolloy.ie/kernel-gpio-programming-buttons-and-leds/ Loadable Interrupt module programming]
 
* [https://embetronicx.com/tutorials/linux/device-drivers/sending-signal-from-linux-device-driver-to-user-space/ Loadable Interrupt module with signal to userspace programming]
 
* [https://embetronicx.com/tutorials/linux/device-drivers/sending-signal-from-linux-device-driver-to-user-space/ Loadable Interrupt module with signal to userspace programming]

Revision as of 09:35, 7 February 2021

Abstract

The project aims to extract the timing parameters that shows the real-time responsiveness of the Embedded Linux system ported on BeagleBone Black Wireless.

Introduction

Today's product developing cycle is getting complex so it is getting difficult to get the product in time with Bare Metal System. The Real-time operating system (RTOS) increases the efficiency in task management and resource sharing, due to this developer need not worry much about hardware-level coding in details which reduces time to develop the system.

The main difference between an RTOS and Desktop Operating Systems such as Linux is the response time to external events. For certain applications, Linux can be used because of its rich networking support which is the most important block of IoT applications, scalability, open-source and large community support. With the real-time RTOS patch, we can improve the responsiveness of the Linux system. In this project, we will find out how much the Linux system is responsive to external events. we will build the kernel with the PREEMPT_RT patch.

System Implementation

To quantize the responsiveness of the Linux system the following parameters needs to find out:
1. Interrupt Latency: It shows how fast the external event starts to get serviced in the Linux system.
2. End-to-end Response Time: It is the total time to finish the interrupt service part and user application service part and giving response back to the external event.
3. Complete Syscall Time: It contains the user to kernel context switch time, executing one small instruction in kernel mode and return context switch time from kernel space to userspace. small instruction will be to change signal on GPIO.
4. Context Switch Time: It is the time required to context switch from userspace to kernel space.
5.Userspace Time with MMAP: It is the time required to turn change signal on GPIO by bypassing kernel space with MMAP.
6. Kernel Space Time with Kernel Function: It is the time required to change the signal on GPIO with kernel function in kernel space.

Resources

Hardware

  • BeagleBone Black Wireless
  • Tiva Family Board TM4c123G6PM
  • USB to serial adapter
  • Linux Machine

Software

  • U-boot
  • Linux kernel_version=5.4.70-bone-rt-r38
  • Atomthread RTOS
  • Code Composer Studio
  • gnuplot
  • gtkterm

Load Simulation

The Linux system responsiveness depends on the state of the system, the state which can cause larger latency to service to the external needs to be simulated in order to benchmark this system. There are many sources that can cause this response latency major of them are Networking tasks, Page Fault, Larger ISRs of interrupts etc. For this project, we will stimulate both Networking Tasks and Page Fault.

Networking Task

In this task, a large file will be transferred from Linux Machine to BeagleBone, this will cause large traffic on board such that it will affect the response time of the system. The BeagleBone should be connected to a network where Linux Machine is connected.Follow Link:[[1]]
sudo scp file_name debian@board_ip:/home/
Also, the folder on BeagleBone board is mounted on Linux machine over the network.
sudo sshfs -o allow_other debian@board_ip:/home/ ~/project_folder

Page Fault

Page Fault occurs when there is the entry of the physical address of the data in MMU, which implies data is not present in the RAM. The putting entry into MMU, swapping of the data in and out takes time, this can cause the late response to interrupt. The logic used for simulating the page fault is that we take dynamic memory of size near to RAM size. Then randomly get the location from this memory and write any data into this location, this will cause the page fault most of the time.

int main()
{
   while(1)
   {
      //get pointer to the 500MB data using malloc() function
     // get a random number as index for data 
     //Write the data into that location pointed by index
   }
}

Tasks

These tasks are used to get the values for timing parameters mentioned above.

Interrupt Latency

Interrupt Latency task uses setup-1 of the project. The logic used to determine this timing parameter as in the following pseudo-code:

setup-1 of project
//BeagleBone Interrupt module for GPIO_48
irq_handler
{
 
   GPIO_49=high;
   //Perform necessary task
   GPIO_49=low;
}
 
//Tiva Board Code
isr_handler //for PD0 which receives signal from BeagleBone GPIO_49 pin.
{
   //Turn off timer
   //Store the number of ticks
   //Post the Semaphore for Task1 and Task2
}
 
Task1() //Priority=16
{
    while(1)
   {
      //wait for Semaphore
      //disable systick int
      //PD1 = 1
      //Start timer with known value
      //Enable Systick
      //PD1 = 0
   }
}
 
Task2() //Priority=17
{
    while(1)
   {
      //wait for Semaphore
      //Print on UART
   }
}

The response observed is as below in the graph:

Interrupt Latency without load
Interrupt Latency with load

End-to-end Response Time

This task uses the setup-1 of project.The logic used to determine this timing parameter as in the following pseudo-code:

//BeagleBone Interrupt module for GPIO_48
irq_handdler
{
   //Send a signal to the user task
}
 
usertask()
{
   while(!check)
   {
      GPIO_49=high;
      wait=0;
      //perforn necessary task
      GPIO_49=low;
}
 
signal_handler()
{
   check=1;
}

The response observed is as below in the graph:

End-to-end Response Time without load
End-to-end Response Time with load

Complete Syscall Time

This task uses the setup-2 of project.The logic used to determine this timing parameter as in the following pseudo-code:

setup-2 of project
int main()
{
   while(1)
   {
        GPIO_49=high;
        syscall();
        GPIO_49=low;
   }
}
 
//Tiva Board Code
isr_handler //for PD0 which receives signal from BeagleBone GPIO_49 pin.
{
   if(PD0 is high)
   {
      //turn on timer
   }
   else
   {
      //Turn off timer
      //Store the number of ticks
      //Post the Semaphore for Task1
   }
}
 
Task1() //Priority=16
{
    while(1)
   {
      //wait for Semaphore
      //Print on UART
   }
}

The response observed is as below in the graph:

Complete Syscall Time without load
Complete Syscall Time with load

Context Switch Time

This task uses the setup-2 of project. The logic used to determine this timing parameter as in the following pseudo-code:

int main()
{
   while(1)
   {
        GPIO_49=high;
        syscall();
   }
}
 
sycall()
{
   GPIO_49=low;
}
Context Switch Time without load
Context Switch Time with load

Userspace Time with MMAP

This task uses the setup-2 of project. The logic used to determine this timing parameter as in the following pseudo-code:

int main()
{
   while(1)
   {
        GPIO_49=high;
        //Access the LED multiple time
        GPIO_49=low;
   }
}
Here the LED toggled multiple times to get average value of this parameter.
Userspace Time with MMAP without load
Userspace Time with MMAP with load

Kernel Space Time with Kernel Function

This task uses the setup-2 of project. The logic used to determine this timing parameter as in the following pseudo-code:

int main()
{
   while(1)
   {
        syscall();
   }
}
 
sycall()
{
   GPIO_49=high;
   //Access the LED multiple times
   GPIO_49=low;
}

Here, we are toggling the LED 10 times to get average time required to change the signal at LED GPIO.

Kernel Space Time with Kernel Function without load
Kernel Space Time with Kernel Function with load

Results

Minimum, Maximum and Average values timing parameters are shown below in the table, the table represents the overall response of this Linux system.

Parameter min_time max_time avg_time
Interrupt Latency 38.37 us 114 us 60 us
Interrupt Latency(with load) 43.65 us 2.24 ms 80.52 us
End-to-end Response Time 52.72 us 136.27 us 58.86 us
End-to-end Response Time(with load) 53.32 us 37.36 ms 5.38 ms
Complete Syscall Time 2.3 us 8.4 ms 2.46 us
Complete Syscall Time(with load) 2.3 us 9.2 ms 5.9 us
Context Switch Time 49.42 ns 237 ns 2.38 us
Context Switch Time(with load) 95 ns 16.84 ms 15.91 us
Userspace Time with MMAP 230 ns 250 ns 230.45 ns
Userspace Time with MMAP(with load) 230 ns 953 us 2.49 us
Kernel Space Time with Kernel Function 1.12 us 6.53 us 1.15 us
Kernel Space Time with Kernel Function(with load) 1.22 us 1.9 ms 17.82 us

Some inferences from the tables are:

  • The worst-case response time observed in this project is 37.36 ms, It was with loading mentioned above in this project. This delay implies the system which requires response time less than this time is difficult to implement.

Resouces