目前的位置: 首页 学术信息 正文

ZDS 2023技术报告分享第46篇:Zephyr的POSIX路线图LTSv3


前言

2023年Zephyr开发者大会(ZDS)于6月27日至30日在捷克布拉格隆重举行。与以往两次不同,本次ZDS由Zephyr项目规划和管理,并作为首届嵌入式开源峰会(EOSS)的一部分进行。在这个令人期待已久的盛会中,全球Zephyr开发者们共同探讨了Zephyr实时操作系统(RTOS)的最新技术与发展趋势。作为一款开源、灵活和可扩展的嵌入式实时操作系统,Zephyr项目在2014年由英特尔发起,2016年作为Linux基金会项目正式面向公众启动,得到了全球范围内的广泛关注和采用。


ZDS 2023共70余个技术报告,涵盖了使用指导与展示、新功能与技术、架构修改与操作系统、多核异构与虚拟化、模拟器、测试、工业流程与代码管理、安全性、应用案例、工具与调试等丰富多样的内容。湖大嵌入式实验室的小伙伴们将对本次大会的所有技术报告进行逐一收集、整理与分享,尽最大努力为Zephyr开发者提供ZDS 2023技术报告的开发经验、实践成果以及解决方案的参考。


今天分享第46篇技术报告,由文俊杰整理,题目为:

Zephyr的POSIX路线图LTSv3



作者简介

Christopher Friedt是一个富有创造力的团队负责人。在他超过18年的职业生涯中,他已经发布了7款被全球数以百万计的消费者使用的移动电话,发布了数以万计的工业无线设备,并带领4家领先的加拿大科技公司完成了重要的软件重构过程。他是许多开源软件项目的重要贡献者,包括Linux内核和Zephyr实时操作系统。他喜欢在会议上发表关于从虚拟机到软件定义无线电的主题演讲。Chris目前的兴趣在于实时操作系统和推动无线物联网可能性的边界。Chris在Zephyr社区的角色包括LTSv2发布管理者,POSIX&FPGA维护者,并在其他多个领域担任合作者。Chris被列入Zephyr 2020年度十大社区贡献者。



Meta∞如何使用Zephyr?

  • Meta可扩展视频处理器(MSVP)

  • 为什么需要视频转码ASICs?

  • Facebook每天处理4亿份视频

  • 功耗、存储、性能

  • H264的吞吐量提高了9倍

  • VP9的吞吐量提高了50倍

  • 高质量点播(HQ VOD)的性能提高了6倍

  • 功耗降低了50%

  • AV1即将推出...

  • Meta训练和推断加速器(MTIA)

  • 为什么需要人工智能ASICs?

  • 数据流、广告、内容、排名...

  • DLRM模型:4.5GB到750GB

  • 功耗、存储、性能

  • 比今天的GPU效率提高了2倍

  • PyTorch 2.0

  • MTIA@ISCA 2023



Zephyr中POSIX的概述

The Way Back Machine(互联网档案馆)


Zephyr中POSIX的历史


为什么选择POSIX?

  • 可移植性

  • 成熟的API

  • 为10亿设备提供支持

  • 为20亿设备提供支持

  • 为160亿移动设备提供支持



LTSv3 的目标

高层次目标:

  • 提高可维护性

  • 改善应用程序/libc/工具链接口

  • 提高应用程序/库的可移植性


可维护性:

  • 将POSIX资源抽象为整数(在各种libc中共通的表示)

    • 例如pthread_mutex_t、pthread_t

  • 在POSIX中重复使用Zephyr的同步原语

    • 例如在内部使用k_mutex而不是pthread_mutex_t

  • fdtable -> zvfs

    • 可以被subsys/net、POSIX等引用的通用库

  • ARCH_POSIX ^ POSIX_API

    • ARCH_POSIX维护者 -> RFC #58305


接口:

  • 重要提示POSIX是一个接口而不是一个子系统

    • 用于支持POSIX的任何库代码应该是:

      - Zephyr本身的一部分

      - 尽可能小以支持接口

    • 必须记住避免分层违规

  • 支持标准的包含路径供第三方应用程序和库使用,例如  而不是

  • 使用Kconfig来管理POSIX特性测试宏,例如<unistd.h>而不是<posix/zephyr/unistd.h>

    • 用于libc/工具链头文件的标准接口

  • 支持使用外部libc/工具链的POSIX(例如IAR)

    • 当libc未提供POSIX声明时,Zephyr必须提供它们


可移植性:PSE51

  • 参考:IEEE 1003.1-2017

  • PSE51:最小的实时系统配置文件

    • 单线程或多线程进程,无文件系统,无用户或组支持,选定的选项

    • 在IEEE Std 1003.13中详细描述,还请参考man 7 posixoptions

  • 编译环境:<unistd.h>

    • #define_POSIX_AEP_REALTIME_MINIMAL 200312L

    • #define_POSIX_AEP_REALTIME_LANG_C99

  • 选项要求:

    • _POSIX_C_LANG_JUMP, _POSIX_SIGNALS, _POSIX_SINGLE_PROCESS,

    • _POSIX_THREADS_BASE, _POSIX_CLOCK_SELECTION, _POSIX_FSYNC,

    • _POSIX_MEMLOCK, _POSIX_MEMLOCK_RANGE, _POSIX_REALTIME_SIGNALS, 

    • _POSIX_SHARED_MEMORY_OBJECTS, _POSIX_SYNCHRONIZED_IO, _POSIX_CPUTIME,

    • _POSIX_THREAD_PRIO_INHERIT, _POSIX_THREAD_PRIO_PROTECT, _POSIX_TIMEOUTS,

    • _POSIX_TIMERS

  • 例外情况:

    • POSIX_DEVICE_IO文件操作,scanf(),vscanf()

    • POSIX_SINGLE_PROCESS confstr(),*env()

    • _POSIX_SPORADIC_SERVER(内核?)


