【Rust日报】使用 sched-ext、Rust 和 Ubuntu 制作新的 Linux 调度器

flawz 发布新版本

flawz 是用于浏览安全漏洞 (CVE) 的终端 UI。

默认情况下,它使用 NIST 的漏洞数据库 (NVD),并在终端中提供具有不同主题选项的搜索和列表功能。

例如,要查看臭名昭著的 xz 漏洞的详细信息,请执行以下操作:

flawz --feeds 2024 --query xz

c24bbfb8ac2730a0a49fc10837848f40.png

这是图片

更多信息查看 GitHub,https://github.com/orhun/flawz

Tailcall 是一个用于构建高性能 GraphQL 后端的开源解决方案。

下面的文件是一个标准 .graphQL 文件,增加了一些内容,例如 @server 和 @http 指令。因此,基本上,我们指定 GraphQL 模式以及如何在同一个文件中解析该 GraphQL 模式,而无需编写任何代码!

schema
  @server(port: 8000, hostname: "0.0.0.0")
  @upstream(baseURL: "http://jsonplaceholder.typicode.com", httpCache: true) {
  query: Query
}

type Query {
  posts: [Post] @http(path: "/posts")
  user(id: Int!): User @http(path: "/users/{{.args.id}}")
}

type User {
  id: Int!
  name: String!
  username: String!
  email: String!
  phone: String
  website: String
}

type Post {
  id: Int!
  userId: Int!
  title: String!
  body: String!
  user: User @http(path: "/users/{{.value.userId}}")
}

现在,运行以下命令,使用上面创建的 jsonplaceholder.graphql 文件的完整路径启动服务器。

tailcall start ./jsonplaceholder.graphql

更多信息查看 GitHub, https://github.com/tailcallhq/tailcall

使用tokio来进行数据并行?

这是一篇博文,详细介绍了使用顺序执行和使用rayon包进行数据并行的过程,场景是我们有一个需要两个嵌套循环的算法,其中外部循环必须是连续的,但内部循环可以并行化。但rayon包的表现并不佳,后作者使用 hurdles包来进行屏障来达到优于顺序执行的效果,文章还是很值得一看的。

更多内容请看:https://sarah-ek.veganb.tw/blog/mt-async/

使用 sched-ext、Rust 和 Ubuntu 制作新的 Linux 调度器

在我们对 Rust 和 Ubuntu 的持续探索中,我们深入研究了一个实验性内核项目,该项目利用这些技术为 Linux 创建新的调度器。玩弄 CPU 调度策略一直是许多内核黑客和操作系统爱好者的梦想。然而,这些材料通常仍然属于少数具有丰富经验的核心内核开发人员的领域。但是,如果我们能有一种技术,允许我们在运行时热插拔 Linux 内核调度程序,并用用户空间程序替换它呢?这不仅将提供一种更安全的方式来测试调度策略,而且还将开辟一条道路,以提供针对特定工作负载配置文件(游戏、服务器、低延迟、省电、HPC 等)优化的调度器池,或专门为复杂的异构架构设计的调度器(例如,具有复杂拓扑结构的系统,例如快速内核与慢速内核混合、 与多个 NUMA 节点关联)。此外,由于 BPF 映射的可用性,我们甚至可以几乎完全在用户空间中实现完整的调度策略。这使我们能够访问各种各样的库和服务,以及调试和分析工具(例如,参见 Ubuntu 中关注性能和可观察性的最新趋势)。让我们看看如何使用 eBPF、sched-ext 和 Rust 在 Ubuntu 上将这个梦想变为现实。

更多内容请看:https://canonical.com/blog/crafting-new-linux-schedulers-with-sched-ext-rust-and-ubuntu


From 日报小组 [倪步烤Neo]

社区学习交流平台订阅:

  • Rust.cc论坛: 支持rss

  • 微信公众号:Rust语言学习交流

  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 GTK-rs 库需要先安装 GTK+3,可以在 Linux 系统下通过包管理安装,也可以在 Windows 和 macOS 下从官网下载安装程序进行安装。 安装 GTK+3 后,可以在 Rust 项目中添加 gtk 和 gdk 两个依赖: ```toml [dependencies] gtk = "0.9" gdk = "0.9" ``` 然后在 Rust 代码中引入 gtk 和 gdk 库: ```rust extern crate gtk; extern crate gdk; ``` 在 GTK-rs 中,主要有两种方式创建 GUI 窗口:Builder 和手动创建。下面分别介绍这两种方式。 ### 使用 Builder 创建 GUI 窗口 使用 Builder 可以通过 XML 文件描述 GUI 界面,然后使用 Rust 代码加载并显示窗口。以下是一个简单的例子: ```xml <?xml version="1.0" encoding="UTF-8"?> <interface> <object class="GtkWindow" id="main_window"> <property name="title">Hello, World!</property> <property name="default-width">400</property> <property name="default-height">300</property> <child> <object class="GtkLabel" id="label"> <property name="label">Hello, World!</property> </object> </child> </object> </interface> ``` 在 Rust 代码中,可以使用 gtk::Builder 加载并显示窗口: ```rust use gtk::prelude::*; use gtk::{Builder, Window}; fn main() { if let Err(err) = gtk::init() { eprintln!("Failed to initialize GTK: {}", err); return; } let glade_src = include_str!("path/to/glade/file.glade"); let builder = Builder::from_string(glade_src); let window: Window = builder.get_object("main_window").unwrap(); window.show_all(); gtk::main(); } ``` ### 手动创建 GUI 窗口 手动创建 GUI 窗口需要在 Rust 代码中定义窗口和窗口中的组件,以下是一个简单的例子: ```rust use gtk::prelude::*; use gtk::{Window, WindowType, Label}; fn main() { if let Err(err) = gtk::init() { eprintln!("Failed to initialize GTK: {}", err); return; } let window = Window::new(WindowType::Toplevel); window.set_title("Hello, World!"); window.set_default_size(400, 300); let label = Label::new(Some("Hello, World!")); window.add(&label); window.show_all(); gtk::main(); } ``` 以上代码中,创建了一个顶层窗口和一个标签组件,将标签添加到窗口中并显示窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值