JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle® VM Server for SPARC 3.1 管理指南
Oracle 技术网
文档库
PDF
打印视图
反馈
search filter icon
search icon

文档信息

使用本文档

第 I 部分 Oracle VM Server for SPARC 3.1 软件

第 1 章 Oracle VM Server for SPARC 软件概述

关于 Oracle VM Server for SPARC 和 Oracle Solaris OS 版本

虚拟机管理程序和 Logical Domains

Logical Domains Manager

域的角色

命令行界面

虚拟输入/输出

虚拟网络

虚拟存储

虚拟控制台

资源配置

持久性配置

Oracle VM Server for SPARC 物理机到虚拟机转换工具

Oracle VM Server for SPARC Configuration Assistant

Oracle VM Server for SPARC 管理信息库

第 2 章 安装和启用软件

必需的 Oracle VM Server for SPARC 软件组件

在新系统上安装 Oracle VM Server for SPARC 软件

更新 Oracle Solaris OS

升级系统固件

下载 Logical Domains Manager

如何下载 Logical Domains Manager 软件 (Oracle Solaris 10)

安装 Logical Domains Manager

自动安装 Logical Domains Manager 软件 (Oracle Solaris 10)

手动安装 Logical Domains Manager 软件

如何手动安装 Oracle VM Server for SPARC 3.1 软件 (Oracle Solaris 10)

启用 Logical Domains Manager 守护进程

如何启用 Logical Domains Manager 守护进程

升级已使用 Oracle VM Server for SPARC 的系统

升级 Oracle Solaris OS

保存和恢复自动保存配置目录

如何保存和恢复自动保存目录

保存和恢复 Logical Domains 约束数据库文件

使用 Oracle Solaris 10 Live Upgrade 功能时保留 Logical Domains 约束数据库文件

升级 Logical Domains Manager 和系统固件

如何停止平台上运行的所有域(控制域除外)

升级至 Oracle VM Server for SPARC 3.1 软件

如何升级至 Oracle VM Server for SPARC 3.1 软件 (Oracle Solaris 10)

如何升级至 Oracle VM Server for SPARC 3.1 软件 (Oracle Solaris 11)

出厂默认配置和禁用域

如何删除所有来宾域

如何删除所有域配置

如何恢复出厂默认配置

如何禁用 Logical Domains Manager

如何删除 Logical Domains Manager

如何从服务处理器恢复出厂默认配置

第 3 章 Oracle VM Server for SPARC 安全

通过使用权限委托管理逻辑域

使用权限配置文件和角色

管理用户权限配置文件

如何将权限配置文件分配给用户

给用户分配角色

如何创建角色并将该角色分配给用户

Logical Domains Manager 权限配置文件内容

通过使用权限控制对域控制台的访问

如何使用角色控制对所有域控制台的访问

如何使用权限配置文件控制对所有域控制台的访问

如何使用角色控制对单一控制台的访问

如何使用权限配置文件控制对单个控制台的访问

启用并使用审计

如何启用审计

如何禁用审计

如何查看审计记录

如何轮转审计日志

使用域控制台日志记录

如何启用或禁用控制台日志记录

域控制台日志记录的服务域要求

第 4 章 设置服务和控制域

输出消息

创建默认服务

如何创建默认服务

控制域的初始配置

如何配置控制域

重新引导以使用域

如何重新引导

启用控制/服务域与其他域之间的联网

如何将虚拟交换机配置为主接口

启用虚拟网络终端服务器守护进程

如何启用虚拟网络终端服务器守护进程

第 5 章 设置来宾域

创建和启动来宾域

如何创建和启动来宾域

在来宾域上安装 Oracle Solaris OS

如何通过 DVD 在来宾域上安装 Oracle Solaris OS

如何通过 Oracle Solaris ISO 文件在来宾域上安装 Oracle Solaris OS

如何在 Oracle Solaris 10 来宾域上使用 Oracle Solaris JumpStart 功能

第 6 章 设置 I/O 域

I/O 域概述

创建 I/O 域的一般准则

通过分配 PCIe 总线创建根域

如何通过分配 PCIe 总线创建 I/O 域

通过分配 PCIe 端点设备创建 I/O 域

直接 I/O 硬件和软件要求

当前直接 I/O 功能限制

规划 PCIe 端点设备配置

重新引导根域

更改 PCIe 硬件

如何通过分配 PCIe 端点设备创建 I/O 域

通过分配 PCIe SR-IOV 虚拟功能创建 I/O 域

SR-IOV 概述

SR-IOV 硬件和软件要求

当前的 SR-IOV 功能限制

静态 SR-IOV

静态 SR-IOV 软件要求

动态 SR-IOV

动态 SR-IOV 软件要求

动态 SR-IOV 配置要求

启用 I/O 虚拟化

如何对 PCIe 总线启用 I/O 虚拟化

PCIe SR-IOV 虚拟功能的使用计划

使用以太网 SR-IOV 虚拟功能

以太网 SR-IOV 硬件要求

以太网 SR-IOV 限制

规划以太网 SR-IOV 虚拟功能的使用

特定于以太网设备和特定于网络的属性

创建以太网虚拟功能

如何创建以太网 SR-IOV 虚拟功能

销毁以太网虚拟功能

如何销毁以太网 SR-IOV 虚拟功能

修改以太网 SR-IOV 虚拟功能

如何修改以太网 SR-IOV 虚拟功能

在 I/O 域中添加和删除以太网 SR-IOV 虚拟功能

如何向 I/O 域添加以太网 SR-IOV 虚拟功能

如何从 I/O 域删除以太网 SR-IOV 虚拟功能

高级 SR-IOV 主题:以太网 SR-IOV

虚拟功能的高级网络配置

使用 SR-IOV 虚拟功能引导 I/O 域

SR-IOV 特定于设备的属性

