小编xea*_*its的帖子

有没有办法在 Linux/Unix 上找出 SSD 页面大小?fdisk 输出中的“物理块”是什么?

我在任何地方都读到内部 SSD 的结构是 4K 或更大的“页面”,这些“页面”被分组为大约 128-256 页(1 , 2)的“块” 。SSD 使用这些页面和块,“它们只能在块级别擦除数据”(因此页面块称为“[NAND] 擦除块”)。并且模拟分区的 512B 块(这样做是出于遗留原因)。

我正在尝试接受 SSD 方面的教育,因为在三星 9 np900x3c 笔记本电脑上写入我的 Sandisk U100 期间我有一些奇怪的滞后/冻结。一件有用的事情是正确找出我的 SSD 有哪些页面/块?

/sys/...Linux 上是否有用于确定 SSD 页面大小的实用程序或文件?

或者“可能需要驱动器和谷歌搜索 NAND 芯片上的部件号”,如评论所述

谷歌搜索我的 Sandisk SSD 我找不到合适的数据表/规格。但是Sandisk人们确实提到了“4K 随机读/写”。这是否意味着磁盘有 4K 页?

此外,还fdisk显示扇区大小(物理和逻辑)和 I/O 512 字节:

Disk /dev/sda: 128.0 GB, 128035676160 bytes
255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors
Units = sectors of 1 * 512 = 512 …
Run Code Online (Sandbox Code Playgroud)

ssd

23
推荐指数
2
解决办法
2万
查看次数

管道,数据如何在管道中流动?

我不明白管道中的数据是如何流动的,希望有人能澄清那里发生了什么。

我认为命令管道以逐行方式处理文件(文本、字符串数组)。(如果每个命令本身逐行工作。)每行文本都通过管道,命令不会等待前一个完成处理整个输入。

但似乎并非如此。

这是一个测试示例。有几行文字。我将它们大写并重复每行两次。我这样做cat text | tr '[:lower:]' '[:upper:]' | sed 'p'

为了遵循这个过程,我们可以“交互地”运行它——跳过cat. 管道的每个部分逐行运行:

$ cat | tr '[:lower:]' '[:upper:]'
alkjsd
ALKJSD
sdkj
SDKJ
$ cat | sed 'p'
line1
line1
line1
line 2
line 2
line 2
Run Code Online (Sandbox Code Playgroud)

但是完整的管道确实等待我完成输入,EOF然后才打印结果:

$ cat | tr '[:lower:]' '[:upper:]' | sed 'p'
I am writing...
keep writing...
now ctrl-D
I AM WRITING...
I AM WRITING...
KEEP WRITING...
KEEP WRITING...
NOW CTRL-D
NOW CTRL-D
Run Code Online (Sandbox Code Playgroud)

应该是这样吗?为什么不是一行一行的?

shell pipe text-processing buffer stdout

22
推荐指数
2
解决办法
3134
查看次数

perf_events 列表中的内核 PMU 事件是什么?

在搜索什么人能够监测perf_events在Linux上,我找不到什么Kernel PMU event是?也就是说,与perf version 3.13.11-ckt39perf list节目的事件,如:

branch-instructions OR cpu/branch-instructions/    [Kernel PMU event]
Run Code Online (Sandbox Code Playgroud)

总的来说有:

Tracepoint event
Software event
Hardware event
Hardware cache event
Raw hardware event descriptor
Hardware breakpoint
Kernel PMU event
Run Code Online (Sandbox Code Playgroud)

我想了解它们是什么,它们来自哪里。我对所有人都有某种解释,但Kernel PMU event项目。

perf wiki 教程Brendan Gregg 的页面我得到:

  • Tracepoints是最清楚的——这些是内核源代码上的宏,它们是监控的探针点,它们是在ftrace项目中引入的,现在每个人都在使用
  • Software 是内核的低级计数器和一些内部数据结构(因此,它们与跟踪点不同)
  • Hardware event是一些非常基本的 CPU 事件,可以在所有架构上找到,并且内核很容易访问
  • Hardware cache event是昵称Raw hardware event descriptor——它的工作原理如下

    据我所知,Raw hardware …

linux performance cpu monitoring perf-event

15
推荐指数
1
解决办法
8442
查看次数

目录的只写权限不允许重命名(移动)里面的文件?

事实上,我想问一个更一般的问题——“目录的写权限究竟允许你做什么?” - 但让我们用一个具体的例子来解决它。

这是一个很长的问题,如果您急于阅读粗体- 它应该涵盖主要部分。

不同的来源(好问题,还有一个grymoire 的)对目录权限的描述类似于以下内容:

r, read -- 读取目录的内容(里面的文件名)

