やるきなし

2017/02/20 13:03 / nvidia-kernel-dkms 340.96-1 on Linux 4.10

以下の kernel の修正に対する対応が必要.NVIDIA 375.26 Kernel 4.10-rc1 (w/ CPU hotplug workaround) を参考に.

--- a/nv-linux.h
+++ b/nv-linux.h
@@ -277,11 +277,13 @@ RM_STATUS nvos_forward_error_to_cray(struct pci_dev *, NvU32,
 
 extern int nv_pat_mode;
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0)
 #if !defined(NV_VMWARE) && defined(CONFIG_HOTPLUG_CPU)
 #define NV_ENABLE_HOTPLUG_CPU
 #include <linux/cpu.h>              /* CPU hotplug support              */
 #include <linux/notifier.h>         /* struct notifier_block, etc       */
 #endif
+#endif
 
 #if !defined(NV_VMWARE) && \
   (defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE))
--- a/os-mlock.c
+++ b/os-mlock.c
@@ -50,8 +50,13 @@ RM_STATUS NV_API_CALL os_lock_user_pages(
        unsigned int flags = 0;
        if(write) flags |= FOLL_WRITE;
        if(force) flags |= FOLL_FORCE;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)
+       ret = get_user_pages_remote(current, mm, (unsigned long)address,
+                       page_count, flags, user_pages, NULL, NULL);
+#else
        ret = get_user_pages_remote(current, mm, (unsigned long)address,
                        page_count, flags, user_pages, NULL);
+#endif
     }
 #elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
     ret = get_user_pages_remote(current, mm, (unsigned long)address,
--- a/uvm/nvidia_uvm_lite.c
+++ b/uvm/nvidia_uvm_lite.c
@@ -815,7 +815,7 @@ done:
 #if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
 int _fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
-    unsigned long vaddr = (unsigned long)vmf->virtual_address;
+    unsigned long vaddr = (unsigned long)vmf->address;
     struct page *page = NULL;
     int retval;
 

Related articles

2017/02/20 10:31 / Linux 4.9.X -> 4.10

4.10 が出たので 2016/12/14 23:00 / Linux 4.8 -> 4.9同様 .config がどう変更されるのか見てみた.2016/12/30 21:28 / Linux 4.9 -> 4.10-rc1 との差分のみ(ターゲットが異なる).

Related articles

2017/02/17 18:20 / ZSWAP と ZRAM メモ

ZSWAP と ZRAM のメモ.ZSWAP は SWAP のための compressed cache で,ZRAM は Compressed RAM block device.ともに圧縮を用いてメモリ/SWAPの効率化を図るもの,だと思う.

ZRAM

CONFIG_ZRAM で設定する.モジュール可.CONFIG_ZSMALLOCに依存し,CONFIG_ZSMALLOC_STAT=y としておくと debugfs 経由で stat が確認できる./sys/kernel/debug/zsmalloc/zram0/classes 等.

Debian の場合は特に package は提供されておらず,https://wiki.debian.org/ZRam のように /etc/init.d/zram を用意して利用する.

SWAP する際にこの圧縮された block device が利用されるイメージ.とはいえこの compressed block device 自体も RAM であるという,不思議な状況になる.

ZSWAP

SWAP する際にそれを圧縮して RAM 上に CACHE する,というアプローチ.こちらは 別途 SWAP 用の HDD/SDD などの存在が想定される.

CONFIG_ZSWAP で設定,モジュール化不可.CONFIG_ZPOOL に依存するとともに,Default の mm/zswap.c#define ZSWAP_ZPOOL_DEFAULT "zbud" となっている ので,CONFIG_ZBUD=y (Low (Up to 2x) density storage for compressed pages)も組み込む必要があるっぽい.

# echo 1 > /sys/module/zswap/parameters/enabled で enable する.max_pool_percent, zpool, compressor を設定可能./sys/kernel/debug/zswap/ 以下に stat がある.sudo grep -R . /sys/kernel/debug/zswap とかで参照.

参考にしたページ: http://gnu.hatenablog.com/entry/2016/01/12/072154

2017/02/09 11:03 / MediaWiki で SVG w/inkscape 0.92.0-4~bpo8+1 (jessie backports)

MediaWiki で inkscape を用いて SVG (scalable vector graphics) のサムネイルを作る設定をしていたのだが,inkscape の version を jessie の backports のもの (0.48.5-3 -> 0.92.0-4~bpo8+1)にしたらうまく動かなくなった.

Error creating thumbnail: 
(process:2380): Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
Failed to get connection
** (inkscape:2380): CRITICAL **: dbus_g_proxy_new_for_name: assertion 'connection != NULL' failed

** (inkscape:2380): CRITICAL **: dbus_g_proxy_call: assertion 'DBUS_IS_G_PROXY (proxy)' failed

** (inkscape:2380): CRITICAL **: dbus_g_connection_register_g_object: assertion 'connection != NULL' failed

** (inkscape:2380): WARNING **: GC Warning: Out of Memory! Heap size: 2 MiB. Returning NULL!

terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc

Emergency save activated!
Emergency save completed. Inkscape will close now.
If you can reproduce this crash, please file a bug at www.inkscape.org
with a detailed description of the steps leading to the crash, so we can fix it.
** Message: Error: Inkscape encountered an internal error and will close now.

/somewhere/mediawiki/includes/limit.sh: line 101: 2379 Aborted /usr/bin/timeout $MW_WALL_CLOCK_LIMIT /bin/bash -c "$1" 3>&-

どうやら shell を起動する際にメモリサイズを制限しているらしく,そこで引っかかっているらしい./etc/mediawiki/LocalSettings.php$wgMaxShellMemory という変数で設定するが,https://www.mediawiki.org/wiki/Manual:$wgMaxShellMemoryによると default は 307200 KB = 300 MB.inkscape がメモリを喰いすぎな気もする.以下のように500 MBに設定すれば動くようになった.

[/etc/mediawiki/LocalSettings.php]
$wgMaxShellMemory = 512000;

Related articles

2017/02/08 14:07 / MediaWiki 1.28.0 on Debian/GNU Linux jessie

いろいろ事情があって MediaWiki を 1.28.0 に上げた.実際には git の REL1_28.以下メモ.

Elasticsearchだが,今回色々混乱して色んなバージョンが混ざった状態に一瞬なってしまい,Elasticsearchが保持するデータ(/var/lib/elasticsearch/にある)を一旦まるごと削除した.以下のような感じ.

sudo /etc/init.d/elasticsearch stop
sudo rm -rf /var/lib/elasticsearch/*
sudo rm -rf /var/lib/elasticsearch/.* (dot で始まるものがあれば)
sudo /etc/init.d/elasticsearch start

LocalSettings.phpだが,

$wgCacheDirectory = "$IP/cache";

などと明示的に $wgCacheDirectory を指定しないと以下のようなエラーが出たような気がする(default の設定がなくなった?).

LCStoreCDB.php: Unable to move the new CDB file into place.

Related articles