
Recherche avancée
Autres articles (26)
-
Encodage et transformation en formats lisibles sur Internet
10 avril 2011MediaSPIP transforme et ré-encode les documents mis en ligne afin de les rendre lisibles sur Internet et automatiquement utilisables sans intervention du créateur de contenu.
Les vidéos sont automatiquement encodées dans les formats supportés par HTML5 : MP4, Ogv et WebM. La version "MP4" est également utilisée pour le lecteur flash de secours nécessaire aux anciens navigateurs.
Les documents audios sont également ré-encodés dans les deux formats utilisables par HTML5 :MP3 et Ogg. La version "MP3" (...) -
Monitoring de fermes de MediaSPIP (et de SPIP tant qu’à faire)
31 mai 2013, parLorsque l’on gère plusieurs (voir plusieurs dizaines) de MediaSPIP sur la même installation, il peut être très pratique d’obtenir d’un coup d’oeil certaines informations.
Cet article a pour but de documenter les scripts de monitoring Munin développés avec l’aide d’Infini.
Ces scripts sont installés automatiquement par le script d’installation automatique si une installation de munin est détectée.
Description des scripts
Trois scripts Munin ont été développés :
1. mediaspip_medias
Un script de (...) -
Encoding and processing into web-friendly formats
13 avril 2011, parMediaSPIP automatically converts uploaded files to internet-compatible formats.
Video files are encoded in MP4, Ogv and WebM (supported by HTML5) and MP4 (supported by Flash).
Audio files are encoded in MP3 and Ogg (supported by HTML5) and MP3 (supported by Flash).
Where possible, text is analyzed in order to retrieve the data needed for search engine detection, and then exported as a series of image files.
All uploaded files are stored online in their original format, so you can (...)
Sur d’autres sites (5419)
-
avcodec/x86/vvc : add alf filter luma and chroma avx2 optimizations
13 mai 2024, par Wu Jianhuaavcodec/x86/vvc : add alf filter luma and chroma avx2 optimizations
ff_vvc_alf_filter_luma_4x4_10_c : 135
ff_vvc_alf_filter_luma_4x4_10_avx2 : 54
ff_vvc_alf_filter_luma_4x8_10_c : 268
ff_vvc_alf_filter_luma_4x8_10_avx2 : 106
ff_vvc_alf_filter_luma_4x12_10_c : 400
ff_vvc_alf_filter_luma_4x12_10_avx2 : 160
ff_vvc_alf_filter_luma_4x16_10_c : 535
ff_vvc_alf_filter_luma_4x16_10_avx2 : 213
ff_vvc_alf_filter_luma_4x20_10_c : 646
ff_vvc_alf_filter_luma_4x20_10_avx2 : 262
ff_vvc_alf_filter_luma_4x24_10_c : 783
ff_vvc_alf_filter_luma_4x24_10_avx2 : 309
ff_vvc_alf_filter_luma_4x28_10_c : 908
ff_vvc_alf_filter_luma_4x28_10_avx2 : 361
ff_vvc_alf_filter_luma_4x32_10_c : 1039
ff_vvc_alf_filter_luma_4x32_10_avx2 : 412
ff_vvc_alf_filter_luma_8x4_10_c : 260
ff_vvc_alf_filter_luma_8x4_10_avx2 : 53
ff_vvc_alf_filter_luma_8x8_10_c : 516
ff_vvc_alf_filter_luma_8x8_10_avx2 : 105
ff_vvc_alf_filter_luma_8x12_10_c : 779
ff_vvc_alf_filter_luma_8x12_10_avx2 : 157
ff_vvc_alf_filter_luma_8x16_10_c : 1038
ff_vvc_alf_filter_luma_8x16_10_avx2 : 210
ff_vvc_alf_filter_luma_8x20_10_c : 1293
ff_vvc_alf_filter_luma_8x20_10_avx2 : 259
ff_vvc_alf_filter_luma_8x24_10_c : 1553
ff_vvc_alf_filter_luma_8x24_10_avx2 : 309
ff_vvc_alf_filter_luma_8x28_10_c : 1815
ff_vvc_alf_filter_luma_8x28_10_avx2 : 361
ff_vvc_alf_filter_luma_8x32_10_c : 2067
ff_vvc_alf_filter_luma_8x32_10_avx2 : 419
ff_vvc_alf_filter_luma_12x4_10_c : 390
ff_vvc_alf_filter_luma_12x4_10_avx2 : 54
ff_vvc_alf_filter_luma_12x8_10_c : 773
ff_vvc_alf_filter_luma_12x8_10_avx2 : 107
ff_vvc_alf_filter_luma_12x12_10_c : 1159
ff_vvc_alf_filter_luma_12x12_10_avx2 : 155
ff_vvc_alf_filter_luma_12x16_10_c : 1550
ff_vvc_alf_filter_luma_12x16_10_avx2 : 207
ff_vvc_alf_filter_luma_12x20_10_c : 1970
ff_vvc_alf_filter_luma_12x20_10_avx2 : 260
ff_vvc_alf_filter_luma_12x24_10_c : 2379
ff_vvc_alf_filter_luma_12x24_10_avx2 : 309
ff_vvc_alf_filter_luma_12x28_10_c : 2763
ff_vvc_alf_filter_luma_12x28_10_avx2 : 362
ff_vvc_alf_filter_luma_12x32_10_c : 3158
ff_vvc_alf_filter_luma_12x32_10_avx2 : 419
ff_vvc_alf_filter_luma_16x4_10_c : 523
ff_vvc_alf_filter_luma_16x4_10_avx2 : 53
ff_vvc_alf_filter_luma_16x8_10_c : 1049
ff_vvc_alf_filter_luma_16x8_10_avx2 : 103
ff_vvc_alf_filter_luma_16x12_10_c : 1566
ff_vvc_alf_filter_luma_16x12_10_avx2 : 159
ff_vvc_alf_filter_luma_16x16_10_c : 2078
ff_vvc_alf_filter_luma_16x16_10_avx2 : 211
ff_vvc_alf_filter_luma_16x20_10_c : 2631
ff_vvc_alf_filter_luma_16x20_10_avx2 : 259
ff_vvc_alf_filter_luma_16x24_10_c : 3149
ff_vvc_alf_filter_luma_16x24_10_avx2 : 316
ff_vvc_alf_filter_luma_16x28_10_c : 3631
ff_vvc_alf_filter_luma_16x28_10_avx2 : 359
ff_vvc_alf_filter_luma_16x32_10_c : 4233
ff_vvc_alf_filter_luma_16x32_10_avx2 : 428
ff_vvc_alf_filter_luma_20x4_10_c : 649
ff_vvc_alf_filter_luma_20x4_10_avx2 : 106
ff_vvc_alf_filter_luma_20x8_10_c : 1294
ff_vvc_alf_filter_luma_20x8_10_avx2 : 206
ff_vvc_alf_filter_luma_20x12_10_c : 1936
ff_vvc_alf_filter_luma_20x12_10_avx2 : 310
ff_vvc_alf_filter_luma_20x16_10_c : 2594
ff_vvc_alf_filter_luma_20x16_10_avx2 : 411
ff_vvc_alf_filter_luma_20x20_10_c : 3234
ff_vvc_alf_filter_luma_20x20_10_avx2 : 517
ff_vvc_alf_filter_luma_20x24_10_c : 3894
ff_vvc_alf_filter_luma_20x24_10_avx2 : 621
ff_vvc_alf_filter_luma_20x28_10_c : 4542
ff_vvc_alf_filter_luma_20x28_10_avx2 : 722
ff_vvc_alf_filter_luma_20x32_10_c : 5205
ff_vvc_alf_filter_luma_20x32_10_avx2 : 832
ff_vvc_alf_filter_luma_24x4_10_c : 774
ff_vvc_alf_filter_luma_24x4_10_avx2 : 104
ff_vvc_alf_filter_luma_24x8_10_c : 1546
ff_vvc_alf_filter_luma_24x8_10_avx2 : 206
ff_vvc_alf_filter_luma_24x12_10_c : 2318
ff_vvc_alf_filter_luma_24x12_10_avx2 : 312
ff_vvc_alf_filter_luma_24x16_10_c : 3104
ff_vvc_alf_filter_luma_24x16_10_avx2 : 411
ff_vvc_alf_filter_luma_24x20_10_c : 3893
ff_vvc_alf_filter_luma_24x20_10_avx2 : 513
ff_vvc_alf_filter_luma_24x24_10_c : 4681
ff_vvc_alf_filter_luma_24x24_10_avx2 : 616
ff_vvc_alf_filter_luma_24x28_10_c : 5474
ff_vvc_alf_filter_luma_24x28_10_avx2 : 721
ff_vvc_alf_filter_luma_24x32_10_c : 6271
ff_vvc_alf_filter_luma_24x32_10_avx2 : 832
ff_vvc_alf_filter_luma_28x4_10_c : 907
ff_vvc_alf_filter_luma_28x4_10_avx2 : 103
ff_vvc_alf_filter_luma_28x8_10_c : 1797
ff_vvc_alf_filter_luma_28x8_10_avx2 : 206
ff_vvc_alf_filter_luma_28x12_10_c : 2708
ff_vvc_alf_filter_luma_28x12_10_avx2 : 309
ff_vvc_alf_filter_luma_28x16_10_c : 3632
ff_vvc_alf_filter_luma_28x16_10_avx2 : 413
ff_vvc_alf_filter_luma_28x20_10_c : 4537
ff_vvc_alf_filter_luma_28x20_10_avx2 : 519
ff_vvc_alf_filter_luma_28x24_10_c : 5463
ff_vvc_alf_filter_luma_28x24_10_avx2 : 616
ff_vvc_alf_filter_luma_28x28_10_c : 6372
ff_vvc_alf_filter_luma_28x28_10_avx2 : 719
ff_vvc_alf_filter_luma_28x32_10_c : 7274
ff_vvc_alf_filter_luma_28x32_10_avx2 : 823
ff_vvc_alf_filter_luma_32x4_10_c : 1029
ff_vvc_alf_filter_luma_32x4_10_avx2 : 104
ff_vvc_alf_filter_luma_32x8_10_c : 2060
ff_vvc_alf_filter_luma_32x8_10_avx2 : 206
ff_vvc_alf_filter_luma_32x12_10_c : 3112
ff_vvc_alf_filter_luma_32x12_10_avx2 : 307
ff_vvc_alf_filter_luma_32x16_10_c : 4161
ff_vvc_alf_filter_luma_32x16_10_avx2 : 413
ff_vvc_alf_filter_luma_32x20_10_c : 5211
ff_vvc_alf_filter_luma_32x20_10_avx2 : 514
ff_vvc_alf_filter_luma_32x24_10_c : 6238
ff_vvc_alf_filter_luma_32x24_10_avx2 : 614
ff_vvc_alf_filter_luma_32x28_10_c : 7261
ff_vvc_alf_filter_luma_32x28_10_avx2 : 720
ff_vvc_alf_filter_luma_32x32_10_c : 8312
ff_vvc_alf_filter_luma_32x32_10_avx2 : 819
ff_vvc_alf_filter_chroma_4x4_10_c : 70
ff_vvc_alf_filter_chroma_4x4_10_avx2 : 53
ff_vvc_alf_filter_chroma_4x8_10_c : 139
ff_vvc_alf_filter_chroma_4x8_10_avx2 : 104
ff_vvc_alf_filter_chroma_4x12_10_c : 208
ff_vvc_alf_filter_chroma_4x12_10_avx2 : 155
ff_vvc_alf_filter_chroma_4x16_10_c : 275
ff_vvc_alf_filter_chroma_4x16_10_avx2 : 218
ff_vvc_alf_filter_chroma_4x20_10_c : 344
ff_vvc_alf_filter_chroma_4x20_10_avx2 : 257
ff_vvc_alf_filter_chroma_4x24_10_c : 411
ff_vvc_alf_filter_chroma_4x24_10_avx2 : 309
ff_vvc_alf_filter_chroma_4x28_10_c : 481
ff_vvc_alf_filter_chroma_4x28_10_avx2 : 361
ff_vvc_alf_filter_chroma_4x32_10_c : 545
ff_vvc_alf_filter_chroma_4x32_10_avx2 : 411
ff_vvc_alf_filter_chroma_8x4_10_c : 138
ff_vvc_alf_filter_chroma_8x4_10_avx2 : 53
ff_vvc_alf_filter_chroma_8x8_10_c : 274
ff_vvc_alf_filter_chroma_8x8_10_avx2 : 106
ff_vvc_alf_filter_chroma_8x12_10_c : 422
ff_vvc_alf_filter_chroma_8x12_10_avx2 : 158
ff_vvc_alf_filter_chroma_8x16_10_c : 545
ff_vvc_alf_filter_chroma_8x16_10_avx2 : 206
ff_vvc_alf_filter_chroma_8x20_10_c : 683
ff_vvc_alf_filter_chroma_8x20_10_avx2 : 257
ff_vvc_alf_filter_chroma_8x24_10_c : 816
ff_vvc_alf_filter_chroma_8x24_10_avx2 : 312
ff_vvc_alf_filter_chroma_8x28_10_c : 951
ff_vvc_alf_filter_chroma_8x28_10_avx2 : 359
ff_vvc_alf_filter_chroma_8x32_10_c : 1098
ff_vvc_alf_filter_chroma_8x32_10_avx2 : 409
ff_vvc_alf_filter_chroma_12x4_10_c : 204
ff_vvc_alf_filter_chroma_12x4_10_avx2 : 53
ff_vvc_alf_filter_chroma_12x8_10_c : 410
ff_vvc_alf_filter_chroma_12x8_10_avx2 : 104
ff_vvc_alf_filter_chroma_12x12_10_c : 614
ff_vvc_alf_filter_chroma_12x12_10_avx2 : 155
ff_vvc_alf_filter_chroma_12x16_10_c : 814
ff_vvc_alf_filter_chroma_12x16_10_avx2 : 210
ff_vvc_alf_filter_chroma_12x20_10_c : 1017
ff_vvc_alf_filter_chroma_12x20_10_avx2 : 258
ff_vvc_alf_filter_chroma_12x24_10_c : 1221
ff_vvc_alf_filter_chroma_12x24_10_avx2 : 308
ff_vvc_alf_filter_chroma_12x28_10_c : 1423
ff_vvc_alf_filter_chroma_12x28_10_avx2 : 366
ff_vvc_alf_filter_chroma_12x32_10_c : 1624
ff_vvc_alf_filter_chroma_12x32_10_avx2 : 410
ff_vvc_alf_filter_chroma_16x4_10_c : 272
ff_vvc_alf_filter_chroma_16x4_10_avx2 : 52
ff_vvc_alf_filter_chroma_16x8_10_c : 541
ff_vvc_alf_filter_chroma_16x8_10_avx2 : 105
ff_vvc_alf_filter_chroma_16x12_10_c : 812
ff_vvc_alf_filter_chroma_16x12_10_avx2 : 155
ff_vvc_alf_filter_chroma_16x16_10_c : 1091
ff_vvc_alf_filter_chroma_16x16_10_avx2 : 206
ff_vvc_alf_filter_chroma_16x20_10_c : 1354
ff_vvc_alf_filter_chroma_16x20_10_avx2 : 257
ff_vvc_alf_filter_chroma_16x24_10_c : 1637
ff_vvc_alf_filter_chroma_16x24_10_avx2 : 313
ff_vvc_alf_filter_chroma_16x28_10_c : 1899
ff_vvc_alf_filter_chroma_16x28_10_avx2 : 359
ff_vvc_alf_filter_chroma_16x32_10_c : 2161
ff_vvc_alf_filter_chroma_16x32_10_avx2 : 410
ff_vvc_alf_filter_chroma_20x4_10_c : 339
ff_vvc_alf_filter_chroma_20x4_10_avx2 : 103
ff_vvc_alf_filter_chroma_20x8_10_c : 681
ff_vvc_alf_filter_chroma_20x8_10_avx2 : 207
ff_vvc_alf_filter_chroma_20x12_10_c : 1013
ff_vvc_alf_filter_chroma_20x12_10_avx2 : 307
ff_vvc_alf_filter_chroma_20x16_10_c : 1349
ff_vvc_alf_filter_chroma_20x16_10_avx2 : 415
ff_vvc_alf_filter_chroma_20x20_10_c : 1685
ff_vvc_alf_filter_chroma_20x20_10_avx2 : 522
ff_vvc_alf_filter_chroma_20x24_10_c : 2037
ff_vvc_alf_filter_chroma_20x24_10_avx2 : 622
ff_vvc_alf_filter_chroma_20x28_10_c : 2380
ff_vvc_alf_filter_chroma_20x28_10_avx2 : 733
ff_vvc_alf_filter_chroma_20x32_10_c : 2712
ff_vvc_alf_filter_chroma_20x32_10_avx2 : 838
ff_vvc_alf_filter_chroma_24x4_10_c : 408
ff_vvc_alf_filter_chroma_24x4_10_avx2 : 104
ff_vvc_alf_filter_chroma_24x8_10_c : 818
ff_vvc_alf_filter_chroma_24x8_10_avx2 : 207
ff_vvc_alf_filter_chroma_24x12_10_c : 1219
ff_vvc_alf_filter_chroma_24x12_10_avx2 : 308
ff_vvc_alf_filter_chroma_24x16_10_c : 1648
ff_vvc_alf_filter_chroma_24x16_10_avx2 : 420
ff_vvc_alf_filter_chroma_24x20_10_c : 2061
ff_vvc_alf_filter_chroma_24x20_10_avx2 : 525
ff_vvc_alf_filter_chroma_24x24_10_c : 2437
ff_vvc_alf_filter_chroma_24x24_10_avx2 : 617
ff_vvc_alf_filter_chroma_24x28_10_c : 2832
ff_vvc_alf_filter_chroma_24x28_10_avx2 : 722
ff_vvc_alf_filter_chroma_24x32_10_c : 3271
ff_vvc_alf_filter_chroma_24x32_10_avx2 : 830
ff_vvc_alf_filter_chroma_28x4_10_c : 476
ff_vvc_alf_filter_chroma_28x4_10_avx2 : 104
ff_vvc_alf_filter_chroma_28x8_10_c : 948
ff_vvc_alf_filter_chroma_28x8_10_avx2 : 205
ff_vvc_alf_filter_chroma_28x12_10_c : 1420
ff_vvc_alf_filter_chroma_28x12_10_avx2 : 310
ff_vvc_alf_filter_chroma_28x16_10_c : 1889
ff_vvc_alf_filter_chroma_28x16_10_avx2 : 423
ff_vvc_alf_filter_chroma_28x20_10_c : 2372
ff_vvc_alf_filter_chroma_28x20_10_avx2 : 513
ff_vvc_alf_filter_chroma_28x24_10_c : 2843
ff_vvc_alf_filter_chroma_28x24_10_avx2 : 618
ff_vvc_alf_filter_chroma_28x28_10_c : 3307
ff_vvc_alf_filter_chroma_28x28_10_avx2 : 724
ff_vvc_alf_filter_chroma_28x32_10_c : 3801
ff_vvc_alf_filter_chroma_28x32_10_avx2 : 827
ff_vvc_alf_filter_chroma_32x4_10_c : 543
ff_vvc_alf_filter_chroma_32x4_10_avx2 : 105
ff_vvc_alf_filter_chroma_32x8_10_c : 1084
ff_vvc_alf_filter_chroma_32x8_10_avx2 : 206
ff_vvc_alf_filter_chroma_32x12_10_c : 1621
ff_vvc_alf_filter_chroma_32x12_10_avx2 : 309
ff_vvc_alf_filter_chroma_32x16_10_c : 2173
ff_vvc_alf_filter_chroma_32x16_10_avx2 : 408
ff_vvc_alf_filter_chroma_32x20_10_c : 2703
ff_vvc_alf_filter_chroma_32x20_10_avx2 : 513
ff_vvc_alf_filter_chroma_32x24_10_c : 3245
ff_vvc_alf_filter_chroma_32x24_10_avx2 : 612
ff_vvc_alf_filter_chroma_32x28_10_c : 3795
ff_vvc_alf_filter_chroma_32x28_10_avx2 : 722
ff_vvc_alf_filter_chroma_32x32_10_c : 4339
ff_vvc_alf_filter_chroma_32x32_10_avx2 : 820Signed-off-by : Wu Jianhua <toqsxw@outlook.com>
-
libavcodec/alpha : remove DSP & support code
9 juin 2024, par Sean McGovernlibavcodec/alpha : remove DSP & support code
Introduced in 1992, the Alpha was a 64-bit RISC processor designed
to replace the VAX CISC machines sold by Digital Equipment Corporation.After Digital was acquired by Compaq in 1998 — who themselves would be
later purchased by Hewlett-Packard, the architecture was phased out over
the following decade. It became effectively defunct in 2007, the last
publicly available processor being the Alpha 21364.FFmpeg has not added any DSP code for this architecture since lowres2
was introduced in 2012, and it is more than unlikely someone still wishes
to maintain it.Remove the DSP and support code.
Signed-off-by : Vittorio Giovara <vittorio.giovara@gmail.com>
- [DH] Changelog
- [DH] configure
- [DH] libavcodec/alpha/Makefile
- [DH] libavcodec/alpha/asm.h
- [DH] libavcodec/alpha/blockdsp_alpha.c
- [DH] libavcodec/alpha/hpeldsp_alpha.c
- [DH] libavcodec/alpha/hpeldsp_alpha.h
- [DH] libavcodec/alpha/hpeldsp_alpha_asm.S
- [DH] libavcodec/alpha/idctdsp_alpha.c
- [DH] libavcodec/alpha/idctdsp_alpha.h
- [DH] libavcodec/alpha/idctdsp_alpha_asm.S
- [DH] libavcodec/alpha/me_cmp_alpha.c
- [DH] libavcodec/alpha/me_cmp_mvi_asm.S
- [DH] libavcodec/alpha/mpegvideo_alpha.c
- [DH] libavcodec/alpha/pixblockdsp_alpha.c
- [DH] libavcodec/alpha/regdef.h
- [DH] libavcodec/alpha/simple_idct_alpha.c
- [DH] libavcodec/blockdsp.c
- [DH] libavcodec/hpeldsp.c
- [DH] libavcodec/idctdsp.c
- [DH] libavcodec/me_cmp.c
- [DH] libavcodec/mpegvideo.c
- [DH] libavcodec/pixblockdsp.c
-
Adventures In NAS
1er janvier, par Multimedia Mike — GeneralIn my post last year about my out-of-control single-board computer (SBC) collection which included my meager network attached storage (NAS) solution, I noted that :
I find that a lot of my fellow nerds massively overengineer their homelab NAS setups. I’ll explore this in a future post. For my part, people tend to find my homelab NAS solution slightly underengineered.
So here I am, exploring this is a future post. I’ve been in the home NAS game a long time, but have never had very elaborate solutions for such. For my part, I tend to take an obsessively reductionist view of what constitutes a NAS : Any small computer with a pool of storage and a network connection, running the Linux operating system and the Samba file sharing service.
Many home users prefer to buy turnkey boxes, usually that allow you to install hard drives yourself, and then configure the box and its services with a friendly UI. My fellow weird computer nerds often buy cast-off enterprise hardware and set up more resilient, over-engineered solutions, as long as they have strategies to mitigate the noise and dissipate the heat, and don’t mind the electricity bills.
If it works, awesome ! As an old hand at this, I am rather stuck in my ways, however, preferring to do my own stunts, both with the hardware and software solutions.
My History With Home NAS Setups
In 1998, I bought myself a new computer — beige box tower PC, as was the style as the time. This was when normal people only had one computer at most. It ran Windows, but I was curious about this new thing called “Linux” and learned to dual boot that. Later that year, it dawned on me that nothing prevented me from buying a second ugly beige box PC and running Linux exclusively on it. Further, it could be a headless Linux box, connected by ethernet, and I could consolidate files into a single place using this file sharing software named Samba.
I remember it being fairly onerous to get Samba working in those days. And the internet was not quite so helpful in those days. I recall that the thing that blocked me for awhile was needing to know that I had to specify an entry for the Samba server machine in the LMHOSTS (Lanman hosts) file on the Windows 95 machine.
However, after I cracked that code, I have pretty much always had some kind of ad-hoc home NAS setup, often combined with a headless Linux development box.
In the early 2000s, I built a new beige box PC for a file server, with a new hard disk, and a coworker tutored me on setting up a (P)ATA UDMA 133 (or was it 150 ? anyway, it was (P)ATA’s last hurrah before SATA conquered all) expansion card and I remember profiling that the attached hard drive worked at a full 21 MBytes/s reading. It was pretty slick. Except I hadn’t really thought things through. You see, I had a hand-me-down ethernet hub cast-off from my job at the time which I wanted to use. It was a 100 Mbps repeater hub, not a switch, so the catch was that all connected machines had to be capable of 100 Mbps. So, after getting all of my machines (3 at the time) upgraded to support 10/100 ethernet (the old off-brand PowerPC running Linux was the biggest challenge), I profiled transfers and realized that the best this repeater hub could achieve was about 3.6 MBytes/s. For a long time after that, I just assumed that was the upper limit of what a 100 Mbps network could achieve. Obviously, I now know that the upper limit ought to be around 11.2 MBytes/s and if I had gamed out that fact in advance, I would have realized it didn’t make sense to care about super-fast (for the time) disk performance.
At this time, I was doing a lot for development for MPlayer/xine/FFmpeg. I stored all of my multimedia material on this NAS. I remember being confused when I was working with Y4M data, which is raw frames, which is lots of data. xine, which employed a pre-buffering strategy, would play fine for a few seconds and then stutter. Eventually, I reasoned out that the files I was working with had a data rate about twice what my awful repeater hub supported, which is probably the first time I came to really understand and respect streaming speeds and their implications for multimedia playback.
Smaller Solutions
For a period, I didn’t have a NAS. Then I got an Apple AirPort Extreme, which I noticed had a USB port. So I bought a dual drive brick to plug into it and used that for a time. Later (2009), I had this thing called the MSI Wind Nettop which is the only PC I’ve ever seen that can use a CompactFlash (CF) card for a boot drive. So I did just that, and installed a large drive so it could function as a NAS, as well as a headless dev box. I’m still amazed at what a low-power I/O beast this thing is, at least when compared to all the ARM SoCs I have tried in the intervening 1.5 decades. I’ve had spinning hard drives in this thing that could read at 160 MBytes/s (‘dd’ method) and have no trouble saturating the gigabit link at 112 MBytes/s, all with its early Intel Atom CPU.Around 2015, I wanted a more capable headless dev box and discovered Intel’s line of NUCs. I got one of the fat models that can hold a conventional 2.5″ spinning drive in addition to the M.2 SATA SSD and I was off and running. That served me fine for a few years, until I got into the ARM SBC scene. One major limitation here is that 2.5″ drives aren’t available in nearly the capacities that make a NAS solution attractive.
Current Solution
My current NAS solution, chronicled in my last SBC post– the ODroid-HC2, which is a highly compact ARM SoC with an integrated USB3-SATA bridge so that a SATA drive can be connected directly to it :
I tend to be weirdly proficient at recalling dates, so I’m surprised that I can’t recall when I ordered this and put it into service. But I’m pretty sure it was circa 2018. It’s only equipped with an 8 TB drive now, but I seem to recall that it started out with only a 4 TB drive. I think I upgraded to the 8 TB drive early in the pandemic in 2020, when ISPs were implementing temporary data cap amnesty and I was doing what a r/DataHoarder does.
The HC2 has served me well, even though it has a number of shortcomings for a hardware set chartered for NAS :
- While it has a gigabit ethernet port, it’s documented that it never really exceeds about 70 MBytes/s, due to the SoC’s limitations
- The specific ARM chip (Samsung Exynos 5422 ; more than a decade old as of this writing) lacks cryptography instructions, slowing down encryption if that’s your thing (e.g., LUKS)
- While the SoC supports USB3, that block is tied up for the SATA interface ; the remaining USB port is only capable of USB2 speeds
- 32-bit ARM, which prevented me from running certain bits of software I wanted to try (like Minio)
- Only 1 drive, so no possibility for RAID (again, if that’s your thing)
I also love to brag on the HC2’s power usage : I once profiled the unit for a month using a Kill-A-Watt and under normal usage (with the drive spinning only when in active use). The unit consumed 4.5 kWh… in an entire month.
New Solution
Enter the ODroid-HC4 (I purchased mine from Ameridroid but Hardkernel works with numerous distributors) :
I ordered this earlier in the year and after many months of procrastinating and obsessing over the best approach to take with its general usage, I finally have it in service as my new NAS. Comparing point by point with the HC2 :
- The gigabit ethernet runs at full speed (though a few things on my network run at 2.5 GbE now, so I guess I’ll always be behind)
- The ARM chip (Amlogic S905X3) has AES cryptography acceleration and handles all the LUKS stuff without breaking a sweat ; “cryptsetup benchmark” reports between 500-600 MBytes/s on all the AES variants
- The USB port is still only USB2, so no improvement there
- 64-bit ARM, which means I can run Minio to simulate block storage in a local dev environment for some larger projects I would like to undertake
- Supports 2 drives, if RAID is your thing
How I Set It Up
How to set up the drive configuration ? As should be apparent from the photo above, I elected for an SSD (500 GB) for speed, paired with a conventional spinning HDD (18 TB) for sheer capacity. I’m not particularly trusting of RAID. I’ve watched it fail too many times, on systems that I don’t even manage, not to mention that aforementioned RAID brick that I had attached to the Apple AirPort Extreme.I had long been planning to use bcache, the block caching interface for Linux, which can use the SSD as a speedy cache in front of the more capacious disk. There is also LVM cache, which is supposed to achieve something similar. And then I had to evaluate the trade-offs in whether I wanted write-back, write-through, or write-around configurations.
This was all predicated on the assumption that the spinning drive would not be able to saturate the gigabit connection. When I got around to setting up the hardware and trying some basic tests, I found that the conventional HDD had no trouble keeping up with the gigabit data rate, both reading and writing, somewhat obviating the need for SSD acceleration using any elaborate caching mechanisms.
Maybe that’s because I sprung for the WD Red Pro series this time, rather than the Red Plus ? I’m guessing that conventional drives do deteriorate over the years. I’ll find out.
For the operating system, I stuck with my newest favorite Linux distro : DietPi. While HardKernel (parent of ODroid) makes images for the HC units, I had also used DietPi for the HC2 for the past few years, as it tends to stay more up to date.
Then I rsync’d my data from HC2 -> HC4. It was only about 6.5 TB of total data but it took days as this WD Red Plus drive is only capable of reading at around 10 MBytes/s these days. Painful.
For file sharing, I’m pretty sure most normal folks have nice web UIs in their NAS boxes which allow them to easily configure and monitor the shares. I know there are such applications I could set up. But I’ve been doing this so long, I just do a bare bones setup through the terminal. I installed regular Samba and then brought over my smb.conf file from the HC2. 1 by 1, I tested that each of the old shares were activated on the new NAS and deactivated on the old NAS. I also set up a new share for the SSD. I guess that will just serve as a fast I/O scratch space on the NAS.
The conventional drive spins up and down. That’s annoying when I’m actively working on something but manage not to hit the drive for like 5 minutes and then an application blocks while the drive wakes up. I suppose I could set it up so that it is always running. However, I micro-manage this with a custom bash script I wrote a long time ago which logs into the NAS and runs the “date” command every 2 minutes, appending the output to a file. As a bonus, it also prints data rate up/down stats every 5 seconds. The spinning file (“nas-main/zz-keep-spinning/keep-spinning.txt”) has never been cleared and has nearly a quarter million lines. I suppose that implies that it has kept the drive spinning for 1/2 million minutes which works out to around 347 total days. I should compare that against the drive’s SMART stats, if I can remember how. The earliest timestamp in the file is from March 2018, so I know the HC2 NAS has been in service at least that long.
For tasks, vintage cron still does everything I could need. In this case, that means reaching out to websites (like this one) and automatically backing up static files.
I also have to have a special script for starting up. Fortunately, I was able to bring this over from the HC2 and tweak it. The data disks (though not boot disk) are encrypted. Those need to be unlocked and only then is it safe for the Samba and Minio services to start up. So one script does all that heavy lifting in the rare case of a reboot (this is the type of system that’s well worth having on a reliable UPS).
Further Work
I need to figure out how to use the OLED display on the NAS, and how to make it show something more useful than the current time and date, which is what it does in its default configuration with HardKernel’s own Linux distro. With DietPi, it does nothing by default. I’m thinking it should be able to show the percent usage of each of the 2 drives, at a minimum.I also need to establish a more responsible backup regimen. I’m way too lazy about this. Fortunately, I reason that I can keep the original HC2 in service, repurposed to accept backups from the main NAS. Again, I’m sort of micro-managing this since a huge amount of data isn’t worth backing up (remember the whole DataHoarder bit), but the most important stuff will be shipped off.
The post Adventures In NAS first appeared on Breaking Eggs And Making Omelettes.