Asutorufaのブログ

こんにちは


  • Home

  • Tags

  • Categories

  • Archives

  • About

  • Friends

  • Search

使用GVT-g显卡虚拟化

Posted on 2021-01-17 | Post modified: 2021-01-17 | In Linux

为内核添加参数

比如grub在/etc/default/grub的GRUB_CMDLINE_LINUX_DEFAULT=中添加

intel_iommu=on i915.enable_gvt=1 i915.enable_guc=0

启用modules

在/etc/mkinitcpio.conf的MODULES=()`中添加:

# linux 5.14后,arch的linux内核模块已经不会勾选vfio-mdev,自测不影响gvt-g
kvmgt vfio vfio-iommu-type1s

然后运行,我用的zen内核所以是linux-zen,默认内核是linux

sudo mkinitcpio -p linux-zen

重启计算机

查看/sys/devices/pci0000:00/0000:00:02.0/mdev_supported_types可以看见类似如下的目录

Read more »

gpg使用

Posted on 2020-10-02 | Post modified: 2020-10-02 | In linux

生成一个密钥

gpg --full-gen-key

之后会选择加密方式, 有效期, 用户名及邮箱, 密码, 按自己需求填就行了.

创建一个子密钥

gpg --edit-key [key hash]

gpg> addkey
#只有与前面是相同的, 按需求选择.

gpg> save
# 保存

导出密钥

gpg -o /path/gpg_key --export-secret-keys [key hash]

导出子密钥

gpg -o /path/gpg_key.sub --export-secret-subkeys [key hash]

导出吊销证书

gpg --generate-revocation [key hash]
# 输出是文本内容, 复制保存下来就行了
Read more »

GeoIP mmdb format

Posted on 2020-07-27 | Post modified: 2020-07-27 | In Network

complete document MaxMind DB File Format SpecificationDescription

here is only how convert trie tree to array

0100, 1011 -> trie

              root
               |
         +-----+------+
        /              \
       0                1
     /   \             /  \
   null   1           0   null
         / \        /   \
        0 null     null   1
       / \               / \
       0 null         null  1

trie -> array
left is 0, right is 1
value is index of array

Read more »

DNS over HTTPS

Posted on 2020-06-23 | Post modified: 2020-06-23 | In Network

这个DNS系列现在有以下几篇文章
DNS EDNS DNSSEC DNS over HTTPS 完整代码请看DNS


DOH就比较简单了,因为DOH使用的请求数据和应答数据均为之前的DNS协议格式,包括DNS,EDNS,DNSSEC…当然是否支持EDNS,DNSSEC需要看DNS服务器的支持情况
DOH的最主要的区别是把DNS使用的UDP,换成了HTTPS,这样就能防止DNS污染了,而且可以使用DNSSEC加上ESNI来防止证书劫持,DOH的协议在rfc8484中有定义
DOH主要有两种方式HTTP的GET请求和POST的请求

GET

GET请求需要使用BASE64对请求的字节数据进行序列化,然后作为参数传递,获取到的数据使用我们之前的解析进行解析就行了

func get(dReq []byte, server string) (body []byte, err error) {
 query := strings.Replace(base64.URLEncoding.EncodeToString(dReq), "=", "", -1)
 urls := "https://" + server + "/dns-query?dns=" + query
 res, err := http.Get(urls)
 if err != nil {
  return nil, err
 }
 defer res.Body.Close()
 body, err = ioutil.ReadAll(res.Body)
 if err != nil {
  return nil, err
 }
 return
}

POST

POST并不需要进行序列化,直接把原始请求数据作为body就行了

Read more »

DNSSEC

Posted on 2020-06-23 | Post modified: 2020-06-23 | In Network

这个DNS系列现在有以下几篇文章
DNS EDNS DNSSEC DNS over HTTPS 完整代码请看DNS


注意: 这里我只完成了请求字段,主要原因是因为我学习这些DNS协议是为了找到防止DNS污染的方法,而DNSSEC并不能,而且应答头比较复杂,可能还要了解ssl和tls的知识,所以这里我没有完成代码,想了解的请看protocol change rfc4034 rfc4035 Algorithm

DNSSEC也是使用了EDNS,而且只需要改一个字段,就是之前提到Z,具体协议请看

          +0 (MSB)                +1 (LSB)
   +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
0: |   EXTENDED-RCODE      |       VERSION         |
   +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
2: |DO|                    Z                       |
   +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

完成请求头

Read more »

EDNS

Posted on 2020-06-22 | Post modified: 2020-06-22 | In Network

这个DNS系列现在有以下几篇文章
DNS EDNS DNSSEC DNS over HTTPS 完整代码请看DNS

EDNS

上一篇我们写了DNS,EDNS就是DNS的功能扩充.
上一篇的DNS里头部有ARCOUNT的计数,EDNS就包含在那个里面,EDNS发送的请求在请求头之后的Additional中,应答在Answer和Authoritative之后,我们可看以下图,跟清晰了吧

+---------------------+
|        Header       |
+---------------------+
|       Question      | the question for the name server
+---------------------+
|        Answer       | RRs answering the question
+---------------------+
|      Authority      | RRs pointing toward an authority
+---------------------+
|      Additional     | RRs holding additional information
+---------------------+

协议格式

具体协议内容请看rfc2671,rfc7871

Read more »

HP Laptop linux 下intel&amd双显卡

Posted on 2020-06-05 | Post modified: 2020-06-05 | In linux

查看双显卡切换情况,正常情况下如果没有在用独显应该显示是DynOff,但是我这里即使是不开桌面也是DynPwr

[ ~ ] cat /sys/kernel/debug/vgaswitcheroo/switch
0:DIS-Audio: :DynPwr:0000:01:00.1
1:IGD:+:Pwr:0000:00:02.0
2:DIS: :DynPwr:0000:01:00.0

查看dmesg找到

[    3.495606] [drm] amdgpu kernel modesetting enabled.
[    3.495628] vga_switcheroo: detected switching method \_SB_.PCI0.GFX0.ATPX handle
[    3.495741] ATPX version 1, functions 0x00000033
[    3.495873] ATPX Hybrid Graphics

找到了调用的方法,网上搜了一圈都没有使用方法,然后使用acpi_call尝试了几个参数,最后找到

echo "\_SB_.PCI0.GFX0.ATPX 2 0" >  /proc/acpi/call

嗯,确实有用,但是实在是太暴力了,直接把整个显卡移除,可以看一下日志

Read more »

DNS客户端协议详解

Posted on 2020-05-31 | Post modified: 2020-05-31 | In Network

这个DNS系列现在有以下几篇文章
DNS EDNS DNSSEC DNS over HTTPS 完整代码请看DNS

DNS Header

                                1  1  1  1  1  1
  0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                      ID                       |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR|   Opcode  |AA|TC|RD|RA|   Z    |   RCODE   |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    QDCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ANCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    NSCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ARCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

header在dns请求和应答中相同的,查询中有Query Section,应答中有answer section.

  • ID: 2字节,应答中也有ID,可以用来判断是否为我们请求的应答
  • QR:1bit,请求时为0,应答时为1
  • Opcode:4bit 通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求),[3,15]保留值
  • AA:1bit authoritative answer,在应答中才有效
  • TC:1bit 表示可截断
  • RD:1bit 期望使用递归查询
  • RA:1bit 在应答中返回,返回服务器是否支持递归查询
  • Z: Reserved for future use.
  • RCODE:4bit,应答码,代表返回的状态
    • 0 No Error
    • 1 Format error 格式错误
    • 2 Server failure 服务器失败
    • 3 Name Error 查询域名错误
    • 4 Not Implemented 未实现的查询方式
    • 5 Refused 拒绝
    • 6-15 Reserved for future use.
      Read more »

翻译-C程序员所应该知道的内存

Posted on 2020-05-04 | Post modified: 2020-05-04 | In Program

原文章 What a C programmer should know about memory
提示: 本篇文章的图片都是直接使用原文中的图片的地址,如果无法显示,请挂代理


2007年,Ulrich Drepper写了一篇"每个程序员都应该知道的内存".是的,虽然这篇文章又细又长,但做到了它所应做到的.很多年后,虚拟内存的概念对于很多人来说仍然难以琢磨,仿佛是某种魔法.我无法抗拒的引用一下.很多年后甚至原始文章的有效性也被质疑,到底发生了什么事?

北桥,这是什么东西?那不是巷战.

我尝试从"学习锁的基本原理"去传达实用的一面(比如:你能做什么)和更多有趣的东西.可以看待这是一个胶水在原始文章和你每天使用的东西之间.例子将使用linux上的C99,但是更多主题将是普遍的.
编辑: 虽然我对Windows不了解,但我很乐意联系文章去解释.我会尽全力去提起什么函数是平台特有的,但是再一次我只是一个人.如果你发现出入,请让我知道.
事不宜迟,倒一杯咖啡,让我们开始吧。

译者注:

worth one's salt:
    good or competent at the job or profession specified.
    ig:"any astrologer worth her salt would have predicted this"

what gives?
    是在英语对话中常用的一句口语
    通常用它的时候只有两层意思
    一个是What's happening?发生了什么事?
    另一个是What is the news?有什么消息?

the practical side
    实用的一面

理解虚拟内存 - 复杂且神秘

除非你要处理一些嵌入系统或内核空间的代码,否则你应该在保护模式下进行.这太棒了,你的程序一定拥有它自己的[虚拟]地址空间.“虚拟"在这里很重要.这意味着,除了其他事情外,你不会被可使用的内存限制,但是也无权获得任何.为了使用这些空间,你不得向操作系统要一些真东西来作后援,这被叫做映射.后援可能是物理内存,也可能是持久性存储.前者也被叫做"匿名映射”.但是,稍安勿躁.

Read more »

解决linux下Realtek ALC295的耳机炸裂声

Posted on 2020-04-25 | Post modified: 2020-04-25 | In linux

个人使用的笔记本是暗影精灵2 PRO,产品名称是: OMEN by HP Laptop 15-ax210TX.

最初本人装的是ubuntu,左边耳机的声音一直有噼里啪啦的炸裂声,后来换了Arch还是一样的情况,而且本人喜欢听安静的声音,类似读故事或是心跳声这种,每次听到劈裂啪啦的声音真是难受.

最初尝试过Arch wiki中的各种方法 包括

PulseAudio/Troubleshooting#Glitches,_skips_or_crackling
PulseAudio/Troubleshooting#Static_noise_when_using_headphones

都没有任何改进.

直到后来才发现这是linux下Realtek ALC295的驱动不完善导致的,这个bug在17年就提出了,至今都没有得到解决.

Bug 195457 - Realtek ALC295 still unsupported
Crackling and popping sound when using headphones

即使有人提交补丁并合并到了linux内核中

ALSA: hda - Fix missing COEF init for ALC225/295/299

但是事实证明并没有用

依照上面有人提供的方法却有效(看起来跟提交补丁差不多,但是补丁却没有起作用):

Read more »
1234…7

68 posts
23 categories
84 tags
RSS
GitHub E-Mail
0%
© 2025 Asutorufa