CN101510176A - 通用操作系统对cpu二级缓存访问的控制方法 - Google Patents

通用操作系统对cpu二级缓存访问的控制方法 Download PDF

Info

Publication number
CN101510176A
CN101510176A CNA2009100969565A CN200910096956A CN101510176A CN 101510176 A CN101510176 A CN 101510176A CN A2009100969565 A CNA2009100969565 A CN A2009100969565A CN 200910096956 A CN200910096956 A CN 200910096956A CN 101510176 A CN101510176 A CN 101510176A
Authority
CN
China
Prior art keywords
memory
cache
buffer
page
buffer zone
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
Application number
CNA2009100969565A
Other languages
English (en)
Other versions
CN101510176B (zh
Inventor
陈天洲
曹满
马建良
章铁飞
项凌翔
乔福明
黄江伟
王春昊
缪良华
陈剑
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN2009100969565A priority Critical patent/CN101510176B/zh
Publication of CN101510176A publication Critical patent/CN101510176A/zh
Application granted granted Critical
Publication of CN101510176B publication Critical patent/CN101510176B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明涉及计算机通用操作系统内存管理技术领域,旨在提供一种通用操作系统对CPU二级缓存访问的控制方法。该方法包括以下步骤:在操作系统中以内存页着色的软件实现方法划分物理索引的缓存、利用缓存区域的结构来控制处理器二级缓存的使用情况、标记为缓存区域、提供系统调用。本发明通过改进操作系统内核对内存缺页中断和二级缓存的管理机制,添加系统调用,使得操作系统可以控制二级缓存的访问。程序员在编写对内存频繁访问的应用程序时,可以通过系统调用对规律性频繁访问且体积庞大的数据结构进行针对缓存的优化,从而减少二级缓存访问缺失率,显著提高程序性能。具有性能提升、可拓展性和便捷性等优点。

Description

通用操作系统对CPU二级缓存访问的控制方法
技术领域
本发明涉及计算机通用操作系统内存管理技术领域,特别是涉及一种通用操作系统对CPU二级缓存访问的控制方法。
背景技术
CPU缓存是位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。在CPU中加入缓存是一种高效的解决方案,这样整个内存储器就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。
CPU在缓存中找到有用的数据被称为命中,当缓存中没有CPU所需的数据时,发生缺失,CPU才访问内存。缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。正是这样的读取机制使CPU读取缓存的命中率非常高,大多数CPU可达90%左右,也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。
最早先的CPU缓存是整体集成在CPU内部,且容量低。集成在CPU内的缓存渐渐难以满足CPU的需求,而制造工艺上的限制又不能大幅度提高缓存的容量,因此出现了集成在与CPU同一块电路板上或主板上的缓存。此时就把CPU内核集成的缓存称为一级缓存,而外部的称为二级缓存。随着CPU制造工艺的发展,二级缓存也能轻易的集成在CPU内核中,容量也在逐年提升。
CPU二级缓存的出现使得计算机的整体性能得到了又一次巨大的飞跃。二级缓存比内存容量小但速度快,同时比一级缓存容量大但速度略慢,处于计算机存储系统金字塔结构的第二层。影响二级缓存性能的最主要因素就是命中率,而提高命中率的方法主要分为两种:第一种是增加二级缓存容量,用更多的硬件成本换取性能;第二种是用软件方式提高性能,比如改进缓存替换算法。本发明属于后者,补充了二级缓存的管理方法。
为了保证CPU访问时有较高的命中率,缓存中的内容应该按一定的算法替换。目前缓存控制器较常用的算法是近似“最近最少使用算法”,它是将最近一段时间内最少被访问过的行淘汰出局。这是一种高效、科学的算法,在大多数情况下都有较好的表现。但是在连续多次按同一顺序遍历的操作上会出现很差的表现,而这种操作却是常常会遇到的。另一方面,缓存内容的替换算法是固化在CPU中的缓存控制器硬件中的,通用操作系统无法改变或者干预这种算法。因此,如果能够提供一种通用操作系统对二级缓存访问的控制方法,就可以在一定程度上弥补缓存替换算法的不足,并解决通用操作系统无法干预缓存内容的现状,使得二级缓存的使用更加灵活和高效。
发明内容
本发明的目的在于克服现有技术中的不足,提供一种通用操作系统对CPU二级缓存访问的控制方法。
通用操作系统是一类操作系统的统称,比如常见的Windows,Linux等都属于通用操作系统。与之相对应的是专用操作系统,或称为实时操作系统,多用于嵌入式领域。通用操作系统有更普遍的应用领域,本发明中的方法是针对通用操作系统的。
本发明解决其技术问题采用的技术方案包括以下步骤:
1)软件缓存划分
在操作系统中可以通过内存页着色的方法实现软件划分物理索引的处理器缓存:在物理索引的缓存中,数据在物理内存中的地址决定了数据所映射到的缓存组编号和组内偏移,用来将数据映射并索引到缓存的哈希函数必须利用物理内存地址中足够的位,从而可以寻址整个缓存;由于当前缓存容量相对较大,这些位数已经超过了内存的页内偏移的位数,物理内存的页编号的低位会与缓存组编号的高位有部分重叠,因此物理内存的页编号决定了缓存中的指定的一部分组,共享相同缓存组编号位的物理内存页的集合构成了一个缓存全等类,整个物理内存可以划分为多个缓存全等类,具体的个数与二级缓存大小和物理内存页的大小有关;
2)缓存区域控制方法
在本方法中使用一个名为缓存区域的结构,控制处理器二级缓存的使用情况;缓存区域中记录了被控制的内存页地址的链表和起止地址、缓存全等类的数量、缓存的使用情况、当前应用程序的内存结构的信息;控制缓存区域结构的函数包括初始化、释放、向缓存区域增加内存段、从缓存区域删除内存段、查找一个内存地址是否在指定缓存区域、为缓存区域分配新的内存页、清除缓存区域的内存页;
3)标记为缓存区域的机制
要控制处理器二级缓存的访问范围,首先要确定应用程序要访问的缓存地址;由软件缓存划分的方法得知,需要保存应用程序访问内存物理页编号的记录;保存访问记录可以利用操作系统处理虚拟内存缺页的中断函数;当需要将一块应用程序的内存段固定在二级缓存中时,通过更改虚实地址转换页表项中这一块内存的权限位和标记位,使访问到这一块内存时会发生缺页中断,在缺页中断处理函数中,根据页表项中的标记位添加相关的分支,即可进行缓存区域的相关操作;
4)向程序员提供的系统调用
程序员通过系统调用来优化二级缓存的使用情况;系统调用将缓存区域的控制函数进行包装,使得程序员可以方便的控制缓存区域,只需要在声明要优化的数据结构之前使用设置缓存区域的系统调用即可。
本发明与背景技术相比,具有的有益的效果是:
本发明通过改进操作系统内核对内存缺页中断和二级缓存的管理机制,添加系统调用,使得操作系统可以控制二级缓存的访问。该发明基于软件缓存划分的方法,利用物理内存页编号和二级缓存组编号的地址重叠部分可以将内存空间划分为多个缓存全等类。程序员在编写对内存频繁访问的应用程序时,可以通过系统调用对规律性频繁访问且体积庞大的数据结构进行针对缓存的优化,从而减少二级缓存访问缺失率,显著提高程序性能。
(1)性能提升。操作系统对CPU二级缓存的替换进行控制,从而克服了固化在缓存控制器硬件中的替换算法的弱点,大幅度提高二级缓存的命中率,使得程序性能得到显著提升。
(2)可拓展性。基于软件缓存划分和缓存全等类的方法,操作系统中可以设计多种缓存替换算法。对于具有不同内存访问规律的程序使用不同的缓存替换算法,可以进一步拓展本发明的应用范围。
(3)便捷性。程序员在编写程序时可以方便的利用相关的系统调用优化程序的缓存访问。
附图说明
图1是软件缓存划分编号位重叠的示意图。
具体实施方式
在实施通用操作系统对CPU二级缓存访问的控制方法时,具体方式如下:
1)软件缓存划分
目前通用CPU二级缓存普遍利用物理内存地址来确定内存所对应的缓存中的位置,也就是说目前通用CPU二级缓存都是物理索引的缓存;当前的二级缓存容量也已经达到足够大,使得控制数据映射的哈希函数利用的物理内存地址位数超过了内存页内偏移量的位数,因此内存的物理页编号的低位与缓存组编号的高位有部分重叠,操作系统可以利用这一部分重叠的位数进行软件缓存划分。
共享相同缓存组编号位的内存物理页的集合构成了一个缓存全等类,每一个类中的内存页都被映射到缓存中一个固定的区域,不同的类映射到的缓存区域不会相同;可用的缓存全等类的数量等于2n,其中n是在页内偏移量位之上的用来做缓存哈希的位数,即内存的物理页编号与缓存组编号重叠的位数。
以IBM PowerPC 970FX处理器为例,它的缓存行大小为128字节,二级缓存共有512组。内存页大小为常见的4KB时,物理内存页编号会与缓存组编号有4位的重叠,该系统中内存可以划分为16个,即24个缓存全等类,操作系统控制的内存地址可以分成16不同的缓存全等类,每一个类中的内存页都被映射到不同的二级缓存区域里。操作系统利用这种不同缓存全等类不会发生缓存地址冲突而进行数据替换的特征,将被标记到缓存区域的内存地址分散到不同的缓存全等类当中,从而防止最近最少使用替换原则发生较差表现的情况,提高二级缓存的命中率。操作系统利用这种特征,也可以在软件上实现其他的缓存替换策略,应对各种缓存表现的应用程序,实现本方法的可拓展性。
2)缓存区域控制方法
缓存区域结构控制着处理器二级缓存的使用情况,记录了被标记的物理内存地址,保存了与硬件相关的控制参数,并提供各种接口函数给外部使用。
被标记的物理内存地址采用链表的数据结构,利用链表的灵活性方便的实现增加、删除的操作。与硬件相关的控制参数包括二级缓存组编号与物理内存页地址的重叠位数,缓存全等类的数量,当前应用程序的内存结构的信息。
提供的接口函数有初始化、释放、向缓存区域增加内存段、从缓存区域删除内存段、查找一个内存地址是否在指定缓存区域、为缓存区域分配新的内存页、清除缓存区域的内存页。初始化函数向操作系统申请内存空间,创建链表,并检查计算机的硬件结构,给相关的控制参数初始值。释放函数释放申请的内存空间。向缓存区域增加内存段函数在链表的末尾增加一个节点,记录增加的内存地址。从缓存区域删除内存段先查找要删除的内存地址所在链表节点,然后从链表中删除该节点。查找一个内存地址是否在指定缓存区域使用简单的链表遍历查找内存地址节点。为缓存区域分配新的内存页函数将申请新的物理内存页,这个新的物理内存页地址对应空闲的二级缓存,然后将原来的内存页的内容复制到新的物理内存页中,同时修改系统中虚地址和实地址的转换表,使得原来的虚地址对应新的实地址。清除缓存区域的内存页将相应的物理内存页释放,使得对应的二级缓存区域相对空闲。
3)标记为缓存区域的机制
利用操作系统处理虚拟内存缺页的中断函数,保存应用程序访问的物理内存页编号记录,从而可以调用缓存区域结构中的接口函数控制物理内存页。
当需要将一块应用程序的内存段固定在二级缓存中时,首先通过相关系统调用将这一段内存对应的虚实地址转换页表项中的用户权限位设置为超级用户,这是为了引起权限错误而发生缺页中断并进入中断函数;然后将页表项中提供给系统程序员的可用位设置为特殊值,这是为了区别于正常的权限错误,这样就标记了该内存页为缓存区域中的内存页。当程序访问到被标记的内存页时,由于应用程序的访问权限属于普通用户,而此内存页被标记为超级用户,会发生缺页中断。在缺页中断处理函数中,根据页表项中的权限位和保留给系统程序员的可用位,增加分支。如果是一个被标记为缓存区域中的内存页,那么查找该内存地址是否已经在所有被控制的物理内存页中,如果在那么跳过,如果不在那么将这个内存页加入最空闲的缓存区域中,不管是否已经被控制都要将原来的页表项中的权限位和可用位置为正常,使得下一次访问该地址不会发生同样的缺页中断。
4)向程序员提供的系统调用
程序员通过系统调用来优化二级缓存的使用情况。系统调用将缓存区域的控制函数进行包装,使得程序员可以方便的控制缓存区域。提供一个特别的系统调用,将要申请的内存地址对应的虚实转换页表项中的用户权限位置为超级用户,并将提供给系统程序员的可用位置为特殊值,从而达到标记的目的。将缓存区域的初始化函数包装到这个特别的系统调用中,使得第一次调用标记内存地址功能的时候自动初始化缓存区域结构。程序员在使用规律性频繁访问且体积庞大的数据结构时,可以在声明该数据结构之前调用这个设置为缓存区域的系统调用,可以明显的提高这个数据结构的二级缓存命中率。
最后,还需要注意的是,以上公布的仅是本发明的具体实施例。本领域的普通技术人员能从本发明公开的内容直接导出或联想到的所有变形,均应认为是本发明的保护范围。

Claims (2)

1、一种通用操作系统对CPU二级缓存访问的控制方法,其特征在于,包括以下步骤:
1)在操作系统中以内存页着色的软件实现方法划分物理索引的缓存:
在物理索引的缓存中,数据在物理内存中的地址决定了数据所映射到的缓存组编号和组内偏移,用来将数据映射并索引到缓存的哈希函数必须利用物理内存地址中足够的位,从而可以寻址整个缓存;由于当前缓存容量相对较大,物理内存地址中的位数已经超过了内存的页内偏移的位数,物理内存的页编号的低位会与缓存组编号的高位有部分重叠,因此物理内存的页编号决定了缓存中的指定的一部分组,共享相同缓存组编号位的物理内存页的集合构成一个缓存全等类;整个物理内存被划分为多个缓存全等类,具体的个数与二级缓存大小和物理内存页的大小有关;
2)利用缓存区域的结构来控制处理器二级缓存的使用情况:
使用函数控制缓存区域,并利用缓存区域记录被控制的内存页地址的链表和起止地址、缓存全等类的数量、缓存的使用情况、当前应用程序的内存结构的信息;
3)标记为缓存区域
利用操作系统处理虚拟内存缺页的中断函数来保存应用程序访问内存物理页编号的记录,确定应用程序要访问的缓存地址,从而控制处理器二级缓存的访问范围:
当需要将一块应用程序的内存段固定在二级缓存中时,通过更改虚实地址转换页表项中这一块内存的权限位和标记位,使访问到这一块内存时会发生缺页中断,在缺页中断处理函数中,根据页表项中的标记位添加相关的分支,即可进行缓存区域的相关操作;
4)提供系统调用
系统调用将缓存区域的控制函数进行包装以方便地控制缓存区域,只需要在声明要优化的数据结构之前使用设置缓存区域的系统调用,即可优化二级缓存的使用情况。
2、根据权利要求1所述的通用操作系统对CPU二级缓存访问的控制方法,其特征在于,步骤(2)中,所述使用函数控制缓存区域,是指使用:初始化函数、释放函数、向缓存区域增加内存段函数、从缓存区域删除内存段函数、查找一个内存地址是否在指定缓存区域函数、为缓存区域分配新的内存页函数或清除缓存区域的内存页函数,实现对缓存区域的结构的控制。
CN2009100969565A 2009-03-26 2009-03-26 通用操作系统对cpu二级缓存访问的控制方法 Expired - Fee Related CN101510176B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009100969565A CN101510176B (zh) 2009-03-26 2009-03-26 通用操作系统对cpu二级缓存访问的控制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009100969565A CN101510176B (zh) 2009-03-26 2009-03-26 通用操作系统对cpu二级缓存访问的控制方法

Publications (2)

Publication Number Publication Date
CN101510176A true CN101510176A (zh) 2009-08-19
CN101510176B CN101510176B (zh) 2012-05-30

Family

ID=41002579

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009100969565A Expired - Fee Related CN101510176B (zh) 2009-03-26 2009-03-26 通用操作系统对cpu二级缓存访问的控制方法

Country Status (1)

Country Link
CN (1) CN101510176B (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101694639B (zh) * 2009-10-15 2011-06-01 清华大学 一种计算机数据的缓存方法
CN102402622A (zh) * 2011-12-27 2012-04-04 北京人大金仓信息技术股份有限公司 嵌入式内存数据库的内存页面管理调度方法
CN102663115A (zh) * 2012-04-16 2012-09-12 中国人民大学 基于页面染色技术的内存数据库访问优化方法
CN102819497A (zh) * 2012-05-31 2012-12-12 华为技术有限公司 一种内存分配方法、装置及系统
WO2015100653A1 (zh) * 2013-12-31 2015-07-09 华为技术有限公司 一种数据缓存方法、装置及系统
CN104794069A (zh) * 2015-04-01 2015-07-22 北京创毅视讯科技有限公司 一种cpu中缓存的用户态分配方法和系统
WO2016082763A1 (zh) * 2014-11-28 2016-06-02 华为技术有限公司 一种内存访问的方法、相关装置和系统
CN106874105A (zh) * 2016-12-23 2017-06-20 北京北大众志微系统科技有限责任公司 一种基于数据对象感知的内存库划分方法和装置
CN108287795A (zh) * 2018-01-16 2018-07-17 宿州新材云计算服务有限公司 一种新型处理器缓存替换方法
CN109144894A (zh) * 2018-08-01 2019-01-04 浙江大学 基于数据冗余的内存访问模式保护方法
CN115203076A (zh) * 2021-04-02 2022-10-18 滕斯托伦特股份有限公司 数据结构优化的专用存储器缓存

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060090069A1 (en) * 2004-10-22 2006-04-27 Venturcom, Inc. Method and system for caching read requests from a shared image in a computer network
CN101369232A (zh) * 2008-06-27 2009-02-18 强斌 计算机操作系统

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101694639B (zh) * 2009-10-15 2011-06-01 清华大学 一种计算机数据的缓存方法
CN102402622A (zh) * 2011-12-27 2012-04-04 北京人大金仓信息技术股份有限公司 嵌入式内存数据库的内存页面管理调度方法
CN102663115B (zh) * 2012-04-16 2015-01-14 中国人民大学 基于页面染色技术的内存数据库访问优化方法
CN102663115A (zh) * 2012-04-16 2012-09-12 中国人民大学 基于页面染色技术的内存数据库访问优化方法
WO2013155750A1 (zh) * 2012-04-16 2013-10-24 中国人民大学 基于页面染色技术的内存数据库访问优化方法
CN102819497B (zh) * 2012-05-31 2015-09-30 华为技术有限公司 一种内存分配方法、装置及系统
CN102819497A (zh) * 2012-05-31 2012-12-12 华为技术有限公司 一种内存分配方法、装置及系统
WO2015100653A1 (zh) * 2013-12-31 2015-07-09 华为技术有限公司 一种数据缓存方法、装置及系统
WO2016082763A1 (zh) * 2014-11-28 2016-06-02 华为技术有限公司 一种内存访问的方法、相关装置和系统
CN104794069A (zh) * 2015-04-01 2015-07-22 北京创毅视讯科技有限公司 一种cpu中缓存的用户态分配方法和系统
CN104794069B (zh) * 2015-04-01 2017-12-12 北京创毅视讯科技有限公司 一种cpu中缓存的用户态分配方法和系统
CN106874105A (zh) * 2016-12-23 2017-06-20 北京北大众志微系统科技有限责任公司 一种基于数据对象感知的内存库划分方法和装置
CN108287795A (zh) * 2018-01-16 2018-07-17 宿州新材云计算服务有限公司 一种新型处理器缓存替换方法
CN108287795B (zh) * 2018-01-16 2022-06-21 安徽蔻享数字科技有限公司 一种处理器缓存替换方法
CN109144894A (zh) * 2018-08-01 2019-01-04 浙江大学 基于数据冗余的内存访问模式保护方法
CN109144894B (zh) * 2018-08-01 2023-04-07 浙江大学 基于数据冗余的内存访问模式保护方法
CN115203076A (zh) * 2021-04-02 2022-10-18 滕斯托伦特股份有限公司 数据结构优化的专用存储器缓存
CN115203076B (zh) * 2021-04-02 2024-04-05 滕斯托伦特股份有限公司 数据结构优化的专用存储器缓存

Also Published As

Publication number Publication date
CN101510176B (zh) 2012-05-30

Similar Documents

Publication Publication Date Title
CN101510176B (zh) 通用操作系统对cpu二级缓存访问的控制方法
CN102792285B (zh) 用于处理数据的装置和方法
US5717893A (en) Method for managing a cache hierarchy having a least recently used (LRU) global cache and a plurality of LRU destaging local caches containing counterpart datatype partitions
CN107391391B (zh) 在固态硬盘的ftl实现数据拷贝的方法、系统及固态硬盘
CN102981963B (zh) 一种固态盘的闪存转换层的实现方法
CN102460400B (zh) 基于管理程序的本地和远程虚拟内存页面管理
US9612975B2 (en) Page cache device and method for efficient mapping
CN102779096B (zh) 一种基于页块面三维的闪存地址映射方法
CN102662869B (zh) 虚拟机中的内存访问方法和装置及查找器
CN110018971B (zh) 缓存替换技术
CN103026346A (zh) 包括固态存储器设备的存储系统中的逻辑到物理地址映射
CN104166634A (zh) 一种固态盘系统中的映射表缓存管理方法
CN105095116A (zh) 缓存替换的方法、缓存控制器和处理器
CN103246616A (zh) 一种长短周期访问频度的全局共享缓存替换方法
CN110795363B (zh) 一种存储介质的热页预测方法和页面调度方法
CN109815165A (zh) 用于存储和处理高效压缩高速缓存行的系统和方法
US20130297877A1 (en) Managing buffer memory
CN103890856A (zh) 支持内存储数据结构的可移位存储器
Xu et al. CAST: A page-level FTL with compact address mapping and parallel data blocks
US8468297B2 (en) Content addressable memory system
CN103124959A (zh) 数据对象的组合
CN113253926A (zh) 提升新型存储器的查询和存储性能的存储内索引构建方法
CN102521161B (zh) 一种数据的缓存方法、装置和服务器
CN106775501A (zh) 基于非易失内存设备的数据去冗余方法及系统
Chen et al. A unified framework for designing high performance in-memory and hybrid memory file systems

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120530

Termination date: 20130326