在 SR-IOV 虚拟功能上创建 VNIC

使用 SR-IOV 虚拟功能创建 I/O 域

如何通过向其分配 SR-IOV 虚拟功能来创建 I/O 域

使用 InfiniBand SR-IOV 虚拟功能

InfiniBand SR-IOV 硬件要求

创建和销毁 InfiniBand 虚拟功能

如何创建 InfiniBand 虚拟功能

如何销毁 InfiniBand 虚拟功能

在 I/O 域中添加和删除 InfiniBand 虚拟功能

如何将 InfiniBand 虚拟功能添加到 I/O 域

如何从 I/O 域删除 InfiniBand 虚拟功能

在根域中添加和删除 InfiniBand 虚拟功能

如何将 InfiniBand 虚拟功能添加到根域

如何从根域删除 InfiniBand 虚拟功能

高级 SR-IOV 主题:InfiniBand SR-IOV

列出 InfiniBand SR-IOV 虚拟功能

确定 InfiniBand SR-IOV 功能

使用光纤通道 SR-IOV 虚拟功能

光纤通道 SR-IOV 硬件要求

光纤通道 SR-IOV 要求和限制

特定于光纤通道设备类的属性

光纤通道虚拟功能的全球名称分配

创建光纤通道 SR-IOV 虚拟功能

如何创建光纤通道 SR-IOV 虚拟功能

销毁光纤通道 SR-IOV 虚拟功能

如何销毁光纤通道 SR-IOV 虚拟功能

修改光纤通道 SR-IOV 虚拟功能

如何修改光纤通道 SR-IOV 虚拟功能

在 I/O 域中添加和删除光纤通道 SR-IOV 虚拟功能

如何向 I/O 域添加光纤通道 SR-IOV 虚拟功能

如何从 I/O 域中删除光纤通道 SR-IOV 虚拟功能

高级 SR-IOV 主题:光纤通道 SR-IOV

在来宾域中访问光纤通道虚拟功能

SR-IOV:重新引导根域

使用非 primary 根域

非 primary 根域要求

非 primary 根域限制

为 PCIe 总线启用 I/O 虚拟化

在非 primary 根域上管理直接 I/O 设备

在非 primary 根域上管理 SR-IOV 虚拟功能

第 7 章 使用虚拟磁盘

虚拟磁盘简介

虚拟磁盘标识符和设备名称

管理虚拟磁盘

如何添加虚拟磁盘

如何多次导出虚拟磁盘后端

如何更改虚拟磁盘选项

如何更改超时选项

如何删除虚拟磁盘

虚拟磁盘外观

完整磁盘

单分片磁盘

虚拟磁盘后端选项

只读 (ro) 选项

独占 (excl) 选项

分片 (slice) 选项

虚拟磁盘后端

物理磁盘或磁盘 LUN

如何将物理磁盘作为虚拟磁盘导出

物理磁盘分片

如何将物理磁盘分片作为虚拟磁盘导出

如何导出分片 2

文件和卷导出

文件或卷作为完整磁盘导出

如何将文件作为完整磁盘导出

如何将 ZFS 卷作为完整磁盘导出

文件或卷作为具有单个分片的磁盘导出

如何将 ZFS 卷作为具有单个分片的磁盘导出

导出卷以及向后兼容性

不同类型的后端的导出方式汇总

将文件和磁盘分片作为虚拟磁盘导出的准则

使用回送文件 (lofi) 驱动程序

直接或间接导出磁盘分片

配置虚拟磁盘多路径

虚拟磁盘多路径和虚拟磁盘超时

如何配置虚拟磁盘多路径

CD、DVD 和 ISO 映像

如何将 CD 或 DVD 从服务域导出到来宾域

如何从控制域导出 ISO 映像以安装来宾域

虚拟磁盘超时

虚拟磁盘和 SCSI

虚拟磁盘和 format 命令

将 ZFS 用于虚拟磁盘

在服务域中配置 ZFS 池

使用 ZFS 存储磁盘映像

使用 ZFS 存储磁盘映像的示例

创建磁盘映像的快照

使用克隆置备新域

克隆引导磁盘映像

如何创建未配置系统的磁盘映像的快照

在 Oracle VM Server for SPARC 环境中使用卷管理器

通过卷管理器使用虚拟磁盘

通过 Solaris Volume Manager 使用虚拟磁盘

在安装了 VxVM 的情况下使用虚拟磁盘

将卷管理器用于虚拟磁盘

将 ZFS 用于虚拟磁盘

将 Solaris Volume Manager 用于虚拟磁盘

将 VxVM 用于虚拟磁盘

第 8 章 使用虚拟网络

虚拟网络简介

Oracle Solaris 10 联网概述

Oracle Solaris 11 联网概述

最大程度地提高虚拟网络性能

硬件和软件要求

对域进行配置以最大程度地提高虚拟网络的性能

虚拟交换机

虚拟网络设备

Inter-Vnet LDC 通道

控制由虚拟网络设备使用的物理网络带宽量

网络带宽限制

设置网络带宽限制

虚拟设备标识符和网络接口名称

如何查找 Oracle Solaris OS 网络接口名称

自动或手动分配 MAC 地址

分配给域的 MAC 地址范围

自动分配算法

检测重复的 MAC 地址

释放的 MAC 地址

将网络适配器和域结合使用

如何确定网络适配器是否符合 GLDv3 (Oracle Solaris 10)

针对 NAT 和路由配置虚拟交换机和服务域

在 Oracle Solaris 10 系统上配置 NAT

如何设置虚拟交换机以为域提供外部连接 (Oracle Solaris 10)

在 Oracle Solaris 11 系统上配置 NAT

如何设置虚拟交换机以为域提供外部连接 (Oracle Solaris 11)

在 Oracle VM Server for SPARC 环境中配置 IPMP

在域中将虚拟网络设备配置到 IPMP 组中

