SPDK配置文件从INI到JSON的转换

为什么SPDK要使用JSON格式配置文件?

众所周知,配置文件是软件应用中常用的初始化参数的配置方式,而配置文件的格式有很多种。不同的配置文件格式有不同的用户友好性,比如Windows较早的开发者喜欢使用INI,java工程师喜欢使用properties,通用的编程喜欢yaml、JSON等格式。

1.1

SPDK里INI配置文件回顾

SPDK测试代码里的配置文件主要使用了INI格式和JSON格式。

INI文件是一个无固定标准格式的配置文件。文件格式语法比较简单, 分为:parameter,section和comments。SPDK里一般命名为.conf或.conf.in。动态创建,动态删除。

例如,创建一个Malloc块设备的bdev.conf:

[Malloc]    NumberOfLuns 6  LunSizeInMB 32

然后在shell脚本里,以-c参数加载上面的配置文件。例如运行bdevperf:

./spdk/test/bdev/bdevperf -c bdev.conf -q 256 -w read -o 196608 -t 5

SPDK测试和开发工程师们应该都很熟悉这种方式了。随着应用场合的变迁和扩大,INI格式也有其弊端,它只支持键值模式,而且只有一层分类,无嵌套。在处理例如对象(object)、记录(record)、结构体(struct)、字典(dictionary)、哈希表(hash table)、键值列表(keyed list),还有数组(array)、向量(vector)、列表(list),以及对象组成的数组等等时,显得非常不足,但JSON可以。这些特性使其逐步成为理想的数据交换语言。当今,JSON已被所有大型企业所采用,十大最受欢迎的 Web API 接口列表中多数是以 JSON格式开放数据的。JSON也在程序编码级别和文件存储上被广泛采用:在 Stack Overflow网站上,现在更多的是关于 JSON 的问题,而不是其他的数据交换格式。

现在SPDK逐步改为使用JSON-RPC格式的配置文件。从SPDK v20.07版本开始,我们进行了INI格式到JSON的转换工作。涉及到INI  conf解析的代码,运行时都会出现下面的提示:

conf.c: 613:spdk_conf_read: *ERROR*: INI configuration has been deprecated and will be removed in a future release. Please switch to JSON-RPC.

到SPDK v20.10,已经基本转换完成。在此过程中涉及到部分测试代码和脚本改动,原来的以INI格式配置文件为基础的测试方法,已经不能成功运行测试用例。为了方便SPDK用户迁移到JSON格式,我们适时地推出了这篇文章,希望提供一份有实用价值的参考。

1.2

JSON文件格式简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。

JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。


JSON的优点

  • 数据格式比较简单,易于读写,格式都是压缩的,占用带宽小。

  • 易于解析这种语言,客户端JavaScript可以简单的通过eval()进行JSON数据的读取(浏览器解析)。

  • 因为JSON格式能够直接为服务器端代码使用, 大大简化了服务器端和客户端的代码开发量, 但是完成的任务不变,且易于维护。能够被大多数后端语言支持。

JSON用于描述数据结构,有以下形式存在

  • 对象(object):一个对象以{开始,并以}结束。一个对象包含一系列未排序的名称/值对

  • 名称/值(collection):名称和值之间使用:隔开,一般的形式是:{name:value}

  • 值的有序列表(array):一个或者多个值用,分区后,使用[,]括起来就形成了这样的列表

  • 字符串:以""括起来的一串字符。

  • 数值:一系列0-9的数字组合,可以为负数或者小数。还可以用e或者E表示为指数形式。

  • 布尔值:表示为true或者false。

JSON格式更详细的描述可以参考RFC 4627。

二.SPDK里INI到JSON转换举例

SPDK里INI到JSON转换举例

在SPDK里,从INI带JSON的转换工作,主要涉及两部分:shell和C代码。

下面列举了常用的转换案例对照。

2.1

创建Malloc块设备

例如:spdk/examples/blob/hello_world里,原来的配置文件是hello_blob.conf:

[Malloc]    NumberOfLuns 1    LunSizeInMB  16    BlockSize 512

现在改为hello_blob.json

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值