MoreRSS

site iconsmilejay | 笑遍世界修改

履历:点评、阿里。博客内容:云计算、虚拟化、Linux技术等
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

smilejay | 笑遍世界的 RSS 预览

这才是最快的Mac向Android手机传文件的方法

2025-08-13 01:02:59

手机和Mac电脑在同一个局域网(如:在家里同一个WIFI之下)。

在Mac上启动一个 http server:

cd $your_www_dir   # 进入需要共享的目录
python3 -m http.server   # 启动一个最简单的http服务,默认端口是 8000
# 当看到类似输出时,就是启动成功了: Serving HTTP on :: port 8000 (http://[::]:8000/) ...

可以在电脑上浏览器中,打开 http://localhost:8000/ 检查一下。

然后,手机上浏览:http://192.168.0.104:8000 (这里的192.168.x.x的IP就是电脑在局域网中的IP地址)

很方便,适合技术人员,局域网的下载速度也非常快的。

当然,如果不是在一个局域网中,那就会麻烦一些了;就选择云盘、邮箱等外部系统来中转吧。 甚至就用USB、Type-c的数据线直接连接吧。

Original article: 这才是最快的Mac向Android手机传文件的方法

©2025 笑遍世界. All Rights Reserved.

Mac上删除App的方法(包括强制删除)

2025-08-13 00:51:43

23年初始化电脑时遇到的,只是记录一下。

安装过火狐浏览器 再安装Firefox国际版,但总是打开新安装的国际版,它的配置还是使用国内版火狐。关键是账号体系不打通,国内版火狐登录Firefox账户时,不能选择firefox.com的(只能选firefox.com.cn的),而它们2个账号体系是隔离的。我就是想同步一些之前的账户配置。

应用不是AppStore安装的 则在启动台那里长按应用也不会有删除标志(左上角小叉叉),我一般就暴力删除,注意命令别敲错了,否测删除到关键文件,系统可能出问题。

sudo rm -rf /Applications/Firefox.app/

许多 App 的缓存垃圾等都会存放于特定目录中。比较常见的,如 /Users/用户名/Library/Caches 和 /Users/用户名/Library/Application Support 等。你可以进入文件夹中按需清理。
比如: /Users/your-username/Library/Application\ Support/Firefox

卸载某些应用程序后会留下一些预置文件和缓存等,一般这些文件没有潜在坏处,但是我们确实今后也不打算再装的App,可以将其清理干净:
~/Library/Application Support/(应用程序名称)
~/Library/Preferences/(应用程序名称)
~/Library/Caches/(应用程序名称)

但请务必注意:仅在你完全了解文件夹作用后,才能考虑是否删除,否则可能造成 App 崩溃乃至系统关键功能受损等严重后果。

苹果官网也提到了两种删除App的方法:
1. 使用启动台删除从 App Store 下载的 App
2. 使用“访达”删除 App,在“访达”中点击“应用程序”,将其中的需要删除的App移到“废纸篓”即可。大多数 App 都位于“应用程序”文件夹中。
通过以下任一方式将 App 移到“废纸篓”:a. 将相应 App 拖移到“废纸篓”。 b. 选择相应 App,然后从菜单栏中选取“文件”>“移到废纸篓”。 c. 选择相应 App,然后按下键盘上的 Command-Delete 键。

参考文档:
在Mac上卸载App:https://support.apple.com/zh-cn/102610
区分火狐与Firefox国际版:https://zhuanlan.zhihu.com/p/433010918

Original article: Mac上删除App的方法(包括强制删除)

©2025 笑遍世界. All Rights Reserved.

Ollama及open-webui使用,及Qwen3开源大模型体验

2025-05-01 01:19:32

这两天阿里开源了Qwen3系列推理模型,里面有不少Dense模型的参数量不太大,可以用本地笔记本电脑运行,速来体验一下。

本机电脑配置:MacBook Pro (Apple M2 Pro 芯片)
模型选择:Qwen3-4B(40亿参数),模型占用磁盘空间 2.5GB

Ollama运行Qwen3

  1. 去Ollma官网 https://ollama.com/ 去下载并安装ollama;完成后用 命令 ollama --version 检查一下。
  2. 下载并运行Qwen3:4b模型,就一个命令 ollama run qwen3:4b,Ollama自己会去下载模型文件(2.6GB大小,需要花一点时间)然后运行的。
  3. 第2步完成,就会进入交互式问答界面,就可以开始体验qwen3:4b大模型的推理了。 (注:用 /? 命令查看帮助,用 /bye 退出)

在浏览器中打开 http://localhost:11434/ 可以查看Ollama是否正常运行,同时其API已可用,比如 http://localhost:11434/api/tags