在服务域中配置并使用 IPMP

在 Oracle VM Server for SPARC 虚拟网络中使用基于链路的 IPMP

如何配置物理链路状态更新

在 Logical Domains 1.3 之前的发行版中配置并使用 IPMP

在来宾域中配置 IPMP

在服务域中配置 IPMP

如何为基于探测的 IPMP 配置主机路由

使用 VLAN 标记

端口 VLAN ID

VLAN ID

如何为虚拟交换机和虚拟网络设备分配 VLAN

如何在安装服务器位于 VLAN 中时安装来宾域

使用私有 VLAN

PVLAN 配置信息

创建和删除 PVLAN

创建 PVLAN

删除 PVLAN

查看 PVLAN 信息

使用 NIU 混合 I/O

如何配置虚拟交换机和 NIU 网络设备

如何启用或禁用混合模式

将链路聚合和虚拟交换机结合使用

配置巨型帧

如何配置虚拟网络和虚拟交换机设备以使用巨型帧

与 vnet 和 vsw 驱动程序的早期(不识别巨型帧)版本的兼容性 (Oracle Solaris 10)

Oracle Solaris 11 中联网特定功能的差别

第 9 章 迁移域

域迁移介绍

迁移操作概述

软件兼容性

迁移操作安全性

迁移域

执行模拟运行

执行非交互式迁移

迁移活动域

CPU 的域迁移要求

内存的迁移要求

物理 I/O 设备的迁移要求

虚拟 I/O 设备的迁移要求

PCIe 端点设备的迁移要求

PCIe SR-IOV 虚拟功能的迁移要求

NIU 混合 I/O 的迁移要求

加密单元的迁移要求

活动域中的延迟重新配置

在活动域具有有效的电源管理弹性策略的情况下迁移

对其他域的操作

迁移 OpenBoot PROM 中的域或在内核调试器中运行的域

迁移绑定域或非活动域

虚拟 I/O 设备的迁移要求

PCIe 端点设备的迁移要求

PCIe SR-IOV 虚拟功能的迁移要求

监视正在进行的迁移

取消正在进行的迁移

从失败的迁移中恢复

迁移示例

第 10 章 管理资源

资源重新配置

动态重新配置

延迟重新配置

资源分配

CPU 分配

如何应用整体核心约束

如何应用最大核心数约束

整体核心约束和其他域功能之间的交互作用

CPU 动态重新配置

动态资源管理

为系统配置硬分区

检查域配置

为域配置 CPU 整体核心

如何创建具有 CPU 整体核心的新域

如何为现有域配置 CPU 整体核心

如何为 Primary 域配置 CPU 整体核心

硬分区系统与其他 Oracle VM Server for SPARC 功能之间的交互

CPU 动态重新配置

CPU 动态资源管理

电源管理

域重新引导或重新绑定

为域分配物理资源

如何删除 physical-bindings 约束

如何删除所有非物理绑定资源

管理控制域上的物理资源

针对管理域上物理资源的限制

使用内存动态重新配置

添加内存

删除内存

部分内存 DR 请求

重新配置控制域内存

减少控制域的内存

动态重新配置和延迟重新配置

内存对齐

活动域的内存对齐

绑定域的内存对齐

非活动域的内存对齐

添加未对齐的内存

内存 DR 示例

使用电源管理

使用动态资源管理

列出域资源

计算机可读的输出

标志定义

利用率统计信息定义

查看各种列表

列出约束

第 11 章 管理域配置

管理域配置

可用配置恢复方法

使用自动保存恢复配置

自动恢复策略

如何修改自动恢复策略

保存域配置

恢复域配置

如何从 XML 文件恢复域配置 (ldm add-domain)

如何从 XML 文件恢复域配置 (ldm init-system)

第 12 章 处理硬件错误

硬件错误处理概述

使用 FMA 将有故障的资源列入黑名单或取消其配置

在检测到有故障的资源或缺少的资源后恢复域

降级配置

启用恢复模式

将域标记为已降级

将 I/O 资源标记为已清除

第 13 章 执行其他管理任务

在 CLI 中输入名称

通过网络连接到来宾控制台

使用控制台组

如何将多个控制台组成一个组

停止高负载的域会超时

操作具有 Oracle VM Server for SPARC 的 Oracle Solaris OS

Oracle Solaris OS 启动后 OpenBoot 固件不可用

执行服务器关开机循环

在 Oracle Solaris OS 中发生中断的结果

停止或重新引导控制域的结果

将 Oracle VM Server for SPARC 与服务处理器结合使用

配置域依赖关系

域依赖关系示例

依赖关系循环

通过映射 CPU 和内存地址来确定出错位置

CPU 映射

内存映射

CPU 和内存映射示例

使用通用唯一标识符

虚拟域信息命令和 API

使用逻辑域通道

第 II 部分 可选的 Oracle VM Server for SPARC 软件

词汇表

索引

使用 InfiniBand SR-IOV 虚拟功能

InfiniBand SR-IOV 设备仅支持静态 SR-IOV 功能。

要最大限度地缩短停机时间,请在根域处于延迟重新配置状态或来宾域已停止时作为一个组运行所有 SR-IOV 命令。以这种方式限制的 SR-IOV 命令包括 ldm create-vfldm destroy-vfldm add-ioldm remove-io 命令。

通常,虚拟功能会分配到多个来宾域。重新引导根域会影响已分配有该根域的虚拟功能的所有来宾域。

由于未使用的 InfiniBand 虚拟功能几乎不会产生任何开销,因此,可以通过提前创建所需的虚拟功能(即使不会立即使用这些虚拟功能)来避免停机时间。

InfiniBand SR-IOV 硬件要求

有关所需 PCIe InfiniBand SR-IOV 硬件的信息,请参见Oracle VM Server for SPARC 3.1.1.1、3.1.1 和 3.1 发行说明 中的PCIe SR-IOV 硬件和软件要求