可移植性:PSE51_POSIX_SINGLE_PROCESS

  • 完成度:33%

  • 剩余任务:2

    • sysconf()-非常有用,还有RFC#56670

    • uname()-也有一定用途

  • 例外情况:

    • confstr()、environ、getenv()、setenv()、unsetenv()


可移植性:PSE51_POSIX_SIGNALS

  • 完成度:12.5%

  • 剩余任务:7

    • sigaction()?, sigaddset(), sigdelset(), sigemptyset(), sigfillset(), sigismember(), sigpending()

  • 例外情况:

    • alarm(), kill(), pause(), raise(), signal(), sigprocmask(), sigsuspend(), sigwait()

  • 注意事项:

    • 通过一些努力,甚至可以创建每个线程的信号处理程序

    • PSE51无法支持隐式影响整个进程的信号,因为只有一个进程

    • 可能需要一些底层修改来创建取消点




可移植性:PSE51_POSIX_THREADS_BASE

  • 完成度:76%

  • 剩余任务:12

    • pthread_atfork()

    • pthread_barrierattr_destroy(), pthread_barrierattr_init()

    • pthread_barrierattr_getpshared(), pthread_barrierattr_setpshared()

    • pthread_cleanup_pop(), pthread_cleanup_push()

    • pthread_equal()

    • pthread_kill()

    • pthread_sigmask()

    • pthread_setcancelstate(), pthread_testcancel()

  • 例外情况:无!


选项要求:_POSIX_CLOCK_SELECTION

  • 完成度:0%

  • 剩余任务:3

    • pthread_condattr_getclock(), pthread_condattr_setclock(), clock_nanosleep()

  • 例外情况:无

  • 注意事项:Implies _POSIX_TIMERS


选项要求:_POSIX_SHARED_MEMORY_OBJECTS

  • 完成度:0%

  • 剩余任务:4

    • mmap()

    • munmap()    

    • shm_open()

    • shm_unlink()

  • 例外情况:无!


选项要求:_POSIX_CPUTIME

  • 完成度:0%

  • 剩余任务:1

    • clock_getcpuclockid()

  • 例外情况:无!

  • 注意事项:

    • Implies_POSIX_TIMERS

    • 影响:每个CPU计数器!

      - 设备树布尔属性:cpu-counter


选项要求:_POSIX_TIMERS

  • 完成度:77%

  • 剩余任务:2

    • clock_getres(),timer_getoverrun()

  • 例外情况:

    • aio_suspend()(不在 1003.1-2017 规范中)

  • 注意事项:

    • 这应该在 Zephyr 层完成,POSIX变成了Zephyr的薄包装层(#19030、#40099),CLOCK_MONOTONIC-> K_CLOCK_MONOTONIC,k_nanosleep() 等等

    • 对于例如802.15.4中的时间同步通道跳频(TSCH)非常相关

    • 设备树中官方选择的Zephyr节点

    • zephyr,real_time_clock=&rtc0

    • zephyr,monotonic_clock=&cpu_counter_0


进展如何

  • 自从成为维护者以来,在6个月后,已完成9项任务

  • 在经过10个月的工作后,成功将eventfd_read() 和eventfd_write()的性能提升了10倍多

  • 在经过11个月的工作后,成功将pthread_create()和pthread_join()的性能提升了多少倍,需要根据具体数据来确定:

  • 在经过12个月的工作后,已完成了38项任务中的54项任务,完成率为70%



下一步

动态线程堆栈

  • 动态Zephyr线程堆栈几乎已经完成!

  • 这是一个巨大的进展,不仅将有助于正确支持 pthreads,而且(作为结果)

    • ISO C11线程()

    • ISO C++11 std::thread、std::mutex、std::condition_variable等等

    • 其他编程语言?

  • 提供了简单的API用于池和堆分配(因此也适用于安全关键应用)

    • k_thread_stack_allocate(..)

    • k_thread_stack_free(..)

  • 与Intel的最后一刻合作令人难以置信

  • 即将推出...


CONFIG_ARCH_POSIX && CONFIG_POSIX_API

  • 如果一切顺利,将能够在native_posix和 native_posix_64上构建/运行/测试Zephyr的POSIX API

  • 实际上,还可以在native_sim和native_sim_64上进行构建/运行(新的板正在添加过程中)

  • 最近的工作由POSIX架构维护者在架构会议上介绍



拿取那些容易获取的成果


  • 将剩余任务细分成更小、更易管理的任务的好消息是,其中很大一部分任务都很容易实现

  • 这是新的 Zephyr 贡献者的绝佳机会!

  • 欢迎POSIX 合作伙伴!已经是Zephyr贡献者的人可以将他们的名字列入MAINTAINERS.yml文件



缺失的 POSIX 函数列表及其简单实现:

sysconf(),uname(),sigaddset(),sigdelset(),sigemptyset(),sigfillset(),sigismember(),sigpending(),pthread_atfork(),pthread_barrierattr_destroy(),pthread_barrierattr_init(),pthread_barrierattr_getpshared(),pthread_barrierattr_setpshared(),pthread_cleanup_pop(),pthread_cleanup_push(),pthread_equal(),pthread_kill(),pthread_sigmask(),pthread_condattr_getclock(),pthread_condattr_setclock(),clock_getcpuclockid()



上一条:ZDS 2023技术报告分享第47篇:在Zephyr中使用Thrift RPC框架 下一条:ZDS 2023技术报告分享第45篇:使用Zephyr、Android和Thingsboard酿造啤酒

关闭

嵌入式与网络计算湖南省重点实验室
版权所有 © 2023 湖南大学