ollama默认监听了 127.0.0.1:11434,如果需要个性化修改(一般建议不要修改了,后面open-webui等也会自动找这个端口),可以设置 OLLAMA_HOST 这个环境变量即可。

使用open-webui通过浏览器UI的方式体验大模型

命令行交互的方式聊天对人类不友好,特别是它还输出markdown格式的文本;那么可以使用open-webui这个工具来支持用浏览器使用本地(也支持远程的大模型)。
有多重方式可以安装open-webui,这里就选择用pip安装的方式。
1. 用命令 pip install open-webui 即可安装open-webui,不过请注意open-webui当前仅支持python3.11(至于怎么安装python3.11这里就不介绍了),所以我这里执行命令其实是:pip3.11 install open-webui
刚开始没注意我系统默认python是3.9版本,通过pip安装时就没有找到oepn-webui包,有如下报错:

ERROR: Could not find a version that satisfies the requirement open-webui (from versions: none)
ERROR: No matching distribution found for open-webui

  1. 用命令 open-webui serve 即可启动服务。 如果希望修改监听地址和段扩,可以 open-webui serve --help查看一下帮助,通过--host、--port参数修改即可。
  2. 浏览器通过地址 http://localhost:8080 来访问open-webui了。如果上面步骤这两个ollama已经启动qwen3:4b模型,那么此时浏览器中已经默认以选中该模型了,就可以低成本体验qwen3的推理能力。

体验下来,MBP电脑运行qwen3:4b还是比较流畅的,模型本身推理能力使用起来也算不错(粗略体验),当然还是容易有些AI幻觉的(比如,问它4B模型是多大参数,它说是400亿;而人眼一眼就是40亿)。

参考:
https://www.runoob.com/ollama/ollama-open-webui.html
https://zhuanlan.zhihu.com/p/1900866584001642539

Original article: Ollama及open-webui使用,及Qwen3开源大模型体验

©2025 笑遍世界. All Rights Reserved.

《性能之巅》读书笔记第11章

2024-12-29 00:40:54

第11章 云计算

我已在云计算行业工作多年,Gregg这里写到的东西都比较熟悉了;如下是一些摘内容摘要和我的评论。

OS虚拟化技术的劣势:
* 任何kernel panic都会影响到所有客户
* 客户不能运行不同的内核版本(评论:也不能再linux上启动Windows guest)
* 也不支持热迁移,kvm虚拟化技术是支持的 (该项是我的评论内容)
目前流行的docker也使用OS虚拟化技术,所以docker也是一样的问题;同时包括kata在内,目前其官网也未支持热迁移。