要获得 InfiniBand SR-IOV 支持,根域必须至少运行 Oracle Solaris 11.1.10.5.0 OS。I/O 域可以运行 Oracle Solaris 10 1/13 OS 加上修补程序 148888-04,或者至少运行 Oracle Solaris 11.1.10.5.0 OS。

创建和销毁 InfiniBand 虚拟功能

如何创建 InfiniBand 虚拟功能

此过程介绍如何创建 InfiniBand SR-IOV 虚拟功能。

  1. 在根域上启动延迟重新配置。
    primary# ldm start-reconf root-domain-name
  2. 通过设置 iov=on 启用 I/O 虚拟化。

    请只有在未对具有物理功能的总线启用 I/O 虚拟化时才执行此步骤。

    primary# ldm set-io iov=on bus
  3. 创建一个或多个与该根域中的物理功能关联的虚拟功能。
    primary# ldm create-vf pf-name

    您可以为要创建的每个虚拟功能运行此命令。您还可以使用 –n 选项通过单个命令创建基于同一物理功能的多个虚拟功能。请参见Example 6–7ldm(1M) 手册页。

  4. 重新引导根域。

    运行以下命令之一:

    • 重新引导非 primary 根域。
      primary# ldm stop-domain -r root-domain
    • 重新引导 primary 根域。
      primary# shutdown -i6 -g0 -y
示例 6-15  创建 InfiniBand 虚拟功能
primary# ldm list-io
NAME                                      TYPE   BUS      DOMAIN   STATUS
----                                      ----   ---      ------   ------
pci_0                                     BUS    pci_0    primary
niu_0                                     NIU    niu_0    primary
/SYS/MB/RISER0/PCIE0                      PCIE   pci_0    primary  EMP
/SYS/MB/RISER1/PCIE1                      PCIE   pci_0    primary  EMP
/SYS/MB/RISER2/PCIE2                      PCIE   pci_0    primary  EMP
/SYS/MB/RISER0/PCIE3                      PCIE   pci_0    primary  OCC
/SYS/MB/RISER1/PCIE4                      PCIE   pci_0    primary  OCC
/SYS/MB/RISER2/PCIE5                      PCIE   pci_0    primary  EMP
/SYS/MB/SASHBA0                           PCIE   pci_0    primary  OCC
/SYS/MB/SASHBA1                           PCIE   pci_0    primary  OCC
/SYS/MB/NET0                              PCIE   pci_0    primary  OCC
/SYS/MB/NET2                              PCIE   pci_0    primary  OCC
/SYS/MB/RISER0/PCIE3/IOVIB.PF0            PF     pci_0    primary
/SYS/MB/RISER1/PCIE4/IOVIB.PF0            PF     pci_0    primary
/SYS/MB/NET0/IOVNET.PF0                   PF     pci_0    primary
/SYS/MB/NET0/IOVNET.PF1                   PF     pci_0    primary
/SYS/MB/NET2/IOVNET.PF0                   PF     pci_0    primary
/SYS/MB/NET2/IOVNET.PF1                   PF     pci_0    primary

以下命令显示有关指定物理功能的更多详细信息。maxvfs 值表示该设备所支持的最多虚拟功能数。

primary# ldm list-io -l /SYS/MB/RISER1/PCIE4/IOVIB.PF0
NAME                                      TYPE   BUS      DOMAIN   STATUS
----                                      ----   ---      ------   ------
/SYS/MB/RISER1/PCIE4/IOVIB.PF0            PF     pci_0    primary
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0]
    maxvfs = 64

以下示例说明如何创建静态虚拟功能。首先,在 primary 域上启动延迟重新配置,然后对 pci_0 PCIe 总线启用 I/O 虚拟化。由于已将 pci_0 总线分配到 primary 根域,因此,请使用 ldm set-io 命令启用 I/O 虚拟化。

primary# ldm start-reconf primary
Initiating a delayed reconfiguration operation on the primary domain.
All configuration changes for other domains are disabled until the primary
domain reboots, at which time the new configuration for the primary domain
will also take effect.

primary# ldm set-io iov=on pci_0
-----------------------------------------------------------------------
Notice: The primary domain is in the process of a delayed reconfiguration.
Any changes made to the primary domain will only take effect after it reboots.
-----------------------------------------------------------------------

现在,可以使用 ldm create-vf 命令从 /SYS/MB/RISER1/PCIE4/IOVIB.PF0 物理功能创建虚拟功能。

primary# ldm create-vf /SYS/MB/RISER1/PCIE4/IOVIB.PF0
-----------------------------------------------------------------------
Notice: The primary domain is in the process of a delayed reconfiguration.
Any changes made to the primary domain will only take effect after it reboots.
----------------------------------------------------------------------
Created new vf: /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF0

请注意,在同一个延迟重新配置过程中,可以创建多个虚拟功能。以下命令可以再创建一个虚拟功能:

primary# ldm create-vf /SYS/MB/RISER1/PCIE4/IOVIB.PF0
-----------------------------------------------------------------------
Notice: The primary domain is in the process of a delayed reconfiguration.
Any changes made to the primary domain will only take effect after it reboots.
-----------------------------------------------------------------------
Created new vf: /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF1

最后,重新引导 primary 根域以使更改生效。

primary# shutdown -i6 -g0 -y
Shutdown started.

Changing to init state 6 - please wait
...

如何销毁 InfiniBand 虚拟功能

此过程介绍如何销毁 InfiniBand SR-IOV 虚拟功能。

如果当前未将虚拟功能分配给域,则可以销毁该虚拟功能。虚拟功能只能按照与创建时相反的顺序进行销毁,因此,只能销毁已创建的最后一个虚拟功能。生成的配置由物理功能驱动程序验证。

  1. 在根域上启动延迟重新配置。
    primary# ldm start-reconf root-domain-name
  2. 销毁一个或多个与该根域中的物理功能关联的虚拟功能。
    primary# ldm destroy-vf vf-name

    您可以为要销毁的每个虚拟功能运行此命令。您还可以使用 –n 选项通过单个命令销毁基于同一物理功能的多个虚拟功能。请参见Example 6–9ldm(1M) 手册页。

  3. 重新引导根域。

    运行以下命令之一:

    • 重新引导非 primary 根域。
      primary# ldm stop-domain -r root-domain
    • 重新引导 primary 根域。
      primary# shutdown -i6 -g0 -y
示例 6-16  销毁 InfiniBand 虚拟功能

以下示例说明如何销毁静态 InfiniBand 虚拟功能 /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF1

ldm list-io 命令可显示有关总线、物理功能和虚拟功能的信息。

primary# ldm list-io
NAME                                      TYPE   BUS      DOMAIN STATUS
----                                      ----   ---      ------ ------
pci_0                                     BUS    pci_0    primary  IOV
...
/SYS/MB/RISER1/PCIE4/IOVIB.PF0            PF     pci_0    primary
...
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF0        VF     pci_0
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF1        VF     pci_0

可以使用 ldm list-io -l 命令获取有关物理功能和相关虚拟功能的更多详细信息。

primary# ldm list-io -l /SYS/MB/RISER1/PCIE4/IOVIB.PF0
NAME                                      TYPE   BUS      DOMAIN STATUS
----                                      ----   ---      ------ ------
/SYS/MB/RISER1/PCIE4/IOVIB.PF0            PF     pci_0    primary
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0]
    maxvfs = 64
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF0        VF     pci_0
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0,1]
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF1        VF     pci_0
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0,2]

只有当未将某一虚拟功能分配到域时,才能销毁该虚拟功能。ldm list-io -l 输出中的 DOMAIN 列可显示将虚拟功能分配到的任何域的名称。此外,虚拟功能必须按照与创建时相反的顺序来销毁。因此,在此示例中,必须先销毁 /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF1 虚拟功能,然后再销毁 /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF0 虚拟功能。

在确定了正确的虚拟功能之后,可以将其销毁。首先,启动延迟重新配置。

primary# ldm start-reconf primary
Initiating a delayed reconfiguration operation on the primary domain.
All configuration changes for other domains are disabled until the primary
domain reboots, at which time the new configuration for the primary domain
will also take effect.

primary# ldm destroy-vf /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF1
-----------------------------------------------------------------------
Notice: The primary domain is in the process of a delayed reconfiguration.
Any changes made to the primary domain will only take effect after it reboots.
-----------------------------------------------------------------------

可以在延迟重新配置状态下发出多个 ldm destroy-vf 命令。这样,您也可以销毁 /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF0

最后,重新引导 primary 根域以使更改生效。

primary# shutdown -i6 -g0 -y
Shutdown started.

Changing to init state 6 - please wait
...

在 I/O 域中添加和删除 InfiniBand 虚拟功能

如何将 InfiniBand 虚拟功能添加到 I/O 域

此过程介绍如何向 I/O 域添加 InfiniBand SR-IOV 虚拟功能。

  1. 停止 I/O 域。
    primary# ldm stop-domain domain-name
  2. 将一个或多个虚拟功能添加到 I/O 域。

    vf-name 是虚拟功能的 pseudonym 名称或路径名称。建议做法是使用 pseudonym 名称。domain-name 用于指定要将虚拟功能添加到的域的名称。指定的 I/O 域必须处于非活动或绑定状态。

    primary# ldm add-io vf-name domain-name
  3. 启动 I/O 域。
    primary# ldm start-domain domain-name
示例 6-17  添加 InfiniBand 虚拟功能

以下示例说明如何将 /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2 虚拟功能添加到 iodom1 I/O 域。

首先,确定要分配的虚拟功能。

primary# ldm list-io
NAME                                      TYPE   BUS      DOMAIN STATUS
----                                      ----   ---      ------ ------
pci_0                                     BUS    pci_0    primary  IOV
...
/SYS/MB/RISER1/PCIE4/IOVIB.PF0            PF     pci_0    primary
...
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF0        VF     pci_0
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF1        VF     pci_0
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2        VF     pci_0
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF3        VF     pci_0

要将某个虚拟功能添加到 I/O 域,该虚拟功能必须尚未分配。DOMAIN 列可指示要将该虚拟功能分配到的域的名称。在此示例中,/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2 未分配到域。

要将虚拟功能添加到某个域,该域必须处于非活动或绑定状态。

primary# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  NORM  UPTIME
primary          active     -n-cv-  UART    32    64G      0.2%  0.2%  56m
iodom1           active     -n----  5000    8     8G        33%   33%  25m

ldm list-domain 输出显示 iodom1 I/O 域处于活动状态,因此,必须将其停止。

primary# ldm stop iodom1
LDom iodom1 stopped
primary# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  NORM  UPTIME
primary          active     -n-cv-  UART    32    64G      0.0%  0.0%  57m
iodom1           bound      ------  5000    8     8G

现在,您可以将该虚拟功能添加到该 I/O 域。

primary# ldm add-io /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2 iodom1
primary# ldm list-io
...
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2        VF     pci_0    iodom1

请注意,可以在 I/O 域停止期间添加多个虚拟功能。例如,可以将其他未分配的虚拟功能(如 /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF3)添加到 iodom1 中。添加虚拟功能后,可以重新启动 I/O 域。

primary# ldm start iodom1
LDom iodom1 started
primary# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  NORM  UPTIME
primary          active     -n-cv-  UART    32    64G      1.0%  1.0%  1h 18m
iodom1           active     -n----  5000    8     8G        36%   36%  1m

如何从 I/O 域删除 InfiniBand 虚拟功能

此过程介绍如何从 I/O 域中删除 InfiniBand SR-IOV 虚拟功能。

  1. 停止 I/O 域。
    primary# ldm stop-domain domain-name
  2. 从 I/O 域中删除一个或多个虚拟功能。

    vf-name 是虚拟功能的 pseudonym 名称或路径名称。建议做法是使用设备 pseudonym。domain-name 用于指定要从中删除虚拟功能的域的名称。指定的 I/O 域必须处于非活动或绑定状态。


    注 - 从 I/O 域删除虚拟功能之前,请确保该虚拟功能在引导该域时并不至关重要。
    primary# ldm rm-io vf-name domain-name
  3. 启动 I/O 域。
    primary# ldm start-domain domain-name
示例 6-18  删除 InfiniBand 虚拟功能

以下示例说明如何从 iodom1 I/O 域删除 /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2 虚拟功能。

首先,确定要删除的虚拟功能。

primary# ldm list-io
NAME                                      TYPE   BUS      DOMAIN STATUS
----                                      ----   ---      ------ ------
pci_0                                     BUS    pci_0    primary  IOV
...
/SYS/MB/RISER1/PCIE4/IOVIB.PF0            PF     pci_0    primary
...
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF0        VF     pci_0
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF1        VF     pci_0
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2        VF     pci_0    iodom1
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF3        VF     pci_0    iodom1

DOMAIN 列显示虚拟功能所分配到的域的名称。/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2 虚拟功能已分配到 iodom1

要从某个 I/O 域中删除虚拟功能,该域必须处于非活动或绑定状态。使用 ldm list-domain 命令可确定域的状态。

primary# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  NORM  UPTIME
primary          active     -n-cv-  UART    32    64G      0.3%  0.3%  29m
iodom1           active     -n----  5000    8     8G        17%   17%  11m

在此示例中,iodom1 域处于活动状态,因此,必须将其停止。

primary# ldm stop iodom1
LDOM iodom1 stopped
primary# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  NORM  UPTIME
primary          active     -n-cv-  UART    32    64G      0.0%  0.0%  31m
iodom1           bound      ------  5000    8     8G

现在,您可以从 iodom1 中删除 /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2 虚拟功能。

primary# ldm rm-io /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2 iodom1
primary# ldm list-io
NAME                                      TYPE   BUS      DOMAIN STATUS
----                                      ----   ---      ------ ------
...
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2        VF     pci_0
...

请注意,该虚拟功能的 DOMAIN 列现在为空。

可以在 I/O 域停止期间删除多个虚拟功能。在此示例中,您也可以删除 /SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF3 虚拟功能。删除虚拟功能后,可以重新启动 I/O 域。

primary# ldm start iodom1
LDom iodom1 started
primary# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  NORM  UPTIME
primary          active     -n-cv-  UART    32    64G      0.3%  0.3%  39m
iodom1           active     -n----  5000    8     8G       9.4%  9.4%  5s

在根域中添加和删除 InfiniBand 虚拟功能

如何将 InfiniBand 虚拟功能添加到根域

此过程介绍如何向根域添加 InfiniBand SR-IOV 虚拟功能。

  1. 启动延迟重新配置。
    primary# ldm start-reconf root-domain
  2. 将一个或多个虚拟功能添加到根域。

    vf-name 是虚拟功能的 pseudonym 名称或路径名称。建议做法是使用 pseudonym 名称。root-domain-name 用于指定要将虚拟功能添加到的根域的名称。

    primary# ldm add-io vf-name root-domain-name
  3. 重新引导根域。

    运行以下命令之一:

    • 重新引导非 primary 根域。
      primary# ldm stop-domain -r root-domain-name
    • 重新引导 primary 根域。
      primary# shutdown -i6 -g0 -y

如何从根域删除 InfiniBand 虚拟功能

此过程介绍如何从根域中删除 InfiniBand SR-IOV 虚拟功能。

  1. 启动延迟重新配置。
    primary# ldm start-reconf root-domain
  2. 从根域删除一个或多个虚拟功能。

    vf-name 是虚拟功能的 pseudonym 名称或路径名称。建议做法是使用 pseudonym 名称。root-domain-name 用于指定要将虚拟功能添加到的根域的名称。

    primary# ldm remove-io vf-name root-domain-name
  3. 重新引导根域。

    运行以下命令之一:

    • 重新引导非 primary 根域。
      primary# ldm stop-domain -r root-domain-name
    • 重新引导 primary 根域。
      primary# shutdown -i6 -g0 -y

高级 SR-IOV 主题:InfiniBand SR-IOV

本节介绍如何确定 InfiniBand 物理功能和虚拟功能,以及如何将 Logical Domains Manager 与 InfiniBand 物理功能和虚拟功能的 Oracle Solaris 视图关联起来。

列出 InfiniBand SR-IOV 虚拟功能

以下示例说明使用不同方法来显示有关 /SYS/MB/RISER1/PCIE4/IOVIB.PF0 物理功能的信息。如果某个物理功能名称包含 IOVIB 字符串,则表示这是一个 InfiniBand SR-IOV 设备。

