Happy Children's Day!

How to passthrough a MSR to the guest?

add the MSR in arch/x86/kvm/vmx/vmx.c:

/*
 * List of MSRs that can be directly passed to the guest.
 * In addition to these x2apic and PT MSRs are handled specially.
*/
static u32 vmx_possible_passthrough_msrs[MAX_POSSIBLE_PASSTHROUGH_MSRS]

Then call following function to enable:

void vmx_enable_intercept_for_msr(struct kvm_vcpu *vcpu, u32 msr, int type)

Cloudfare pages

like github pages, but with cdn to accelerate.

How to know if a MSR is thread-specific, core-specific, module-specific or die-specific?

currently you can't find them on SDM, maybe you can find them on the spec.

Custom attribute e,g. data-toggle in bootstrap

For instance, a site about music could annotate list items representing tracks in an album with custom data attributes containing the length of each track. This information could then be used by the site itself to allow the user to sort the list by track length, or to filter the list for tracks of certain lengths.

<ol>
 <li data-length="2m11s">Beyond The Sea</li>
 ...
</ol>

It would be inappropriate, however, for the user to use generic software not associated with that music site to search for tracks of a certain length by looking at this data.

This is because these attributes are intended for use by the site's own scripts, and are not a generic extension mechanism for publicly-usable metadata.

HTML Standard

Viewport and meta viewport

Using the viewport meta tag to control layout on mobile browsers - HTML: HyperText Markup Language | MDN

境外服务器 ip 被墙补救措施/ip banned

拯救被墙的服务器 - tlanyan

Concret MSR register, MSR cache, VMCS and the vmcs_host_state/vcpu->arch(VMCS cache)

Cache for concrete MSR register is the responsibility of Kernel, not VMM. When guest OS is running, if the MSR is passthrough to the guest, then the VMM has no way to implement a cache between guest OS and the concrete MSR.

vcpu_arch and vmcs_host_state are both the cache for VMCS, NOT the concrete MSR value. vcpu_arch is defined in arch/x86/include/asm/kvm_host.h, here are some attributes explanation:

struct kvm_vcpu_arch {
     u32 regs_avail; // each bit corresponds if a register is available in the cache
}

You can check cache state of a VMCS MSR field by following function in arch/x86/kvm/kvm_cache_regs.h:

/*
 * avail  dirty
 * 0      0      register in VMCS/VMCB
 * 0      1      *INVALID*
 * 1      0      register in vcpu->arch
 * 1      1      register in vcpu->arch, needs to be stored back
*/
static inline bool kvm_register_is_available(struct kvm_vcpu *vcpu, enum kvm_reg reg)
{
	return test_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); 
}

if you want to read a specific address, e,g. PKRS, you can:

static inline u32 kvm_read_pkrs(struct kvm_vcpu *vcpu)
{
    if (!kvm_register_is_available(vcpu, VCPU_EXREG_PKRS))
        static_call(kvm_x86_cache_reg)(vcpu, VCPU_EXREG_PKRS);
    return vcpu->arch.pkrs;
}

How does vcpu->arch work? It cached the value in the VMCS guest area.

  • If userspace (QEMU) want to change a MSR value by ioctl, the MSR value and the vcpu->arch are both changed;
  • If it want to read a MSR value, it can read from vcpu->arch to avoid vmcs_read.
  • When we do vm_exit, we need to update the vcpu->arch by reading the MSR value from the VMCS guest area because it may has been changed by the guest. this will need some cycles.

We also can update it to a reg_cache, by:

VMCS is a static concept, whether the guest state area or the host state area are just a backup/storage for the real register value, and retrieved when needed.

when the VM is running, if the MSR is passthroughed to the guest, then the read and write and all bunch of things has no relationship with VMCS, they are just between the VM and the concret register.

For vmcs_host_state, if the vmentry/vmexit is frequent, it can act as a cache to improve performance. It consents to following assumptions:

  • host value isn't changing frequently, so we can design a write-through cache, each time we do a vmentry, we need to save the current PKRS to the VMCS host area, how to avoid that? just compare MSR with the cache, if they are the same, then it indicates that VMCS host area and the MSR are the same, so we don't need to write again.
  • This is for optimizing write, not read!

0day / Zero day / 零日漏洞