KVM中一个常见的VM Exit Reason是Guest中执行HLT指令。(评论:在较新的qemu/kvm中支持了cpu-pm=on 透传,可以让guest控制host cpu的power state,可以避免HLT/MWAIT等指令的退出

P500页,作者还有一处错误说GVA到HPA之间可以TLB缓存,是错误的。

一些技术信息拓展

根据豆包查了一些资料,结合个人认知。

概念解释
* GVA(Guest Virtual Address):这是客户机(Guest)操作系统所使用的虚拟地址。在 KVM 虚拟化环境中,客户机操作系统运行在虚拟机中,它看到的是自己的虚拟地址空间。
* HPA(Host Physical Address):这是宿主机(Host)的物理地址。在 KVM 中,虚拟机最终的数据存储和访问都要落实到宿主机的物理资源上。
* TLB(Translation Lookaside Buffer):是一种高速缓存,用于存储虚拟地址到物理地址的转换映射,以加速内存访问。

转换过程分析
一般情况下,在 KVM 虚拟化中,从 GVA 到 HPA 不能直接通过 TLB 转换。
原因在于地址空间的隔离和多层转换需求:
* 首先,客户机操作系统使用 GVA 进行内存访问,这个虚拟地址需要先转换为客户机物理地址(GPA - Guest Physical Address)。这个转换是由客户机操作系统的内存管理单元(MMU)基于其自身的页表来完成的。因为客户机操作系统并不知道它运行在虚拟化环境中,它按照传统的方式管理自己的虚拟地址到物理地址的映射。
* 然后,从 GPA 到 HPA 的转换需要通过 KVM 虚拟化层的介入。KVM 会维护影子页表(Shadow Page Table)或者利用硬件辅助虚拟化技术(如 Intel 的 EPT - Extended Page Table 或 AMD 的 RVI - Rapid Virtualization Indexing)来实现 GPA 到 HPA 的转换。
* TLB 通常是存储虚拟地址到物理地址的缓存,但在 KVM 虚拟化环境下,由于存在 GVA - GPA - HPA 这样的多层转换关系,TLB 缓存的内容通常是 GVA - GPA 或者 GPA - HPA 的映射,而不是直接的 GVA - HPA 映射。

Docker 容器是基于操作系统级别的虚拟化技术。容器技术利用了宿主机(Host)的内核来运行。当启动一个 Docker 容器时,容器内的进程是直接运行在宿主机的内核之上的,容器共享宿主机的内核。

Docker 是基于 Linux 容器技术构建的平台,它利用了 Linux 内核的特性(如 namespaces 和 cgroups)来实现容器的隔离和资源管理。容器本质上是在 Linux 操作系统的用户空间进行隔离,共享 Linux 内核。这种设计使得 Docker 在原生状态下主要用于运行基于 Linux 的应用程序和服务。因为 Windows 操作系统有自己独立的内核和系统架构,和 Linux 内核不兼容,所以在常规的 Docker 运行机制下不能直接启动 Windows Guest OS。

Kata Containers 是一种容器运行时技术,它结合了容器的轻量级和虚拟机的安全性优势。本质上,Kata 在每个容器启动时都会创建一个独立的轻量级虚拟机(VM)来运行容器。最重要的安全特性是内核隔离。

另外,Gregg曾经供职和在本章中多次提到Joyent公司已于2016年被三星电子收购;后来也退出了IaaS共有云的市场。

Original article: 《性能之巅》读书笔记第11章

©2025 笑遍世界. All Rights Reserved.

PCIe代次及传输速率,Gen3/Gen4/Gen5等

2024-11-16 01:12:58

PCIe版本简介

PCIe 是 "Peripheral Component Interconnect Express" 的缩写,中文意思是“外设组件互连快速通道”。这是一种高速串行计算机扩展总线标准,用于计算机内部硬件设备之间的连接,特别是用于连接中央处理单元(CPU)和外设,如图形处理单元(GPU)、固态硬盘(SSD)和其他高速设备。

PCI Express是一种用于连接高速组件的高速串行计算机扩展总线标准,它取代了PCI和PCI- X总线标准,并经过了多次调整改进。PCIe 1.0最初在2002年发布,为了满足日益增长的高带宽需求,之后又相继推出了不同的版本。目前共有五种不同的PCIe标准:PCIe 1.0、PCIe 2.0、PCIe 3.0、PCIe 4.0、PCIe 5.0、PCIe 6.0(于 2022.01 发布),传输速率每过一代增加一倍,PCIe 7.0计划在2025年发布。

PCIe各代次的传输速率、带宽(吞吐量)

值得一提的是,所有的PCIe卡版本都是向后兼容的,也就是说任何版本的PCIe卡和主板都可以以最低版本的模式工作。下表展示了6个传统PCIe版本之间的传输速率和带宽比较(以原始版本N.0为例)。

由于x32并不太常见,上表中就没有写x32的速率。理论上,PCIe 6.0最高支持了256GB/s的带宽。

如果考虑一下线路编码,可以有一些更准确的吞吐量/带宽:(可以看到从PCIe 3.0之后,线路码使用128b/130b编码。这种编码方式是为了实现更高的速率,并加入了均衡、DFE等措施以保证信号完整性。与之前的8b/10b编码相比,128b/130b编码的开销从20%降低到了2%以下)

PCIe卡/插槽的规格

PCIe也有多种规格,x1、x4、x8、x16、x32,x 后面的数字代表 PCIe 插槽有多少条通道(数据如何进出 PCIe 卡)。一个 PCIe x1 插槽有1个通道,可以每个周期传输1位数据。一个 PCIe x4 插槽有4个通道,每个周期可以传输4位数据(依此类推)。x32接口在实际应用中并不常见,通常只在需要极高吞吐量的特殊场合中才会被使用,例如某些高性能计算或特定的企业级存储应用

服务器设备的PCIe规格

Intel SPR、AMD Genoa 平台开始支持PCIe 5.0总线,有些NVMe SSD磁盘是PCIe Gen4 或 Gen5 得设备;在Mellanox的网卡中,CX6 是 PCIe Gen4.0 x16;CX7 是 PCIe Gen5.0 x16/x32。
在Linux系统中,可以通过 lspci -vvv -s $bdf 的命令查看设备是什么PCIe规格,命令输出中查看 “LnkCap”相关的信息,如:Speed 16GT/s, Width x16 就是PCIe 4.0 x16的设备(还有类似这样的信息“[V0] Vendor specific: PCIeGen4 x16”);如下图所示就是查看一个CX6网卡的信息。

参考资料:
https://knowledge.ipason.com/ipKnowledge/knowledgedetail.html/1403
https://fpga.eetrend.com/content/2022/100566300.html
https://community.fs.com/cn/article/pcie-card-selection-guide.html
https://www.nvidia.com/content/dam/en-zz/Solutions/networking/ethernet-adapters/connectX-6-dx-datasheet.pdf
https://www.nvidia.com/content/dam/en-zz/Solutions/networking/ethernet-adapters/connectx-7-datasheet-Final.pdf

Original article: PCIe代次及传输速率,Gen3/Gen4/Gen5等

©2025 笑遍世界. All Rights Reserved.

Linux Shell命令基础汇总(长期更新)

2024-05-04 15:58:53

就是个人记录,方便自己查找信息。

Shell基础及工具

  • chsh -l 或 cat /etc/shells 查看机器安装的所有shell
  • bash --login 是执行脚本的shell成为一个login shell,而login shell会读取系统和用户的profile/rc文件
  • env和export 显示的是环境变量
  • set和declare显示的是环境变量和自定义变量
  • read : -p 显示提示语;-t 设置等待输入的时长(秒);-s 静默模式(用于输入密码等时不显示在屏幕上);-u 从文件描述符中读取输入
  • expr 表达式计算
  • alias,unalias
  • eval 将一个字符串当成命令来执行 cmd_str='ls -l'; eval $cmd_str
  • history 历史命令; ctrl + R 搜索历史命令(如有多个匹配,多次按ctrl+R可以往前搜索;如果找到了,按 左右方方向键可以到命令的头或尾,修改命令后再执行;或者直接回车执行命令); 不想留下记录,export HISTCONTROL=ignorespace,然后在输入命令前加空格,这样命令将不会被记录;或者 export HISTCONTROL=* ,之后输入任何命令都不会被记录,恢复记录export HISTCONTROL=
  • xargs: 从标准输入中读取内容并传递给它协助的命令,如:find . -name "*.log" | grep "FAIL"
  • time:有bash内置的time命令,也有/usr/bin/time系统命令。time打印出一个命令的执行时长。time输出信息重定向: { time command-line; } 2>file 注意分隔符的使用;或 (time command-line) 2>file 这里time紧贴着小括号(这是启动子shell,占用资源,不推荐)。
  • sleep 睡眠,可以支持秒、分、时、天等,也支持0.01、0.003这样小数秒的睡眠,不过sleep命令只能保证10ms级别的精度。
  • sort : -n, --numeric-sort 按照数值大小排序;-k 按照一列或多列顺序排序;-r 表示倒序排序;-h 以human的形式排序,能识别G>M>K
  • cut 提取文件中每一行的一部分;cut -d ' ' -f 1 这种用法时,可以替代awk中的基本用法。

文件与磁盘命令

file - 识别文件的类型和编码格式

ln - 软链接、硬链接的创建 (硬链接不能跨文件系统、不允许普通用户对目录做硬链接)

find - 查找文件或目录

  • find . -type d -name good (根据文件类型查找:d, f, l, b, c, p, s)
  • find . -type f -regex './e.avi.*[0-9]+$' (使用正则表达式进行文件匹配)
  • 多种正则表达式:emacs, posix-awk, posix-basic, posix-egrep, posix-extended
  • find . -type f -mmin -5 (5分钟内被修改过的文件;+5 则是5分钟以前被修改过的;还有mtime按天)
  • find . -type f -size +50M (大约50MB大小的文件)
  • find . -maxdepth 1 size +50M -type f
  • find . -type f -a name "*.log" (-a 设置多个条件;还有 -o 、!expr 等)

du - 查看磁盘占用量

  • du -sm /home/jay/ (du -sh *)
  • du -ch *.tar.gz (-c 是求和)
  • du -ah . (-a 表示所有的文件,包括隐藏文件)
  • du -sh --exclude="*/.*" (--exclude 表示排除部分文件)
  • du -ah . | sort -hr (查看大小并排序;sort -h 表示human排序,能识别G>M>K之类的)
  • du 磁盘空间占用量;ls 展示的是文件内容的大小
  • 最小的磁盘占用量是一个数据快(block),一般是4KB

压缩解压相关命令

  • gzip, gzip -d
  • gzip 可指定压缩级别(1-9级,9级压缩度最高,但速度最慢)
  • tar -zcvf mytgzfile.tar.gz libvirt (-c 压缩,-x 解压缩,-z 表示gzip格式)
  • bzip2, bunzip2 (这两个命令其实是同一个文件;根据执行命令的名称来做不同的事情)
  • tar -jcvf mybizp2file.tar.bz2 (-j 表示bzip2格式)
  • zip, unzip

文本处理

echo - 返回字符

  • echo "Hello $name" 注意双引号、单引号的区别
  • 转义字符:\a, \b, \t, \r, \n等等
  • -n 去掉末尾的换行符
  • echo -e "\033[颜色1;颜色2m 要展示的文字 \033[0m" (输出有颜色的字符;颜色1为前景色、颜色2位背景色)

系统相关

  • uname -r

Original article: Linux Shell命令基础汇总(长期更新)

©2025 笑遍世界. All Rights Reserved.