primary# ldm list-io
NAME                                      TYPE   BUS      DOMAIN   STATUS
----                                      ----   ---      ------   ------
pci_0                                     BUS    pci_0    primary  IOV
niu_0                                     NIU    niu_0    primary
/SYS/MB/RISER0/PCIE0                      PCIE   pci_0    primary  EMP
/SYS/MB/RISER1/PCIE1                      PCIE   pci_0    primary  EMP
/SYS/MB/RISER2/PCIE2                      PCIE   pci_0    primary  EMP
/SYS/MB/RISER0/PCIE3                      PCIE   pci_0    primary  OCC
/SYS/MB/RISER1/PCIE4                      PCIE   pci_0    primary  OCC
/SYS/MB/RISER2/PCIE5                      PCIE   pci_0    primary  EMP
/SYS/MB/SASHBA0                           PCIE   pci_0    primary  OCC
/SYS/MB/SASHBA1                           PCIE   pci_0    primary  OCC
/SYS/MB/NET0                              PCIE   pci_0    primary  OCC
/SYS/MB/NET2                              PCIE   pci_0    primary  OCC
/SYS/MB/RISER0/PCIE3/IOVIB.PF0            PF     pci_0    primary
/SYS/MB/RISER1/PCIE4/IOVIB.PF0            PF     pci_0    primary
/SYS/MB/NET0/IOVNET.PF0                   PF     pci_0    primary
/SYS/MB/NET0/IOVNET.PF1                   PF     pci_0    primary
/SYS/MB/NET2/IOVNET.PF0                   PF     pci_0    primary
/SYS/MB/NET2/IOVNET.PF1                   PF     pci_0    primary
/SYS/MB/RISER0/PCIE3/IOVIB.PF0.VF0        VF     pci_0    primary
/SYS/MB/RISER0/PCIE3/IOVIB.PF0.VF1        VF     pci_0    primary
/SYS/MB/RISER0/PCIE3/IOVIB.PF0.VF2        VF     pci_0    iodom1
/SYS/MB/RISER0/PCIE3/IOVIB.PF0.VF3        VF     pci_0    iodom1
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF0        VF     pci_0    primary
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF1        VF     pci_0    primary
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2        VF     pci_0    iodom1
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF3        VF     pci_0    iodom1

ldm list-io -l 命令可提供有关指定物理功能设备 /SYS/MB/RISER1/PCIE4/IOVIB.PF0 的更多详细信息。maxvfs 值显示该物理设备可支持的最多虚拟功能数为 64。对于与物理功能关联的每个虚拟功能,输出会显示以下信息:

ldm list-io -l 输出显示 VF0VF1 已分配到 primary 域,而 VF2VF3 已分配到 iodom1 I/O 域。

primary# ldm list-io -l /SYS/MB/RISER1/PCIE4/IOVIB.PF0
NAME                                      TYPE   BUS      DOMAIN   STATUS
----                                      ----   ---      ------   ------
/SYS/MB/RISER1/PCIE4/IOVIB.PF0            PF     pci_0    primary
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0]
    maxvfs = 64
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF0        VF     pci_0    primary
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0,1]
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF1        VF     pci_0    primary
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0,2]
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2        VF     pci_0    iodom1
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0,3]
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF3        VF     pci_0    iodom1
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0,4]
确定 InfiniBand SR-IOV 功能

本节介绍如何在 Oracle Solaris 11 和 Oracle Solaris 10 系统上确定 InfiniBand SR-IOV 设备。

使用 ldm list-io -l 命令可显示与每个物理功能和虚拟功能关联的 Oracle Solaris 设备路径名称。

primary# ldm list-io -l /SYS/MB/RISER1/PCIE4/IOVIB.PF0
NAME                                      TYPE   BUS      DOMAIN   STATUS
----                                      ----   ---      ------   ------
/SYS/MB/RISER1/PCIE4/IOVIB.PF0            PF     pci_0    primary
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0]
    maxvfs = 64
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF0        VF     pci_0    primary
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0,1]
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF1        VF     pci_0    primary
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0,2]
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF2        VF     pci_0    iodom1
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0,3]
/SYS/MB/RISER1/PCIE4/IOVIB.PF0.VF3        VF     pci_0    iodom1
[pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0,4]

Oracle Solaris 11:

使用 Oracle Solaris 11 dladm show-phys -L 命令可将每个 IP over InfiniBand (IPoIB) 实例与其物理卡匹配。例如,以下命令显示哪些 IPoIB 实例使用插槽 PCIE4 中的卡,即,前面的 ldm list-io -l 示例中显示的卡。

primary# dladm show-phys -L | grep PCIE4
net5              ibp0         PCIE4/PORT1
net6              ibp1         PCIE4/PORT2
net19             ibp8         PCIE4/PORT1
net9              ibp9         PCIE4/PORT2
net18             ibp4         PCIE4/PORT1
net11             ibp5         PCIE4/PORT2

每个 InfiniBand 主机通道适配器 (host channel adapter, HCA) 设备都有一个全局唯一标识符 (globally unique ID, GUID)。每个端口也有 GUID(通常,一个 HCA 具有两个端口)。InfiniBand HCA GUID 用于唯一标识相应的适配器。端口 GUID 用于唯一标识每个 HCA 端口,并承担与网络设备的 MAC 地址类似的角色。这些 16 位十六进制数字 GUID 可供 InfiniBand 管理工具和诊断工具使用。

使用 Oracle Solaris 11 dladm show-ib 命令可获取有关 InfiniBand SR-IOV 设备的 GUID 信息。同一设备的物理功能和虚拟功能具有相关的 HCA GUID 值。HCA GUID 的第 11 位十六进制数字显示了物理功能与其虚拟功能之间的关系。请注意,在 HCAGUID 和 PORTGUID 列中,前导零均已禁止显示。

例如,物理功能 PF0 具有两个虚拟功能:VF0VF1,这两个虚拟功能已分配到 primary 域。每个虚拟功能的第 11 位十六进制数字都是在相关物理功能的基础上递增 1。因此,如果 PF0 的 GUID 为 8,则 VF0VF1 的 GUID 将分别为 9A

以下 dladm show-ib 命令输出显示 net5net6 链路属于物理功能 PF0net19net9 链路属于同一设备的 VF0,而 net18net11 链路则属于 VF1

primary# dladm show-ib
LINK         HCAGUID         PORTGUID        PORT STATE  PKEYS
net6         21280001A17F56  21280001A17F58  2    up     FFFF
net5         21280001A17F56  21280001A17F57  1    up     FFFF
net19        21290001A17F56  14050000000001  1    up     FFFF
net9         21290001A17F56  14050000000008  2    up     FFFF
net18        212A0001A17F56  14050000000002  1    up     FFFF
net11        212A0001A17F56  14050000000009  2    up     FFFF

以下 Oracle Solaris 11 dladm show-phys 输出中的设备显示了链路和底层 InfiniBand 端口设备 (ibpX) 之间的关系。

primary# dladm show-phys
LINK              MEDIA                STATE      SPEED  DUPLEX    DEVICE
...
net6              Infiniband           up         32000  unknown   ibp1
net5              Infiniband           up         32000  unknown   ibp0
net19             Infiniband           up         32000  unknown   ibp8
net9              Infiniband           up         32000  unknown   ibp9
net18             Infiniband           up         32000  unknown   ibp4
net11             Infiniband           up         32000  unknown   ibp5

使用 ls -l 命令可显示实际 InfiniBand 端口(IB 端口)设备路径。IB 端口设备是 ldm list-io -l 输出中所示设备路径的子项。物理功能的单元地址包含一部分(如 pciex15b3,673c@0),而虚拟功能的单元地址则包含两部分(如 pciex15b3,1002@0,2)。此单元地址的第二部分比虚拟功能编号大 1。(在此示例中,第二个组成部分为 2,因此,该设备为虚拟功能 1。)以下输出显示 /dev/ibp0 为物理功能,而 /dev/ibp5 为虚拟功能。

primary# ls -l /dev/ibp0
lrwxrwxrwx   1 root     root          83 Apr 18 12:02 /dev/ibp0 ->
../devices/pci@400/pci@1/pci@0/pci@0/pciex15b3,673c@0/hermon@0/ibport@1,0,ipib:ibp0
primary# ls -l /dev/ibp5
lrwxrwxrwx   1 root     root          85 Apr 22 23:29 /dev/ibp5 ->
../devices/pci@400/pci@1/pci@0/pci@0/pciex15b3,1002@0,2/hermon@3/ibport@2,0,ipib:ibp5

可以使用 OpenFabrics ibv_devices 命令查看 OpenFabrics 设备名称和节点 (HCA) GUID。如果具有虚拟功能,则 Type 列可指示此功能为物理功能还是虚拟功能。

primary# ibv_devices
device                 node GUID            type
------              ----------------        ----
mlx4_4              0002c90300a38910         PF
mlx4_5              0021280001a17f56         PF
mlx4_0              0002cb0300a38910         VF
mlx4_1              0002ca0300a38910         VF
mlx4_2              00212a0001a17f56         VF                        
mlx4_3              0021290001a17f56         VF

Oracle Solaris 10:

在 Oracle Solaris 10 来宾 I/O 域中,使用 dladm show-dev 命令可显示每个 IPoIB 实例,其名称格式为 ibdxx

# dladm show-dev
vnet0          link: up        speed: 0     Mbps       duplex: unknown
ibd0           link: up        speed: 32000 Mbps       duplex: unknown
ibd1           link: up        speed: 32000 Mbps       duplex: unknown
ibd2           link: up        speed: 32000 Mbps       duplex: unknown
ibd3           link: up        speed: 32000 Mbps       duplex: unknown

可以对 /devices/ 目录中的 HCA 路径名称使用 ls -l 命令来提取 HCA 及其 HCA GUID。

# ls -l /devices/ib\:[0-9]*
crw-r--r--   1 root     sys       67,  0 Jun 12 16:27 /devices/ib:212B0001A17F56
crw-r--r--   1 root     sys       67,  0 Jun 12 16:27 /devices/ib:212C0001A17F56

ibv_devices 输出中的 GUID(请注意第 11 位十六进制数字,即,此示例中的 "B" 和 "C")表示这些虚拟功能已分配到 Oracle Solaris 10 域。可以通过对 /dev IPoIB 路径名称使用 ls -l 命令来获取有关 IPoIB 实例的更多信息。

# ls -l /dev/ibd*
lrwxrwxrwx   1 root     other         29 May 23 16:26 /dev/ibd ->
../devices/pseudo/clone@0:ibd
lrwxrwxrwx   1 root     root          89 May 31 10:52 /dev/ibd0 ->
../devices/pci@400/pci@1/pci@0/pci@0/pciex15b3,1002@0,3/hermon@0/ibport@1,ffff,ipib:ibd0
lrwxrwxrwx   1 root     root          89 May 31 10:52 /dev/ibd1 ->
../devices/pci@400/pci@1/pci@0/pci@0/pciex15b3,1002@0,3/hermon@0/ibport@2,ffff,ipib:ibd1
lrwxrwxrwx   1 root     root          89 Jun 12 18:36 /dev/ibd2 ->
../devices/pci@400/pci@1/pci@0/pci@0/pciex15b3,1002@0,4/hermon@1/ibport@1,ffff,ipib:ibd2
lrwxrwxrwx   1 root     root          89 Jun 12 18:36 /dev/ibd3 ->
../devices/pci@400/pci@1/pci@0/pci@0/pciex15b3,1002@0,4/hermon@1/ibport@2,ffff,ipib:ibd3

每个路径均以 ldm list-io -l 输出中显示的设备路径开头。虚拟功能(如 pciex15b3,1002@0,4)的单元地址包含两部分,其中的第二部分比虚拟功能编号(在此示例中为 VF3)大 1。

ibport 设备的单元地址包含三部分,后跟冒号和 IPoIB 设备实例名称。此单元地址的第一部分为端口号。第二部分为分区键(P 键)十六进制值。请注意,InfiniBand P 键值类似于以太网的 VLAN。第三部分为字符串 ipib

ls -l /dev/ibd3 命令输出显示 ibd3 IPoIB 实例使用端口 2 和 P 键值 ffff