290 likes | 638 Views
MACCE and Real-Time Schedulers. Steve Roberts EEL 6897. Who Am I?. Master’s in Modeling and Simulation Employed by Veraxx Engineering Corp. Undergraduate in Computer Engineering from UCF Worked in the simulation industry 4 years. Agenda. Discuss some different simulation issues
E N D
MACCE andReal-Time Schedulers Steve Roberts EEL 6897
Who Am I? • Master’s in Modeling and Simulation • Employed by Veraxx Engineering Corp. • Undergraduate in Computer Engineering from UCF • Worked in the simulation industry 4 years
Agenda • Discuss some different simulation issues • Define a scheduler or real-time executive • What is MACCE? • A MACCE configuration file • Conclusion • Questions
Some Simulation Issues • Real-Time cards • Interrupts • Multiple Language Support • Callbacks • Shared Memory • Multi-Threading
Real Time Cards • Sync cards • Provide interrupts • Interrupts can occur at different frequencies • More accurate than software interrupts
Multiple Language Support • Fortran • ADA/ADA 95 • C++ • C • Many simulators that are upgraded are comprised of legacy code and code from other simulators are pulled in to these legacy systems
Callbacks • A pointer to a function • Usually the function is in a high level language • The function pointer is passed to a low level language • May also exist within the same application (high level/high level)
Shared Memory • Block of memory used by different processes • Hardware shared memory • Multiple CPUs • Software shared memory • Single CPU
SCRAMNet • Shared Common Random Access Memory Network • Ring architecture • Fiber Optic Network • Large Throughput • >200MB/s • Automatically updates other CPUs
Multi-Threading • Multiple processes running at the same time • Multiple CPU • Multiple threads/callbacks on a single CPU
What Is A Scheduler? • A scheduler is a piece of software that is an integration point for a simulation. It is where all the variables are instantiated, where the functions are called, where proper timing and order of execution happens, and where a simulation is initialized, executed and terminated.
Why Have a Scheduler? • Simplifies and automates integration • Wraps many low level details • Automatically handles many low level details • Provides a common simulation environment • Provides simple debuggin and analysis tools
What is MACCE? • Marine Aviation Common Computing Environment • Manages and controls a Vehicle Simulation Environment in real-time and standalone modes • Linux based C++ architecture • Takes advantage of multiple CPUs
MACCE Architecture • Server • Client • Daemon • Graphical User Interface (GUI)
MACCE Server • This is the main process • Reads the configuration file • Creates the control table in shared memory • Starts all the clients • Monitors the command line • Does not perform real-time tasks
MACCE Server Cont. • Configures MACCE Memory Manager (M3) global areas • Can be started in debug mode • Debugger such as GDB can be used to step through any of the callbacks in the simulation
MACCE Client • MACCEC • This is a process • Connects to the control table • All callbacks are initiated by the client • One MACCEC per CPU is recommended • Has top level exception handling • Can manage multiple threads.
MACCE Daemon • Monitors a port for MACCE commands from MACCE Clients • Forwards those commands to the MACCE server • Runs on a Linux machine • One instance runs
MACCE GUI • More of a text-based UI • Provides interface for printing and watching variables • Provides timing statistics • Displays log messages • Used to terminate a MACCE Server instance
MACCE Memory Manager (M3) • Lays out shared data areas • Reads in a memory config file • Generates Fortran scan file • Generates C, C++ header file • Generates Ada records
MACCE Configuration File • Variables • SETENV • GLOBAL • Clocks • Modes • Callbacks • Tables • Threads • Processes
Sample MACCE Configuration • ////////// • // clocks • ////////// • [CLOCKS] • external = 0 • internal = 60 • standalone = 10 • ///////// • // modes • ///////// • [MODE] • name = STARTUP_MODE • description = Startup mode • type = ONESHOT • next = FREEFLIGHT_MODE • [MODE] • name = SHUTDOWN_MODE • description = Shutdown mode • type = ONESHOT • [MODE] • name = FREEFLIGHT_MODE • description = Freeflight mode • type = REALTIME
Cont… • ///////////// • // callbacks • ///////////// • [CALLBACK] • name = EOM_STARTUP_CALLBACK • description = Equations of motion startup callback • symbol = eom_startup • language = CPP • [CALLBACK] • name = EOM_SHUTDOWN_CALLBACK • description = Equations of motion shutdown callback • symbol = eom_shutdown • language = CPP • [CALLBACK] • name = EOM_SIMULATE_CALLBACK • description = Equations of motion simulate callback • symbol = eom_simulate • language = CPP • [CALLBACK] • name = UHF_RADIO_STARTUP_CALLBACK • description = UHF radio startup callback • symbol = uhf_radio_startup • language = CPP • [CALLBACK] • name = UHF_RADIO_SHUTDOWN_CALLBACK • description = UHF radio shutdown callback • symbol = uhf_radio_shutdown • language = CPP • [CALLBACK] • name = UHF_RADIO_SIMULATE_CALLBACK • description = UHF radio simulate callback • symbol = uhf_radio_simulate • language = CPP
Cont… • /////////// • // threads • /////////// • [THREAD] • name = STARTUP_THREAD • description = Startup Thread • mode = STARTUP_MODE • frequency = 1 • phase = 0 • callback = EOM_STARTUP_CALLBACK • callback = UHF_RADIO_STARTUP_CALLBACK • callback = TACAN_STARTUP_CALLBACK • [THREAD] • name = SHUTDOWN_THREAD • description = Shutdown Thread • mode = SHUTDOWN_MODE • frequency = 1 • phase = 0 • callback = EOM_SHUTDOWN_CALLBACK • callback = UHF_RADIO_SHUTDOWN_CALLBACK • callback = TACAN_SHUTDOWN_CALLBACK • [THREAD] • name = FREEFLIGHT_60HZ_THREAD • description = 60 hertz freeflight thread • mode = FREEFLIGHT_MODE • frequency = 1 • phase = 0 • callback = EOM_SIMULATE_CALLBACK • [THREAD] • name = FREEFLIGHT_30HZ_PHASE0_THREAD • description = 30 hertz phase 0 freeflight thread • mode = FREEFLIGHT_MODE • frequency = 2 • phase = 0 • callback = UHF_RADIO_SIMULATE_CALLBACK
Cont… • ///////////// • // processes • ///////////// • [PROCESS] • name = TUTORIAL1_PROCESS • description = tutorial1 process • filter = 1 • cpu = 1 • thread = STARTUP_THREAD • thread = SHUTDOWN_THREAD • thread = FREEFLIGHT_60HZ_THREAD • thread = FREEFLIGHT_30HZ_PHASE0_THREAD • thread = FREEFLIGHT_30HZ_PHASE1_THREAD
Conclusion • MACCE is a great tool that allows software engineers the ability to pull together many different pieces of simulators and combine them to build a new simulator • MACCE also provides software engineers with a debugging environment • MACCE can save time and headaches