CN111679934A - 基于raid信息的纠错方法、计算机可读存储介质及处理器 - Google Patents
基于raid信息的纠错方法、计算机可读存储介质及处理器 Download PDFInfo
- Publication number
- CN111679934A CN111679934A CN202010809757.0A CN202010809757A CN111679934A CN 111679934 A CN111679934 A CN 111679934A CN 202010809757 A CN202010809757 A CN 202010809757A CN 111679934 A CN111679934 A CN 111679934A
- Authority
- CN
- China
- Prior art keywords
- data
- dop
- reading
- error correction
- raid
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/38—Response verification devices
- G11C29/42—Response verification devices using error correcting codes [ECC] or parity check
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种基于RAID信息的纠错方法、计算机可读存储介质及处理器,纠错方法包括:当闪存颗粒出现BCH或RS不可纠的错误时,确定不可纠的错误数据A的地址;计算经过RAID恢复得到的值DRAID;对闪存颗粒进行三次读:选取三个读取阈值op、op+、op‑,其中op为闪存颗粒在当前情况下的最佳阈值,op+和op‑分别为op右侧的阈值和op左侧的阈值,根据读取阈值op、op+、op‑重读错误数据A,分别得到Dop、Dop+、Dop‑;将第二次读得到的数据Dop+和第三次读得到的数据Dop‑按照比特位进行异或操作,并判断异或的结果是否为1:若异或的结果为1,则用DRAID的对应比特位替代原数据;若异或的结果为0,则保持Dop的对应比特位。在不改变现有闪存控制器架构的基础上,提高纠错能力。
Description
技术领域
本发明涉及数据存储技术领域,具体涉及一种基于RAID信息的纠错方法。
背景技术
SSD(Solid State Drive)固态驱动器,俗称固态硬盘,是用固态电子存储芯片阵列而制成的硬盘,通常包含三个大的部分,即SSD主控芯片、存储数据的闪存颗粒阵列以及缓存芯片。固态硬盘具有传统机械硬盘不具备的快速读写、质量轻、能耗低以及体积小等特点,使得其中消费级市场,数据中心和企业级市场中都得到了广泛的应用。
闪存颗粒的一个特性就是在寿命周期内会出现不同程度的位反转,为了进一步提高SSD磁盘的寿命,存储厂商会在闪存颗粒之上通过ECC(Error Correction Code,随用户数据生成一起写入磁盘)纠错技术纠正位错误。在数据写入时采用ECC编码写入检验位,当数据由于位反转导致错误,读取数据时可以利用ECC检验位校正数据,并把正确数据返回主机。常用的ECC校正机制有BCH、RS和LDPC(Low density Parity Check),可以实现ECC对应纠错能力的数据错误的检验和恢复,如果错误的bit位数超过ECC的纠错能力(称为Uncorrectable bit error),ECC是无法检验恢复的。如果主控芯片中采取了RAID(Redundant Array of Inexpensive Disks)架构,出现了ECC不可纠的情况可以采用RAID机制来恢复。
随着闪存颗粒的更新换代,从SLC(单层存储单元)、MLC(双层存储单元)到TLC(三层存储单元)、QLC(四层存储单元),单位bit成本越来越低,寿命越来越短,即误码率会变高,对ECC的纠错能力也会要求更高。闪存厂家会在闪存颗粒中设置错误校验码空间(out-of-band,OOB空间),纠错算法BCH或RS的纠错能力会受到OOB大小的限制,越来越难满足TLC和QLC闪存的纠错能力要求。
发明内容
本发明为了克服以上技术的不足,提供了一种基于RAID信息的纠错方法,特别应用于固态存储中有RAID架构的SSD主控芯片的BCH或RS纠错算法的纠错能力增强,在不改变现有闪存控制器架构的基础上,提高纠错能力,进而大幅度提高闪存颗粒的寿命周期。
本发明克服其技术问题所采用的技术方案是:
一种基于RAID信息的纠错方法,包括如下步骤:
当闪存颗粒出现BCH或RS不可纠的错误时,确定不可纠的错误数据A的地址;
计算经过RAID恢复得到的值DRAID;
对闪存颗粒进行三次读:选取三个读取阈值op、op+、op-,其中op为闪存颗粒在当前情况下的最佳阈值,op+和op-分别为op右侧的阈值和op左侧的阈值,根据读取阈值op、op+、op-重读错误数据A,分别得到Dop、Dop+、Dop-;
将第二次读得到的数据Dop+和第三次读得到的数据Dop-按照比特位进行异或操作,并判断异或的结果是否为1:若异或的结果为1,则用DRAID的对应比特位替代原数据;若异或的结果为0,则保持读出数据的原数据Dop的对应比特位。
进一步地,设校验码数据为XOR,所述XOR=DATA1^DATA2^DATA3^…^DATAN,其中N的数量不受限制。
进一步地,计算经过RAID恢复得到的值DRAID,具体包括如下:
设DATAM出现了BCH或RS不可纠的错误,1≤M≤N;
根据数据的地址和RAID的绑定规则计算出同一RAID行中除DATAM以外的其他数据的地址,并读出除DATAM以外的同一RAID行的其他数据,其中XOR校验码数据也重新读一遍;
将经过BCH或RS之后的全部数据进行异或操作,得到DRAID,所述DRAID的运算式为:DRAID=XOR^DATA1^DATA2^…^DATA(M-1)^DATA(M+1)^…^DATAN。
进一步地,通过所述最佳阈值读取数据得到的数据,其出错比特数在可调阈值范围中读取数据出错比特数为最低。
进一步地,对闪存颗粒进行三次读的步骤中,
第一次读为闪存颗粒在当前情况下的最佳阈值op读出的数据,记为Dop;
第二次读为最佳阈值op右侧读出的数据,记为Dop+;
第三次读为最佳阈值op左侧读出的数据,记为Dop-。
进一步地,本发明所述的基于RAID信息的纠错方法还包括:将第二次读得到的数据Dop+和第三次读得到的数据Dop-按照比特位进行异或操作并根据异或的结果处理后,对处理后的数据进行解码。更进一步地,当出现BCH不可纠的错误,则对处理后的数据采用BCH解码;当出现RS不可纠的错误,则对处理后的数据采用RS解码。
本发明还提供了一种计算机可读存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行上述任一项所述的基于RAID信息的纠错方法。
本发明还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述任一项所述的基于RAID信息的纠错方法。
本发明的有益效果是:
本发明利用RAID的信息,有效标识出了读出比特的可靠性,使得可靠性高的位置数据保持不变,可靠性低的位置用新的可靠性更高的数据来代替,间接实现了NAND读出数据软信息携带,弥补了BCH和RS算法不能输入软信息的缺点,使得BCH和RS纠错算法的纠错能力不再受到OOB大小的限制,极大的提高了BCH和RS算法的纠错能力,延长了NAND闪存颗粒的寿命周期。
附图说明
图1为本发明实施例1所述的基于RAID信息的纠错方法的流程图。
图2为本发明实施例1所述的闪存颗粒的状态分布图。
具体实施方式
为了便于本领域人员更好的理解本发明,下面结合附图和具体实施例对本发明做进一步详细说明,下述仅是示例性的不限定本发明的保护范围。
实施例1、
本发明的实施例1提供了一种基于RAID信息的纠错方法,本实施例中,不限制闪存控制器中具体采用的是哪个层级的RAID结构,只要符合下面所述约束的条件即可。
设校验码数据为XOR,所述XOR=DATA1^DATA2^DATA3^…^DATAN,其中N的数量不受限制。
具体地,如图1所示,本实施例所述的基于RAID信息的纠错方法包括如下步骤:
步骤一、当闪存颗粒出现BCH或RS不可纠的错误时,记录下不可纠的错误数据A的地址,其中,不可纠的错误通过常规方法即可得到,比如通过软件保存出错位置得到,此处不再详细描述。
步骤二、计算经过RAID恢复得到的值DRAID。
传统的RAID恢复,除去需要恢复的数据,RAID行其他数据都需要满足不可纠的条件才能使RAID恢复成功,但本发明实施例所述的纠错方法没有此限制。传统的RAID恢复,除去需要恢复的数据,RAID行其他数据都需要满足不可纠的条件才能使RAID恢复成功;传统方法在此限制的约束下,RAID恢复的成功率其实很低,多用在生命早期出错比较少的时候,或者是单通道失效的场景,如果解除此限制的约束,可以更适普,也就是让该算法能够适用于绝大多数的出错场景,特别是在NAND的生命末期,一个RAID行中会有多份数据出错,所以本发明实施例所述的纠错方法解除了此限制,利用RAID恢复的流程和步骤来获得更多的数据信息。本实施例所述的计算经过RAID恢复得到的值DRAID具体包括如下步骤:
首先,设DATAM出现了BCH或RS不可纠的错误,1≤M≤N;
其次,根据数据的地址和RAID的绑定规则计算出同一RAID行中除DATAM以外的其他数据的地址,并读出除DATAM以外的同一RAID行的其他数据,其中XOR校验码数据也重新读一遍;
第三,将经过BCH或RS之后的全部数据,不论是否可纠,输出的结果都进行异或操作,从而得到DRAID,所述DRAID的运算式为:
DRAID=XOR^DATA1^DATA2^…^DATA(M-1)^DATA(M+1)^…^DATAN。
步骤三、对闪存颗粒进行三次读,其具体包括如下:
选取三个合适的读取阈值op、op+、op-,其中op为闪存颗粒在当前情况下的最佳阈值,其中,最佳阈值的作用是:通过所述最佳阈值读取数据得到的数据,其出错比特数在可调阈值范围中读取数据出错比特数为最低;最佳阈值的选取:可以通过供应商的命令直接得到,也可以通过调档读推算出;op+和op-分别为op右侧的阈值和op左侧的阈值;根据读取阈值op、op+、op-重读错误数据A,第一次读为闪存颗粒在当前情况下的最佳阈值op读出的数据,记为Dop;第二次读为最佳阈值op右侧读出的数据,记为Dop+;第三次读为最佳阈值op左侧读出的数据,记为Dop-;其中,Dop作为读出数据的原数据。
步骤四、将第二次读得到的数据Dop+和第三次读得到的数据Dop-按照比特位进行异或操作,并判断异或的结果是否为1:
若异或的结果为1,则用DRAID的对应比特位替代原数据,异或的结果为1,说明原数据的该比特位有可能出错,是不可信的,此时用可信度更高的DRAID的对应比特位代替原数据,使得原数据的出错率变低。
若异或的结果为0,则保持读出数据的原数据Dop的对应比特位,因为异或的结果为0,说明原数据该比特位的数据是可信的,所以保持该比特位的数据。
如图2所示为闪存颗粒的状态分布图,第二次读和第三次读的结果会随着闪存颗粒内部单元的电压值不同而不同,图中标明了三种不同的情况。具体地,如图2所示,状态位于2区的闪存颗粒内部单元,原数据是处于出错概率很高的状态,所以在本算法中用可信度更高的DRAID数据来代替;状态位于1区或者3区的闪存颗粒内部单元,原数据是处于出错概率很低的状态,所以在本算法中保持原数据。经过这一轮替换后,原数据的出错率会大大降低。
步骤五、对经过步骤四处理后的数据进行解码。
经过上述四个步骤的数据处理后,形成了一帧新的读出数据,需要对新的读出数据进行解码。解码时采用的算法应与纠错时的算法相对应,即,当出现BCH不可纠的错误,则对处理后的数据采用BCH解码;当出现RS不可纠的错误,则对处理后的数据采用RS解码。若解码成功,返回正确的数据;若解码失败,则返回数据出错处理流程。由于BCH解码和RS解码不是本发明的创新点,采用现有技术即可,此处不再赘述。
通过解码后,完成了本实施例所述的基于RAID信息的纠错方法的整个过程。由于传统的BCH和RS均不支持闪存颗粒的软信息,本实施例的关键点是在于不改变现有闪存控制器架构的前提下,利用闪存颗粒的软信息,通过将Dop+与Dop-异或操作后,将容易出错的数据标记出来,并用正确率较高的DRAID来替代可能出错的比特位,经过该处理之后的数据利用了闪存颗粒的软信息,从而大大提高了传统的BCH或RS的纠错能力,进而提高闪存颗粒的寿命。
实施例2、
本实施例提供了一种计算机可读存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行实施例1所述的基于RAID信息的纠错方法。
实施例3、
本实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行实施例1所述的基于RAID信息的纠错方法。
以上仅描述了本发明的基本原理和优选实施方式,本领域人员可以根据上述描述做出许多变化和改进,这些变化和改进应该属于本发明的保护范围。
Claims (9)
1.一种基于RAID信息的纠错方法,其特征在于,包括如下步骤:
当闪存颗粒中出现BCH或RS不可纠的错误时,确定不可纠的错误数据A的地址;
计算经过RAID恢复得到的值DRAID;
对闪存颗粒进行三次读:选取三个读取阈值op、op+、op-,其中op为闪存颗粒在当前情况下的最佳阈值,op+和op-分别为op右侧的阈值和op左侧的阈值,根据读取阈值op、op+、op-重读错误数据A,分别得到Dop、Dop+、Dop-;
将第二次读得到的数据Dop+和第三次读得到的数据Dop-按照比特位进行异或操作,并判断异或的结果是否为1:若异或的结果为1,则用DRAID的对应比特位替代原数据;若异或的结果为0,则保持读出数据的原数据Dop的对应比特位。
2.根据权利要求1所述的基于RAID信息的纠错方法,其特征在于,设校验码数据为XOR,所述XOR=DATA1^DATA2^DATA3^…^DATAN,其中N的数量不受限制。
3.根据权利要求2所述的基于RAID信息的纠错方法,其特征在于,计算经过RAID恢复得到的值DRAID,具体包括如下:
设DATAM出现了BCH或RS不可纠的错误,1≤M≤N;
根据数据的地址和RAID的绑定规则计算出同一RAID行中除DATAM以外的其他数据的地址,并读出除DATAM以外的同一RAID行的其他数据,其中XOR校验码数据也重新读一遍;
将经过BCH或RS之后的全部数据进行异或操作,得到DRAID,所述DRAID的运算式为:DRAID=XOR^DATA1^DATA2^…^DATA(M-1)^DATA(M+1)^…^DATAN。
4.根据权利要求1所述的基于RAID信息的纠错方法,其特征在于,通过所述最佳阈值读取数据得到的数据,其出错比特数在可调阈值范围中读取数据出错比特数为最低。
5.根据权利要求1所述的基于RAID信息的纠错方法,其特征在于,对闪存颗粒进行三次读的步骤中,
第一次读为闪存颗粒在当前情况下的最佳阈值op读出的数据,记为Dop;
第二次读为最佳阈值op右侧读出的数据,记为Dop+;
第三次读为最佳阈值op左侧读出的数据,记为Dop-。
6.根据权利要求1-5任一项所述的基于RAID信息的纠错方法,其特征在于,还包括:将第二次读得到的数据Dop+和第三次读得到的数据Dop-按照比特位进行异或操作并根据异或的结果处理后,对处理后的数据进行解码。
7.根据权利要求6所述的基于RAID信息的纠错方法,其特征在于,
当出现BCH不可纠的错误,则对处理后的数据采用BCH解码;
当出现RS不可纠的错误,则对处理后的数据采用RS解码。
8.一种计算机可读存储介质,其特征在于,所述存储介质包括存储的程序,其中,所述程序运行时执行权利要求1-7任一项所述的基于RAID信息的纠错方法。
9.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1-7任一项所述的基于RAID信息的纠错方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010809757.0A CN111679934B (zh) | 2020-08-13 | 2020-08-13 | 基于raid信息的纠错方法、计算机可读存储介质及处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010809757.0A CN111679934B (zh) | 2020-08-13 | 2020-08-13 | 基于raid信息的纠错方法、计算机可读存储介质及处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111679934A true CN111679934A (zh) | 2020-09-18 |
CN111679934B CN111679934B (zh) | 2020-11-17 |
Family
ID=72458321
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010809757.0A Active CN111679934B (zh) | 2020-08-13 | 2020-08-13 | 基于raid信息的纠错方法、计算机可读存储介质及处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111679934B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112383314A (zh) * | 2021-01-12 | 2021-02-19 | 杭州阿姆科技有限公司 | 一种基于raid信息的ldpc纠错方法 |
CN112540799A (zh) * | 2020-12-02 | 2021-03-23 | 深圳市硅格半导体有限公司 | 启动数据的管理方法、系统、终端设备及存储介质 |
CN113312204A (zh) * | 2021-07-28 | 2021-08-27 | 杭州阿姆科技有限公司 | 基于双层raid信息的增强型纠错方法及深度纠错方法 |
WO2023109571A1 (zh) * | 2021-12-13 | 2023-06-22 | 华为技术有限公司 | 存储级内存、数据处理方法和处理器系统 |
CN117393025A (zh) * | 2023-12-08 | 2024-01-12 | 杭州阿姆科技有限公司 | 生成符合nand数据特征带软判决信息的数据的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030188097A1 (en) * | 2002-03-29 | 2003-10-02 | Holland Mark C. | Data file migration from a mirrored RAID to a non-mirrored XOR-based RAID without rewriting the data |
CN108388525A (zh) * | 2017-02-02 | 2018-08-10 | 爱思开海力士有限公司 | 存储器系统及其操作方法 |
CN108647110A (zh) * | 2018-03-30 | 2018-10-12 | 深圳忆联信息系统有限公司 | 一种增强型raid保护方法及ssd |
US20190347161A1 (en) * | 2017-08-23 | 2019-11-14 | Toshiba Memory Corporation | On the fly raid parity calculation |
-
2020
- 2020-08-13 CN CN202010809757.0A patent/CN111679934B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030188097A1 (en) * | 2002-03-29 | 2003-10-02 | Holland Mark C. | Data file migration from a mirrored RAID to a non-mirrored XOR-based RAID without rewriting the data |
CN108388525A (zh) * | 2017-02-02 | 2018-08-10 | 爱思开海力士有限公司 | 存储器系统及其操作方法 |
US20190347161A1 (en) * | 2017-08-23 | 2019-11-14 | Toshiba Memory Corporation | On the fly raid parity calculation |
CN108647110A (zh) * | 2018-03-30 | 2018-10-12 | 深圳忆联信息系统有限公司 | 一种增强型raid保护方法及ssd |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112540799A (zh) * | 2020-12-02 | 2021-03-23 | 深圳市硅格半导体有限公司 | 启动数据的管理方法、系统、终端设备及存储介质 |
CN112383314A (zh) * | 2021-01-12 | 2021-02-19 | 杭州阿姆科技有限公司 | 一种基于raid信息的ldpc纠错方法 |
CN112383314B (zh) * | 2021-01-12 | 2021-04-06 | 杭州阿姆科技有限公司 | 一种基于raid信息的ldpc纠错方法 |
CN113312204A (zh) * | 2021-07-28 | 2021-08-27 | 杭州阿姆科技有限公司 | 基于双层raid信息的增强型纠错方法及深度纠错方法 |
WO2023109571A1 (zh) * | 2021-12-13 | 2023-06-22 | 华为技术有限公司 | 存储级内存、数据处理方法和处理器系统 |
CN117393025A (zh) * | 2023-12-08 | 2024-01-12 | 杭州阿姆科技有限公司 | 生成符合nand数据特征带软判决信息的数据的方法 |
CN117393025B (zh) * | 2023-12-08 | 2024-03-15 | 杭州阿姆科技有限公司 | 生成符合nand数据特征带软判决信息的数据的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111679934B (zh) | 2020-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111679934B (zh) | 基于raid信息的纠错方法、计算机可读存储介质及处理器 | |
CN106776109B (zh) | 固态硬盘读错误检测装置及读不可纠错误原因的检测方法 | |
EP3072134B1 (en) | Defect management policies for nand flash memory | |
US9007854B1 (en) | Method and system for optimized soft decoding in a data storage device | |
US11669398B2 (en) | Memory components with ordered sweep error recovery | |
US10936391B2 (en) | Memory management method and storage controller | |
US11868639B2 (en) | Providing recovered data to a new memory cell at a memory sub-system based on an unsuccessful error correction operation | |
US9270296B1 (en) | Method and system for soft decoding through single read | |
US9768808B2 (en) | Method for modifying device-specific variable error correction settings | |
CN112383314B (zh) | 一种基于raid信息的ldpc纠错方法 | |
US20160299812A1 (en) | Device-Specific Variable Error Correction | |
US20160299844A1 (en) | Mapping Logical Groups of Data to Physical Locations In Memory | |
US11550663B2 (en) | Changing of error correction codes based on the wear of a memory sub-system | |
US11119697B2 (en) | Read voltage management based on write-to-read time difference | |
US11544144B2 (en) | Read recovery control circuitry | |
US11868202B2 (en) | Granular error reporting on multi-pass programming of non-volatile memory | |
TW201921281A (zh) | 具備資料可靠性機制的儲存系統及其操作方法 | |
CN109872764B (zh) | 一种多级存储单元闪存的ecc多码率编解码系统及方法 | |
US20220043706A1 (en) | Prioritization of error control operations at a memory sub-system | |
CN113312204B (zh) | 基于双层raid信息的增强型纠错方法及深度纠错方法 | |
JP7177338B2 (ja) | メモリコントローラ装置、メモリコントローラ装置を有するメモリ装置及びメモリコントロール方法 | |
CN117632579B (zh) | 存储器控制方法和存储器存储装置 | |
CN117409845A (zh) | 分组管理方法、存储器存储装置及存储器控制器 | |
CN117992282A (zh) | 异常断电后的编码方法和存储器存储装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |