Linux.ChinaUnix.net
ChinaUnix
|
Linux首页
|
新闻
|
博客
|
文章
|
专栏
|
新手
|
方案
|
图书
|
下载
|
人才
|
手册
|
wiki
|
搜索
会员:
密码:
免费注册
|
忘记密码
|
会员登录
|
搜索
|
帮助
进行DMA时如何保证Cache和内存内容的一致性?
‹‹
1
2
首页
»
CU论坛
»
Linux
»
汇总贴列表
»
内核源码
»
请选择您要去的论坛 ←
>新手园地
>系统管理
>网络问题
>硬件支持
>内核问题
>系统互操作专区
>中文支持
>桌面与办公
>影音娱乐
>网络工具
>编程问题
>内核源码
>CPU与编译器
>嵌入式开发
>驱动开发
>数据库应用
>服务器应用
>安全防护
>集群和虚拟机
>开源业界与评论
>贴图娱乐
>红茶馆
>文档专区
>下载共享
>Linux书友会
>Linux人才交流
>Linux站务交流
===============
→ 操作系统技术交流区 ←
>BSD
>Solaris
>SCO UNIX
>HP-UX
>AIX
>IBM AS400应用论坛
>Tru64 UNIX
>IRIX
>Mac OS X
→ 行业解决方案交流区 ←
> 金融行业
> 电信行业
> 互联网行业
> 医卫行业
> 制造行业
> 信息安全
> 教育行业
> 媒体娱乐行业
> 电子政务
> 交通行业
→ 程序设计交流区 ←
>C/C++
>Shell
>Java
>Php
>Perl
>Python
>Web开发
>软件工程
>中间件技术
>GUI编程
>软件配置管理
>VOIP开发技术
→ 网管技术交流区 ←
>网络安全
>网络技术
>Cisco技术
>存储备份之家
>服务器及硬件技术
→ 数据库技术交流区 ←
>MySQL
>PostgreSQL
>Oracle
>Informix
>Sybase
>DB2
→ 应用技术专题交流区 ←
>Web服务器
>Mail服务器
>FTP服务器
>DNS服务器
>Proxy服务器
>LDAP
>VPN
>Lotus
>Samba
→ IT综合交流区 ←
>IT业界新闻与评论
>IT职业生涯
>IT培训与认证
>IT二手大厅
>IT图书与评论
→ IT人的休闲生活交流区 ←
>清茶斋
>运动地带
>快乐数码摄影
>影音文字
>English Forum
>游戏玩家
>旅游天下
>贴图娱乐
>红茶馆
>IT爱车族
→ 站务及频道交流区 ←
>站务交流
>版主会议室
>Linux站务交流
>Linux版主会议室
>博客站务交流区
>下载频道交流区
>CU活动专区
最近访问的论坛 ...
时代冠军主机588元/两年
|
送Windows新书+500分+2G U盘
| 新版块:
OpenAPI
、
数据仓库与数据挖掘
、
门户网站运维
、
Functional编程
|
赠送《代码之美》
‹‹ 上一主题
|
下一主题 ››
[
打印
] [
订阅
] [
收藏
] [
本帖文本页
] [
推荐此主题给朋友,立即获积分
]
jiangqiangq
新手
UID:698291
注册:2008-4-28
最后登录: 2008-09-19
帖子:
3
精华:0
可用积分:3 (白手起家)
信誉积分:0
专家积分:0 (本版:0)
空间积分:0
推广积分:0
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
[
推广获积分
]
11楼
发表于 2008-5-12 08:54
QUOTE:
原帖由
soararing
于 2008-5-11 11:31 发表
嗯,回去再看了看,设备内存确实不是DMA的目标,DMA的目标也是一块kernel mode的物理内存,但是由于这块内存有cache的原因,倒是DMA失败,我要问的是如何分配一块不被cache的物理内存呢?
DMA之前使 ...
DMA内存也是普通的物理内存,这块内存会被设备和CPU存取,例如,CPU需要首先向DMA内存中写入数据,然后通知设备进行DMA读操作。如果1)CPU没有采用合适的Cache属性,2)cpu没有在通知设备进行DMA操作之前进行flush cache 3)设备进行DMA操作的时候没有进行cache snoop,那么确实会导致出错。
另,zx_wing,我想LZ说的是显卡,显卡可以通过GART实现IOMMU的功能。
您对本贴的看法:
鲜花[0]
臭蛋[0]
积分兑换专区
|
IT节能和TPC-E活动获奖名单
|
致电800-858-2903,了解DELL如何为你量身订制笔记本
|
送2G U盘
|
站长如何获得资金?
zx_wing
(骑着猪的青蛙)
大天使
学徒
UID:499746
注册:2006-12-4
最后登录: 2008-10-10
帖子:
2015
精华:
4
可用积分:1794 (家境小康)
信誉积分:100
专家积分:21 (本版:1)
空间积分:0
推广积分:0
来自:成都
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
[
推广获积分
]
12楼
发表于 2008-5-12 12:30
QUOTE:
原帖由
jiangqiangq
于 2008-5-12 08:54 发表
DMA内存也是普通的物理内存,这块内存会被设备和CPU存取,例如,CPU需要首先向DMA内存中写入数据,然后通知设备进行DMA读操作。如果1)CPU没有采用合适的Cache属性,2)cpu没有在通知设备进行DMA操作之前进 ...
是yunhong老大吗?要真是你的话以后有空多泡CU哈,有你在我估计内核版就没什么问题了
LZ用的应该是x86平台,他提到wbinvd了,cache的flush和snoop硬件都做了,所以我觉得只要用get_free_pages分配一片他要的内存就好了。
显卡就完全不懂了。我听说已经有带IOTLB的设备出来了,所以好奇LZ用的是不是
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
C调 ---- C语言
都是最喜欢的
积分兑换专区
|
IT节能和TPC-E活动获奖名单
|
致电800-858-2903,了解DELL如何为你量身订制笔记本
|
送2G U盘
|
站长如何获得资金?
crspo
精灵
UID:167638
注册:2004-6-28
最后登录: 2008-10-09
帖子:
194
精华:
1
可用积分:227 (白手起家)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
[
推广获积分
]
13楼
发表于 2008-5-12 22:27
QUOTE:
原帖由
soararing
于 2008-5-11 15:50 发表
static inline void nv_set_page_attrib_uncached(nv_pte_t *page_ptr)
{
#if defined(NV_CHANGE_PAGE_ATTR_PRESENT)
if (nv_use_cpa)
{
struct page *page = virt_to_page(__va(page_ptr ...
change_page_attr()应该使用了PCD,另外如果是显存的话,应该映射至WC类型的区域而不是被缓存起来,通过这种方式提高性能
您对本贴的看法:
鲜花[0]
臭蛋[0]
积分兑换专区
|
IT节能和TPC-E活动获奖名单
|
致电800-858-2903,了解DELL如何为你量身订制笔记本
|
送2G U盘
|
站长如何获得资金?
folklore
精灵
UID:139873
注册:2004-3-5
最后登录: 2008-05-15
帖子:
157
精华:0
可用积分:369 (白手起家)
信誉积分:100
专家积分:11 (本版:11)
空间积分:0
推广积分:0
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
[
推广获积分
]
14楼
发表于 2008-5-13 09:12
Cache 击落(使相应或全部CACHE无效就行了)
您对本贴的看法:
鲜花[0]
臭蛋[0]
积分兑换专区
|
IT节能和TPC-E活动获奖名单
|
致电800-858-2903,了解DELL如何为你量身订制笔记本
|
送2G U盘
|
站长如何获得资金?
jiangqiangq
新手
UID:698291
注册:2008-4-28
最后登录: 2008-09-19
帖子:
3
精华:0
可用积分:3 (白手起家)
信誉积分:0
专家积分:0 (本版:0)
空间积分:0
推广积分:0
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
[
推广获积分
]
15楼
发表于 2008-5-13 09:39
QUOTE:
原帖由
crspo
于 2008-5-12 22:27 发表
change_page_attr()应该使用了PCD,另外如果是显存的话,应该映射至WC类型的区域而不是被缓存起来,通过这种方式提高性能
LZ没有提供太多信息,但是我想他所指的应该不是framebuffer,而可能是其他的内存,例如texture surface, command buffer等。
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
我爱胖胖的小锵锵!
积分兑换专区
|
IT节能和TPC-E活动获奖名单
|
致电800-858-2903,了解DELL如何为你量身订制笔记本
|
送2G U盘
|
站长如何获得资金?
longda
侠客
UID:374554
注册:2006-2-20
最后登录: 2008-07-30
帖子:
13
精华:0
可用积分:13 (白手起家)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
[
推广获积分
]
16楼
发表于 2008-5-14 14:48
这个问题,我曾写过一段代码可以解决,但是,他不够general,在有的os上编译不过,而且似乎在AMD cpu上失败了
void set_nocached(unsigned long addr)
{
pgd_t *dir;
pmd_t *pmdp;
pte_t *ptep;
pgprot_t newprot;
dir = pgd_offset_k(addr);
pmdp = pmd_offset(dir, addr);
ptep = pte_offset_kernel(pmdp, addr);
memset( &newprot, 0, sizeof(newprot) );
pgprot_noncached(newprot);
pte_modify(*ptep, newprot);
}
可以到kernel里面搜索 pgprot_noncached, 凡是调用pgprot_noncached 这个的地方研究一下,就会有所收获
另外如果找到该段内存的vm_area (struct vm_area_struct )的话,也会比较容易解决
vma->vm_flags |= VM_IO; /* I/O memory */
vma->vm_flags |= VM_RESERVED; /* avoid to swap out this VMA */
/* Set correct page protection bits to avoid memory caching */
pgprot_val(vma->vm_page_prot) |= _PAGE_PCD;
pgprot_val(vma->vm_page_prot) &= ~_PAGE_PWT;
去内核中,搜索_PAGE_PWT和_PAGE_PCD 会有所收获的
您对本贴的看法:
鲜花[0]
臭蛋[0]
积分兑换专区
|
IT节能和TPC-E活动获奖名单
|
致电800-858-2903,了解DELL如何为你量身订制笔记本
|
送2G U盘
|
站长如何获得资金?
zhiwood
圣骑士
UID:153723
注册:2004-4-22
最后登录: 2008-10-01
帖子:
99
精华:0
可用积分:87 (白手起家)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
[
推广获积分
]
17楼
发表于 2008-5-15 13:10
回复 #11 jiangqiangq 的帖子
AGP的显卡用non-cached内存和sse2指令时,性能有提升,
dma就没必要改内存属性了。通常数据都是在dma之前送到buffer的,没做改动,所以没必要考虑cache.
而且,如果有改动,系统应该有一些函数来flush memory,可以在dma之前flush一下就行了,也没必要
改成non-cached.
您对本贴的看法:
鲜花[0]
臭蛋[0]
积分兑换专区
|
IT节能和TPC-E活动获奖名单
|
致电800-858-2903,了解DELL如何为你量身订制笔记本
|
送2G U盘
|
站长如何获得资金?
evil_hunter
侠客
UID:599530
注册:2007-8-8
最后登录: 2008-10-10
帖子:
31
精华:0
可用积分:30 (白手起家)
信誉积分:0
专家积分:0 (本版:0)
空间积分:0
推广积分:0
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
[
推广获积分
]
18楼
发表于 2008-5-15 17:30
disable cache 会影响DMA的性能,可以通过invalidate_dcache, 调用这个函数后,不论要读问的内存是否在cache中,都会强制性的读取内存中的实际内容。
以前的帖子
http://linux.chinaunix.net/bbs/viewthread.php?tid=907505
您对本贴的看法:
鲜花[0]
臭蛋[0]
积分兑换专区
|
IT节能和TPC-E活动获奖名单
|
致电800-858-2903,了解DELL如何为你量身订制笔记本
|
送2G U盘
|
站长如何获得资金?
zx_wing
(骑着猪的青蛙)
大天使
学徒
UID:499746
注册:2006-12-4
最后登录: 2008-10-10
帖子:
2015
精华:
4
可用积分:1794 (家境小康)
信誉积分:100
专家积分:21 (本版:1)
空间积分:0
推广积分:0
来自:成都
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
[
推广获积分
]
19楼
发表于 2008-5-15 17:36
我不知道各位说的DMA disable cache是在什么情况下用的。
反正x86平台是不需要的。通常只有RISC平台才需要显式的调用刷新函数,也不需要disable cache。
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
C调 ---- C语言
都是最喜欢的
积分兑换专区
|
IT节能和TPC-E活动获奖名单
|
致电800-858-2903,了解DELL如何为你量身订制笔记本
|
送2G U盘
|
站长如何获得资金?
首页
»
CU论坛
»
Linux
»
汇总贴列表
»
内核源码
»
‹‹
1
2
请选择您要去的论坛 ←
>新手园地
>系统管理
>网络问题
>硬件支持
>内核问题
>系统互操作专区
>中文支持
>桌面与办公
>影音娱乐
>网络工具
>编程问题
>内核源码
>CPU与编译器
>嵌入式开发
>驱动开发
>数据库应用
>服务器应用
>安全防护
>集群和虚拟机
>开源业界与评论
>贴图娱乐
>红茶馆
>文档专区
>下载共享
>Linux书友会
>Linux人才交流
>Linux站务交流
===============
→ 操作系统技术交流区 ←
>BSD
>Solaris
>SCO UNIX
>HP-UX
>AIX
>IBM AS400应用论坛
>Tru64 UNIX
>IRIX
>Mac OS X
→ 行业解决方案交流区 ←
> 金融行业
> 电信行业
> 互联网行业
> 医卫行业
> 制造行业
> 信息安全
> 教育行业
> 媒体娱乐行业
> 电子政务
> 交通行业
→ 程序设计交流区 ←
>C/C++
>Shell
>Java
>Php
>Perl
>Python
>Web开发
>软件工程
>中间件技术
>GUI编程
>软件配置管理
>VOIP开发技术
→ 网管技术交流区 ←
>网络安全
>网络技术
>Cisco技术
>存储备份之家
>服务器及硬件技术
→ 数据库技术交流区 ←
>MySQL
>PostgreSQL
>Oracle
>Informix
>Sybase
>DB2
→ 应用技术专题交流区 ←
>Web服务器
>Mail服务器
>FTP服务器
>DNS服务器
>Proxy服务器
>LDAP
>VPN
>Lotus
>Samba
→ IT综合交流区 ←
>IT业界新闻与评论
>IT职业生涯
>IT培训与认证
>IT二手大厅
>IT图书与评论
→ IT人的休闲生活交流区 ←
>清茶斋
>运动地带
>快乐数码摄影
>影音文字
>English Forum
>游戏玩家
>旅游天下
>贴图娱乐
>红茶馆
>IT爱车族
→ 站务及频道交流区 ←
>站务交流
>版主会议室
>Linux站务交流
>Linux版主会议室
>博客站务交流区
>下载频道交流区
>CU活动专区
Copyright © 2001-2008 ChinaUnix.net All Rights Reserved 联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处
京ICP证041476号
清除 Cookies
-
Linux时代
-
Archiver
-
WAP
-
TOP
Processed in 0.041025 second(s), 5 queries , Gzip enabled