0day 漏洞,又称 “零日漏洞”(zero-day),是已经被发现 (有可能未被公开),而官方还没有相关补丁的漏洞。通俗地讲就是,除了漏洞发现者,没有其他的人知道这个漏洞的存在,并且可以有效地加以利用,发起的攻击往往具有很大的突发性与破坏性。

普通漏洞在被厂商发现公开有一段时间,但是对于 0day 漏洞,由于漏洞已经被描述或被利用,留给软/硬件供应商来准备补丁的时间只有“零天”。

【科普贴】0day漏洞是什么? - 知乎

node/npm

reinstall all:

rm -rf node_modules
rm package-lock.json
npm cache clear --force
npm install

InstantSearch.js

You can add Menu to enable multiple searches:

Refinements / Menu - default ⋅ Storybook

You can see the live demo of all the widgets here:

Storybook

based on MUSTACHE:

mustache - Logic-less templates.

Windows access WLS2 through network/ip

In WSL2, type:

ip a |grep "global eth0"

that's the address you can access.

Parcel

The zero configuration build tool for the web.

|看|这|一|篇|就|够|了|,|c|s|s|选|择|器|知|识|汇|总|_|w|3|c|s|c|h|o|o|l|

Windows access WSL2 files

In WSL2, type:

explorer.exe .

Vw and vh can achive relative style in CSS