w, write -- 改变目录的属性(例如修改时间)并在里面创建/重命名/删除条目

x, search -- 访问里面的文件,你可以访问文件的inode,因此你可以访问它的实际内容

我的问题是关于w. 它允许您访问哪些目录的属性?我不能创建/重命名/删除文件,只写权限的目录里:我做一个目录(tdir/),并在文件中,( ),afilechmod -x-r tdir/,,mv tdir/afile tdir/af -所有的失败,并允许拒绝,除非我设置权限的目录,以及.rm tdir/afiletouch tdir/newfilex

并且x单独不会授予您在目录中创建/重命名/删除文件的权限。

为了做到这一点,您需要xw

但是只touch tdir更改目录的修改时间w

我会以这种方式重新表述上面的来源以符合问题:目录r允许您查看里面的文件名,但不能访问实际文件(到 inode);x允许您访问文件的 inode(这意味着您可以查看它们的权限,并根据它可以访问内容),但您仍然无法更改目录中的任何内容;目录实际上是某种文件,要更改其中的某些内容,您需要获得w许可。

因此,当您更改目录中的某些内容时,您需要w获得许可。如果您的更改需要目录中文件的 inode - 您也需要 …

filesystems permissions directory

7
推荐指数
1
解决办法
3705
查看次数

为什么 wget 不能通过 ssh 隧道工作?代理阻止 ssh-client 做什么?

为了测试,我试图通过 建立从我的笔记本电脑到站点的本地 ssh 隧道ssh-server,并下载站点页面(或在浏览器中查看)。

隧道是这样制作的:

$ ssh -L 9999:www.gnu.org:80 ssh-server
Run Code Online (Sandbox Code Playgroud)

我检查隧道与服务器上的nc程序和~#字符一起工作。我检查我是否可以通过运行wgetlynx在服务器上在 ssh-server 上执行 http 请求——它们都运行没有错误。

但是当我wget --no-proxy localhost:9999在笔记本电脑上运行时,我收到错误 403。

我可以使用ssh ssh-server 'wget -O - http://www.gnu.org/' >> whatever. 但是为什么隧道不起作用?

所以我想弄清楚正在发生的事情以及代理不允许的事情。

我的猜测是代理专门阻止 ssh 客户端执行 http 请求。是这样吗?

如果是这样 - 代理如何将 ssh-client 与其他程序区分开来?它可以区分来自 ssh-client 的请求和来自另一个程序的请求吗?

以及“将 ssh 客户端屏蔽到另一个程序”(或通过代理传递的其他方式)的常用方法是什么?

PS 如果有人在评论中写了一个免费的 ssh 服务器的地址来测试 ssh 隧道和其他内容,那将会很棒。(通常 ssh 服务器不允许免费隧道。)

ssh proxy ssh-tunneling wget http

5
推荐指数
1
解决办法
3729
查看次数

如何追踪DMA?

我正在开发通过直接内存访问 (DMA) 事务与 PCI 卡通信的软件。我的程序使用一套驱动程序和一个处理 DMA 的库。一切都在 Red Hat Linux 上运行。

为了测试和测量我的程序的性能,我想跟踪 DMA 事务的开始和结束。现在我通过查看库中的几个函数来做到这一点:

  • dma_from_hostdma_to_host通过配置卡寄存器中的值并写入1名为的寄存器来启动事务DMA_DESC_ENABLE
  • dma_wait通过不断检查DMA_DESC_ENABLE寄存器的值来等待事务完成。

但我想要更可靠的确认交易已经开始,并在交易结束时获得更精确的信号。来自 Linux 或硬件本身的东西是最好的。

我知道原则上这是一个麻烦的情况。DMA 的思想是硬件(PCI 卡或主板上的 DMA 控制器)将事物直接复制到进程的内存中,绕过 CPU 和操作系统。但我希望它不会只是将内容复制到 RAM 中而不以某种方式通知 CPU。是否有一些标准方法来跟踪这些交易,或者它是非常特定于平台的?

是否有一些特殊的中断通知 CPU DMA 的开始和结束?我在我使用的驱动程序中找不到类似的东西。但我对司机没有经验,所以我很容易看错地方。

另一个想法,是否有任何类似 PMU 的硬件监视器可以提供这些信息?只计算 PCI 通道上的事务的东西?

还有一个想法,我是否理解可以将自定义 DMA 跟踪器编写为 Linux 模块或 BPF 程序来连续检查该DMA_DESC_ENABLE寄存器的值?这是一种可行的方法吗?有这样的已知示踪剂吗?

linux monitoring tracing

5
推荐指数
1
解决办法
272
查看次数