[The difference between CSS units (px, pt, rem, em, vh, vw, ch, ex and the rest) by Bradley Nice Level Up! Medium](https://medium.com/level-up-web/the-difference-between-css-units-px-pt-rem-em-vh-vw-ch-ex-and-the-rest-b2cfdf069230#id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ZjM4ODM0NjhmYzY1OWFiYjQ0NzVmMzYzMTNkMjI1ODVjMmQ3Y2EiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJuYmYiOjE2NTM2NTcxNzEsImF1ZCI6IjIxNjI5NjAzNTgzNC1rMWs2cWUwNjBzMnRwMmEyamFtNGxqZGNtczAwc3R0Zy5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsInN1YiI6IjEwNTM1Njk4MjcwNzYzMDQwOTYxNCIsImVtYWlsIjoidHJpc3RvbmUxM3RoQGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJhenAiOiIyMTYyOTYwMzU4MzQtazFrNnFlMDYwczJ0cDJhMmphbTRsamRjbXMwMHN0dGcuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJuYW1lIjoi546L56OKIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hLS9BT2gxNEdnY2F1MDhFbnZYWVBqWWlwT2dqUUNDNGxNVTZzZDNDN0Q3Qm9RUz1zOTYtYyIsImdpdmVuX25hbWUiOiLno4oiLCJmYW1pbHlfbmFtZSI6IueOiyIsImlhdCI6MTY1MzY1NzQ3MSwiZXhwIjoxNjUzNjYxMDcxLCJqdGkiOiI5MmRhYTAyYmViZjcwMTk4YWE1ZWMwZTRmNjFkNWVkMGJlOThjYTM0In0.T6l9ZWi3f8PyOJ9PNV5Dteni2rSWJ76ekR1JWpViz1R10DOwGOaJ5cVXgYIYbHeSmr3cYOW4jwYg82fgQNgfaldbc-Mx_ItlOba2litrrZUixd-aSEKAx5oE4VqTW5x77Ip5rxyja7DBhl-86fmf_6GQgF8wEO-KMFULD4O_Gyfa9EM7alyF92q3XBnJ23YJwweH6ZmImhZ4ay5nOvlsj_JXAWvGrOAi_eWU1NN463XbST1RwJe3H_IrQOlpaYtmE4DkIKlUz2Qg1uTbqV16RbUQxMPDSOnocdTf3qYZ3BRG6A6_qaHRBq8RgD9ayGJfMFWF_n0o573Umex4647-Cg)

Reverse christmas tree/reverse fir tree

Does anyone know why reverse christmas tree order of declarations (i.e. longes... | Hacker News

When listing repeated things, make pyramids « hisham.hm

Does using h3 for subheader directly under h1 page title impact SEO performance?

For SEO, it doesn't matter if you skip one or more heading levels. It does matter that the structure makes sense semantically, and that your more important text is higher up in that hierarchy. It also matters that there's a hierarchy that makes sense. If you use an H1 and follow it with H3, search engines will assign the same importance to H3 that they would have assigned to H2, because it's the second in the hierarchy.

Namesilo

A foreign name regestrition website, whose advantage:

  • cheap;
  • alipay.

可以不备案,直接进行 DNS 解析吗?

国外主机,国内域名:可以解析,大概率没用被墙;

国外主机,国外域名:可以解析;

国内主机,国内域名:必须备案;

国内主机,国外域名:必须备案。

Why sometimes you cannot send a http request in a https site

Mixed Content: Fetching data from HTTPS and HTTP - DEV Community

请不要神化双链笔记 - 少数派

Yank note (yn) development story

Yank Note 系列 01 - 为什么要自己写笔记软件? - 掘金

How does VMCS handle MSRs

Control fields:

  • VM-EXIT CONTROL FIELDS (bit 29): This control determines whether the IA32_PKRS MSR is loaded (from host) on VM exit;
  • VM-ENTRY CONTROL FIELDS (bit 22): This control determines whether the IA32_PKRS MSR is loaded (from guest) on VM entry.

.org/.me 域名不能备案?谈谈工信部是如何完美规避法律的

.org / .me 域名不能备案?谈谈工信部是如何完美规避法律的 – best66

Github workflow and actions

As far as I know, they are the same.

Comparision between markdown editors, very comprehensive.

markdown 编辑器测评 | 东瓜瓜的小博客

PlantUML vs. Mermaid

PlantUML requires Java so integrating it in a website is not so easy.

This is where Mermaid, a tool similar to PlantUML but written in JS so it renders Markdown-inspired text definitions to create and modify diagrams dynamically.

How to use clash on Linux

如何在 Clash for Linux上配置服务 - 帮助中心 - Gatern

Dpkg: error processing package

dpkg: error processing package *** 错误解决办法_there2belief 的博客 - CSDN 博客

Use your Android phone as your proxy server for all your computer traffic

Just enable LAN on clash.

Hyper-v bridge network

Win10下给Hyper-V配置网络——Bridging 和 Nat 模式 - 简书

Using clash under Linux CLI

wantToDoSomeThing/ssSSRV2rayClashTrojan: 科学上网,ss, ssr, v2ray, trojan, clash, clashr,翻墙机场推荐 (github.com)

Linux 使用教程 — 极客云

List of blog options

  • docusaurus: Docusaurus will help you ship a beautiful documentation site in no time.
  • jekyll

What's the difference between SCSS and SASS?

TLDR; sass is the older syntax, sassy css is the new syntax as of Sass 3.

There are two syntaxes available for Sass. The first, known as SCSS (Sassy CSS) and used throughout this reference, is an extension of the syntax of CSS. This means that every valid CSS stylesheet is a valid SCSS file with the same meaning. This syntax is enhanced with the Sass features described below. Files using this syntax have the .scss extension.

The second and older syntax, known as the indented syntax (or sometimes just “Sass”), provides a more concise way of writing CSS. It uses indentation rather than brackets to indicate nesting of selectors, and newlines rather than semicolons to separate properties. Files using this syntax have the .sass extension.

css - What's the difference between SCSS and Sass? - Stack Overflow

Vercel vs. Netlify

The free plan of both have a monthly bandwidth of 100GB.

Netlify has a monthly build time of 300min.

Vercel doesn't have limitation on build time, but the post is just 404…

Serverless

Serverless computing is a striking trend in the cloud landscape. The main essence is that you do not need to provide equipment, network nodes, and storage. Instead, you just write your code, pack it (often in a container) and call it whenever you want.

scraper:

sudo -E apt install jq
docker run -it --env-file=./.env -e CONFIG=(cat ./config.json | jq -r tostring) typesense/docsearch-scraper

run Typesense server in docker:

docker run -p 8108:8108 -v/tmp/typesense-data:/data typesense/typesense:0.22.2 --data-dir /data --api-key=<key### --enable-cors

run Typesense server in natively:

typesense-server -d ./data --api-key=trist --enable-cors

List of formatters

sbdchd/neoformat: A (Neo)vim plugin for formatting code. (github.com)

What is GTD (Getting Things Done)?

Nothing, just need to know it represents "Getting things done".

Add search to your blog: typesense vs. meilisearch vs. elasticsearch vs. algolia

Algolia's search service is amazing, if I have to add search function to project's documentation, I will choose it's docsearch for its free and powerful.

meilisearch is similar to elasticsearch, but the it's config is simple and it is more suitable for small website

I choose Typesense, for it support typo search, here is how to install:

Install Typesense | Typesense, I choose docker to install.

DocSearch Crawls your doc and provides a dropdown search experience on your website/blog.

DocSearch: Search made for documentation | DocSearch by Algolia

Github pages dependencies

Dependency versions | GitHub Pages

Group :jekyll_plugins in gemfile

Jekyll gives a special treatment to gems listed as part of the :jekyll_plugins group in a Gemfile. Any gem under this group is loaded at the very beginning of any Jekyll process, irrespective of the --safe CLI flag or entries in the configuration file(s).

RDMA on 漫画

https://mp.weixin.qq.com/s/L-HKnWP-4y3kSQLDcyi8xA

Nelify

The fastest way to combine your favorite tools and APIs to build the fastest sites, stores, and apps for the web.

Netlify: Develop & deploy the best web experiences in record time

Algolia + Jekyll + Github Pages: build your own search engine for your blog

Algolia for Jekyll | Add fast and relevant search to your Jekyll site

List of windows messages in autohotkey

List of Windows Messages | AutoHotkey

Four paging modes / PAE Paging

CR0.PG CR4.PAE IA32_EFER.LME Description
0 0 0 No paging
0 0 1 No paging
0 1 0 No paging
0 1 1 No paging
1 0 0 32-bit paging
1 0 1 #GP, no such state
1 1 0 PAE paging
1 1 1 4-level paging
1 1 1 5-level paging (when CR4.LA57 = 1)

For reference:

  • PG: Paging;
  • PAE: Physical Address Extension; 引入 PAE 就是为了访问大于 4GB 的 RAM,线性地址仍然是 32 位,而物理地址是 36 位。也就是线性地址空间仍为 4GB,每个进程可支配 4G 虚拟内存空间。只不过原来的情况下,所有进程使用共同使用者剩下的 3G 物理内存,当进程多了的时候,内存压力会很大,那么为了减少这 3G 物理内存的冲突,扩展了可用的物理内存空间,这样冲突的概率就下降了。让中央处理器在 32 位操作系统下访问超过 4GB 的物理内存。正如其名,扩展的是物理内存,而不是虚拟内存。
  • LME: Long Mode Enabled (long mode is identical to IA32e mode)

linux内存管理之PAE(物理地址扩展)解决内存大于4G的问题_linux超过4g的ddr怎么寻址-CSDN博客

Some notes:

  • The LMA flag in the IA32_EFER MSR (bit 10) is a status bit that indicates whether the logical processor is in IA32e mode (and thus uses either 4-level paging or 5-level paging). The processor always sets IA32_EFER.LMA to CR0.PG & IA32_EFER.LME. Software cannot directly modify IA32_EFER.LMA;

Virtio

Virtio is a virtualization standard for network and disk device drivers where just the guest's device driver "knows" it is running in a virtual environment, and cooperates with the hypervisor. This enables guests to get high performance network and disk operations, and gives most of the performance benefits of paravirtualization.

Exit codes

Exit Codes With Special Meanings

Windows 10 autocorrection

Before you proceed, it is important to note that autocorrect (on Windows) only works with Universal Windows Platform (UWP) applications (i.e., Windows Store apps). Apps developed by Microsoft or apps installed from the Microsoft Store fall under this category.

3 Best Fixes for Windows 10 Autocorrect Not Working

Check KVM version

12.10 - How to check which version of KVM I am running? - Ask Ubuntu

Will bufnr (buffer number) change in Vim?

Vim buffers are identified using a name and a number. The name of the buffer is the name of the file associated with that buffer. The buffer number is a unique sequential number assigned by Vim. This buffer number will not change in a single Vim session.

Why VMCS couldn't larger than 4K?

IMO, 4K is enough, increasing it will introduce hardware design complexation because we have to add the size as an additional parameter when executing VMX instructions.

Why VMCS is 4K aligned?

IMO, to make sure the 4K space can be maximally utilized.

PXE (Preboot Execution Environment)

a standardized client–server environment that boots a software assembly, retrieved from a network, on PXE-enabled clients. On the client side it requires only a PXE-capable network interface controller (NIC), and uses a small set of industry-standard network protocols such as DHCP and TFTP.

In modern data centers, PXE is the most frequent choice[1] for operating system booting, installation and deployment.

Preboot Execution Environment - Wikipedia

RAX, EAX,AX, (AL, AH) x86 register name meaning.

R: Register, 64bit;

E: Extended, 32bit;

X: Hex, 16bit;

H/L: Low/High, 8bit.

https://stackoverflow.com/a/43933932/18644471

Operating modes, real mode, protected mode, long mode, etc.

Here is a table about all the operating modes in x86.

x86-64 - Wikipedia

long mode is IA-32e mode!

x86-64处理器的几种运行模式 - 知乎

addresses in real mode always correspond to real locations in memory.

Real mode provides no support for memory protection, multitasking, or code privilege levels.

64-bit operating systems use real mode only at startup stage, and the OS kernel will switch the CPU into long mode.[2]

In both real and protected modes, the system uses 16-bit segment registers to derive the actual memory address.

In real mode, the registers CS, DS, SS, and ES point to the currently used program code segment (CS), the current data segment (DS), the current stack segment (SS), and one extra segment determined by the programmer (ES).

The extra segment is the default destination for string operations (for example MOVS or CMPS).

Real mode - Wikipedia

x86 memory segmentation - Wikipedia

User page and supervisor page

operating system - What does the User/Supervisor bit in the page table entry mean? - Stack Overflow

L0, L1, L2

VMM, guest, nested guest.

Snprintf in include/linux/kernel.h

like sprintf in C library, this function print formatted output to a string rather than the screen.

C 库函数 – sprintf | 菜鸟教程

Is there a C function like sprintf in the Linux kernel? - Stack Overflow

Show all github watching and subscriptions

Watching (github.com)

anon_inode_getfile

Linux fd 系列| “匿名句柄” 是一切皆文件背后功臣 - 墨天轮

Difference between file (file pointer) and fd (file descriptor)?

The file descriptor is just an integer that you get from the open() system call.

File descriptor is simply an index into the file descriptor table. The data structure in Linux source code (include/linux/fdtable.h) which represents this table is:

struct fdtable {
	unsigned int max_fds;
	struct file __rcu **fd;      /* current fd array */
	unsigned long *close_on_exec;
	unsigned long *open_fds;
	unsigned long *full_fds_bits;
	struct rcu_head rcu;
};

For each process in our operating system, there is a process control block (PCB). PCB keeps track of the context of the process. So one of the fields within this is an array called file descriptor table.

Difference between File Descriptor and File Pointer - GeeksforGeeks has a table which illustrates difference between file and fd, you can see it.

Difference between a VPN and a proxy?

VPN connections encrypt and secure all of your network traffic, not just the HTTP or SOCKS calls from your browser like a proxy server.1

VPNs are Virtual Private Servers that encrypt all of a users’ web activity and device IP addresses.2

What if using the VPN and the Proxy at the same time?

VPN will override Proxy. (according to my experience). Maybe due to VPN is in a lower level which overtakes all the traffics, although we can connect to local address for proxy, the proxy software cannot forward our request to the remote proxy for that traffic has been hijacked by the VPN.

A minimal http server for testing

TheWaWaR/simple-http-server: Simple http server in Rust (Windows/Mac/Linux)

Page table entry structure / PTE format / PTE structure / Page table structure

Some figures in SDM: Figure 4-4. Formats of CR3 and Paging-Structure Entries with 32-Bit Paging and the following figures.

Difference between present - absent bit (p bit) and valid - invalid bit (v bit) in a page table?

process when initialized doesn't use the full VAS. Virtual addresses which are not in use as of now have valid bit zero (Invalid).

Now when process will try to access these newly validated virtual address/swapped out address, as present bit is not set it will generate a page fault.

operating systems - Difference between present - absent bit and valid - invalid bit in a page table? - Computer Science Stack Exchange

Who performs the TLB shootdown?

The x86 TLB's are not shared across cores and are not synchronized among themselves at the hardware level. It is the OS that instructs a processor to flush its TLB.

Is changing an individual entry in TLB ok?

Yes, it is OK.

While selective flushing of the TLB is an option in software-managed TLBs, the only option in some hardware TLBs (for example, the TLB in the Intel 80386) is the complete flushing of the TLB on an address-space switch. Other hardware TLBs (for example, the TLB in the Intel 80486 and later x86 processors, and the TLB in ARM processors) allow the flushing of individual entries from the TLB indexed by virtual address.

TLB invalidation:

  • INVLPG. This instruction takes a single operand, which is a linear address. The instruction invalidates any TLB entries that are for a page number corresponding to the linear address and that are associated with the current PCID. It also invalidates any global TLB entries with that page number, regardless of PCID (see Section 4.10.2.4).

Global page

SDM 4.10.2.4.

Think of the G-bit as an optimization for system calls: the kernel maps its pages as global so no TLB flush needs to happen.

x86 64 - x86-64 page table Global bit - Stack Overflow

What does TLB cache?

Each entry in a TLB is an individual translation. Each translation is referenced by a page number.

  • The physical address (the page frame);
  • The access rights;
  • The dirty flag;
  • The memory type.

Paging-Structure Caches

In addition to the TLBs, a processor may cache other information about the paging structures in memory.

TLB invalidation (or TLB flush)

Refer to SDM 4.10.4.

9. The TLB — The Linux Kernel documentation

When the kernel unmaps or modified the attributes of a range of memory, it has two choices:

  • Flush the entire TLB with a two-instruction sequence. This is a quick operation, but it causes collateral damage: TLB entries from areas other than the one we are trying to flush will be destroyed and must be refilled later, at some cost.
  • Use the INVLPG instruction to invalidate a single page at a time. This could potentially cost many more instructions, but it is a much more precise operation, causing no collateral damage to other TLB entries.

Which method to do depends.

Gcc asan

AddressSanitizer

an open source programming tool by Google that detects memory corruption bugs.

currently implemented in Clang, GCC.

Cloud-init

cloud-init is a software package that automates the initialization of cloud instances during system boot.

迷途指针,或称悬空指针、野指针

不指向任何合法的对象的指针。

Nix, NixOS

a powerful package manager for Linux and other Unix systems that makes package management reliable and reproducible.

nVMX

nested VMX?

Ulimit

built-in shell command, cannot be used with the tcsh shell.

can set or report the resource limit of the current user.

To get the report in details:

ulimit -a
Maximum size of core files created                           (kB, -c) 0
Maximum size of a process’s data segment                     (kB, -d) unlimited
Maximum size of files created by the shell                   (kB, -f) unlimited
Maximum size that may be locked into memory                  (kB, -l) 64
Maximum resident set size                                    (kB, -m) unlimited
Maximum number of open file descriptors                          (-n) 1024
Maximum stack size                                           (kB, -s) 8192
Maximum amount of cpu time in seconds                   (seconds, -t) unlimited
Maximum number of processes available to a single user           (-u) 50097
Maximum amount of virtual memory available to the shell      (kB, -v) unlimited

You can see max stack size is only 8MB.

The system resources are defined in a configuration file located at “/etc/security/limits.conf”. “ulimit”, when called, will report these values.

KVM MMIO implementation

KVM MMIO implementation

Zotero builtin PDF viewer

Zotero has a builtin PDF viewer since Zotero 6.

Highlighting and Annotating PDFs - Zotero - LibGuides at Graduate Institute of International and Development Studies

List of all obcommands

editor:save-file
editor:follow-link
editor:open-link-in-new-leaf
editor:focus-top
editor:focus-bottom
editor:focus-left
editor:focus-right
workspace:toggle-pin
workspace:split-vertical
workspace:split-horizontal
workspace:edit-file-title
workspace:copy-path
workspace:copy-url
workspace:undo-close-pane
workspace:export-pdf
editor:rename-heading
sliding-panes-obsidian:toggle-sliding-panes
sliding-panes-obsidian:toggle-sliding-panes-smooth-animation
sliding-panes-obsidian:toggle-sliding-panes-leaf-auto-width
sliding-panes-obsidian:toggle-sliding-panes-stacking
sliding-panes-obsidian:toggle-sliding-panes-rotated-headers
sliding-panes-obsidian:toggle-sliding-panes-header-alt
obsidian-outliner:fold
obsidian-outliner:unfold
obsidian-outliner:move-list-item-up
obsidian-outliner:move-list-item-down
obsidian-outliner:indent-list
obsidian-outliner:outdent-list
obsidian-mind-map:app:markmap-preview
obsidian-reading-time:reading-time-editor-command
app:go-back
app:go-forward
app:open-vault
theme:use-dark
theme:use-light
app:open-settings
markdown:toggle-preview
workspace:close
workspace:close-others
app:delete-file
app:toggle-left-sidebar
app:toggle-right-sidebar
app:toggle-default-new-pane-mode
app:open-help
app:reload
app:show-debug-info
file-explorer:new-file
file-explorer:new-file-in-new-pane
editor:open-search
editor:open-search-replace
editor:focus
editor:toggle-fold
editor:fold-all
editor:unfold-all
editor:insert-wikilink
editor:insert-embed
editor:insert-link
editor:insert-tag
editor:set-heading
editor:toggle-bold
editor:toggle-italics
editor:toggle-strikethrough
editor:toggle-highlight
editor:toggle-code
editor:toggle-blockquote
editor:toggle-comments
editor:toggle-bullet-list
editor:toggle-numbered-list
editor:toggle-checklist-status
editor:swap-line-up
editor:swap-line-down
editor:attach-file
editor:delete-paragraph
editor:toggle-spellcheck
file-explorer:open
file-explorer:reveal-active-file
file-explorer:move-file
global-search:open
switcher:open
graph:open
graph:open-local
graph:animate
backlink:open
backlink:open-backlinks
backlink:toggle-backlinks-in-document
note-composer:merge-file
note-composer:split-file
note-composer:extract-heading
command-palette:open
markdown-importer:open
open-with-default-app:open
open-with-default-app:show
file-recovery:open
editor:toggle-source

Having trouble with finding the available commands Obsidian has for :obcommand · Issue #47 · esm7/obsidian-vimrc-support

WslRegisterDistribution failed with error: 0x80070050

Please backup (using the steps I mention in my previous answer) before trying this.

  • wsl --shutdown (from PowerShell or CMD)
  • In Windows, run the Registry Editor
  • Find \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss
  • Find the key in there that has DistributionName of Ubuntu20.04LTS. Change the Ubuntu20.04LTS to Ubuntu-20.04.

20.04 - WSL not working after update from Microsoft store - Ask Ubuntu

All config options of neotree.nvim

neo-tree.nvim/defaults.lua at a917174b38b065b5fc01c89709cfc31fbe6917db · nvim-neo-tree/neo-tree.nvim (github.com)

RHEL enable subscription

Once you have Red Hat Enterprise Linux installed, you must register and enable Red Hat Subscription to install any package on your system.

Valgrind error message

Valgrind

Valgrind

How to stop qemu-system-x86_64 … instead of `kill -

Re: [Qemu-devel] How to stop qemu-system-x86_64 ... instead of `kill -

Serialization of un-picklable objects in python

https://github.com/joblib/joblib/issues/643#issuecomment-403212271

Default pylsp cannot format?

Just pip install yapf.

Bookmarks and the Outline are the same in official documentation

Understanding the Difference between Bookmarks and the Outline in a PDF | PSPDFKit

The PDF spec contains no official way to support bookmarks, which means every PDF software vendor gets to decide how they implement bookmark support.

Typora my license

my license

Programmed input–output

Each data item transfer is initiated by an instruction in the program, involving the CPU for every transaction. In contrast, in direct memory access (DMA) operations, the CPU is uninvolved in the data transfer.

The term can refer to either memory-mapped I/O (MMIO) or port-mapped I/O (PMIO).

The best known example of a PC device that uses programmed I/O is the AT Attachment (ATA) interface and Serial ATA interface; however, the AT Attachment interface can also be operated in any of several DMA modes.

The PIO interface is grouped into different modes that correspond to different transfer rates. The electrical signaling among the different modes is similar — only the cycle time between transactions is reduced in order to achieve a higher transfer rate.

DMA and IOMMU

IOMMU mainly contains DMA Remapping and Interrupt Remapping.

When not using IOMMU, we cannot use device-passthrough, all the access to the device are handled by VMM,

This article is worth reading.

IOMMU introduction

Motherboard is identical to baseboard

Motherboard - Wikipedia

DMA remapping

VT-d DMA Remapping · kernelgo

Reference: